Ich habe Probleme, genau herauszufinden, wie man gute Grenzen setzt, wann und wo Nachschlagetabellen in einer Datenbank verwendet werden sollen. Die meisten Quellen, die ich mir angesehen habe, sagen, dass ich nie zu viele haben kann, aber irgendwann scheint es, als würde die Datenbank in so viele Teile zerlegt, dass sie zwar effizient ist, aber nicht mehr verwaltet werden kann. Hier ist ein Beispiel, mit dem ich zusammenarbeite:
Nehmen wir an, ich habe eine Tabelle namens Employees:
ID LName FName Gender Position
1 Doe John Male Manager
2 Doe Jane Female Sales
3 Smith John Male Sales
Stellen Sie sich für einen Moment vor, dass die Daten komplexer sind und Hunderte von Zeilen enthalten. Das offensichtlichste, was ich sehe, das in eine Nachschlagetabelle verschoben werden könnte, wäre Position. Ich könnte eine Tabelle mit dem Namen Positionen erstellen und die Fremdschlüssel aus der Positionstabelle in die Employees-Tabelle in der Position-Spalte einfügen.
ID Position
1 Manager
2 Sales
Aber wie weit kann ich die Informationen weiterhin in kleinere Nachschlagetabellen aufteilen, bevor sie nicht mehr verwaltet werden können? Ich könnte eine Geschlechtstabelle erstellen und in einer separaten Nachschlagetabelle eine 1 für "Männlich" und eine 2 für "Weiblich" angeben. Ich könnte sogar LNames und FNames in Tabellen einfügen. Alle "John" -Einträge werden durch einen Fremdschlüssel von 1 ersetzt, der auf die FName-Tabelle verweist, in der angegeben ist, dass eine ID von 1 John entspricht. Wenn Sie dieses Kaninchenloch jedoch zu weit hinuntergehen, wird Ihre Employees-Tabelle auf ein Durcheinander von Fremdschlüsseln reduziert:
ID LName FName Gender Position
1 1 1 1 1
2 1 2 2 2
3 2 1 1 2
Während dies für einen Server möglicherweise effizienter oder nicht effizienter ist, ist es für eine normale Person, die versucht, es zu warten, sicherlich nicht lesbar, und es wird für einen Anwendungsentwickler, der versucht, darauf zuzugreifen, schwieriger. Meine eigentliche Frage ist also, wie weit ist es zu weit? Gibt es "Best Practices" für diese Art von Dingen oder irgendwo eine gute Reihe von Richtlinien? Ich kann online keine Informationen finden, die wirklich nützliche Richtlinien für dieses spezielle Problem enthalten. Datenbankdesign ist für mich ein alter Hut, aber GUTES Datenbankdesign ist sehr neu, so dass übermäßig technische Antworten über meinem Kopf sein können. Jede Hilfe wäre dankbar!