2 Stimmen

Beste Vorgehensweise für bekannte Zeilen in einer benutzerdefinierten Tabelle?

Ich schreibe beruflich Datenbankanwendungen, die der Endbenutzer selbst anpassen kann.

Häufig bedeutet dies, dass - die Datenbank einmal beiseite gelassen - einige meiner fiktiven Entitätstypen ein Universum oder einen Bereich haben, der unendlich ist.

Nehmen Sie Namenstypen. Sie könnten einen Vornamen, einen Nachnamen, einen Ehenamen, einen juristischen Namen, einen Anredenamen und so weiter haben. Ich werde keine Obergrenze für dieses Universum festlegen.

Aber ich muss bestimmte bekannte Namenstypen finden und verwenden. Sagen wir, Anzeigename und Sortiername, nur um es einfach zu halten.

Ich möchte auch in der Lage sein, alle Namenstypen (d.h. das gesamte Universum) abzufragen und auch meine bekannten Namenstypen zurückgegeben zu bekommen.

Es gibt mehrere Strategien, um dies in einer Datenbank zu erreichen:

  1. Eine name_type-Tabelle mit einer id-Spalte und einer Code-Spalte. ID-Werte unter einem bestimmten Wert sind für die Verwendung durch das System "reserviert"; höhere ID-Werte gelten als Benutzertypen.
  2. Fügen Sie dem id/code-Paar eine Spalte hinzu, die einen booleschen oder int-Typ darstellt, der angibt, um welche Art von Zeile es sich handelt (z. B. benutzerdefiniert oder System). Das ist im Grunde dasselbe; es wird nur eine weitere Spalte verwendet, um die Informationen explizit aufzuschlüsseln, anstatt sie in der id zu überladen.
  3. Sie haben zwei Tabellen mit einer Namenskonvention: name_type und name_type_system. Es wird davon ausgegangen oder erzwungen, dass name_type_system für die Benutzer nicht zugänglich ist; name_type ist ihr Bereich. Abfragen führen eine UNION über diese Tabellen durch und Anwendungen "wissen" einfach, dass sie die Systemtabelle niemals aktualisieren dürfen.

Welche Strategien verwenden die Menschen? Gibt es Kriegsgeschichten? Gibt es besondere Gründe, die für die eine oder die andere Strategie sprechen? Gibt es große Fallstricke, die ich nicht sehe?

Das Beste,
Laird

1voto

Ken Downs Punkte 4609

Von Ihren drei Ideen wird die erste oft als magische Zahl bezeichnet, http://en.wikipedia.org/wiki/Magic_number_(Programmierung, und das ist eine schlechte Sache, weil jeder Code, der das nicht "weiß", Fehler machen kann. Außerdem stellt man im Laufe der Zeit fest: "Ups, ich muss den Mindestwert erhöhen und 10.000 vorhandene Zeilen neu ordnen".

Danach funktioniert einer der beiden anderen. Mit der dritten Methode können Sie den DB-Server verwenden, um den Zugriff auf das von den Endnutzern verwendete Konto zu verweigern, was den Code vereinfacht.

Um zwischen Option 2 und 3 zu entscheiden, muss man sich fragen, ob es sich wirklich um zwei verschiedene Dinge handelt. Wenn ja, sind sie in der Regel unterschiedlich gesichert, es werden unterschiedliche Operationen mit ihnen durchgeführt, eine wird durch Upgrades verändert, die andere nicht, usw. Wenn es sich wirklich um zwei verschiedene Dinge handelt, gehören sie in zwei Tabellen. Wenn es sich um zwei Varianten einer Sache handelt, die fast immer gleich behandelt werden, gehören sie in eine Tabelle mit einem "Typ"-Flag, Option 2.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X