Grundsätzlich gibt es drei Möglichkeiten, die Generalisierung in ein Datenbankmodell zu übersetzen
1. Eine Tabelle pro Betonklasse
Erstellen Sie Tabellen Admin , Teacher und Student . Jede dieser Tabellen enthält Spalten für alle Attribute und Beziehungen von User
- Pro
- Alle Felder einer konkreten Unterklasse befinden sich in derselben Tabelle, sodass kein Join erforderlich ist, um alle Schülerdaten zu erhalten
- Einfache Datenvalidierungseinschränkungen (z. B. Pflichtfelder für
Student)
- Con
- Alle Felder von
Userwerden in jeder Unterklassentabelle dupliziert - Fremdschlüssel für
Usermüssen in drei FK-Felder aufgeteilt werden. Eine fürAdmin, eine fürTeacherund eine fürStudent.
- Alle Felder von
2. Auf dem Tisch für den gesamten Generalisierungssatz
In diesem Fall haben Sie nur eine Tabelle namens User die alle Felder von User enthält + alle Felder aller Unterklassen von User
- Pro
- Alle Felder befinden sich in derselben Tabelle, daher ist kein Join erforderlich, um alle
Userzu erhalten Daten - Kein Aufteilen von FK's auf
User
- Alle Felder befinden sich in derselben Tabelle, daher ist kein Join erforderlich, um alle
- Con
- Es gibt eine Reihe von Feldern, die nie verwendet werden. Alle Felder spezifisch für
StudentundTeacherwerden fürAdminsnie ausgefüllt und umgekehrt - Datenvalidierung wie Pflichtfelder für eine konkrete Klasse wie
Studentziemlich komplex werden, da es kein einfacherNot Nullmehr ist Einschränkung.
- Es gibt eine Reihe von Feldern, die nie verwendet werden. Alle Felder spezifisch für
3. Eine Tabelle pro konkreter Klasse und eine für die Oberklasse
In diesem Fall erstellen Sie Tabellen für jede der konkreten Unterklassen und erstellen eine Tabelle für die Klasse User . Jede der konkreten Unterklassentabellen hat einen obligatorischen FK zu User
- Pro
- Am meisten normalisiertes Schema:Keine wiederholten Felder für die Attribute des Benutzers und keine ungenutzten Felder.
- Kein Aufteilen von FK's auf
User - Einfache Datenvalidierungseinschränkungen (z. B. Pflichtfelder für
Student)
- Con
- Sie müssen zwei Tabellen abfragen, wenn Sie alle Daten eines
Studentwollen - Komplexe Validierungsregeln, um sicherzustellen, dass jeder
UserDatensatz hat genau einenAdmin,TeacheroderStudentaufnehmen.
- Sie müssen zwei Tabellen abfragen, wenn Sie alle Daten eines
Welche dieser Optionen Sie wählen, hängt von einer Reihe von Dingen ab, wie der Anzahl der Unterklassen, der Anzahl der Attribute in entweder der Unterklasse oder der Oberklasse, der Anzahl der FKs für die Oberklasse und wahrscheinlich ein paar anderen Dingen, die ich nicht getan habe überlegen.