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
User
werden in jeder Unterklassentabelle dupliziert - Fremdschlüssel für
User
müssen in drei FK-Felder aufgeteilt werden. Eine fürAdmin
, eine fürTeacher
und 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
User
zu 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
Student
undTeacher
werden fürAdmins
nie ausgefüllt und umgekehrt - Datenvalidierung wie Pflichtfelder für eine konkrete Klasse wie
Student
ziemlich komplex werden, da es kein einfacherNot Null
mehr 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
Student
wollen - Komplexe Validierungsregeln, um sicherzustellen, dass jeder
User
Datensatz hat genau einenAdmin
,Teacher
oderStudent
aufnehmen.
- 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.