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:
- 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.
- 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.
- 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