Er zijn in principe drie keuzes om generalisatie te vertalen naar een databasemodel
1. Eén tafel per betonklasse
Tabellen maken Admin
, Teacher
en Student
. Elk van deze tabellen bevat kolommen voor alle attributen en relaties van User
- Pro
- Alle velden van een concrete subklasse staan in dezelfde tabel, dus er is geen join nodig om alle studentgegevens te krijgen
- Eenvoudige gegevensvalidatiebeperkingen (zoals verplichte velden voor
Student
)
- Con
- Alle velden van
User
worden gedupliceerd in elke subklassetabel - Buitenlandse sleutels voor
User
moeten worden opgesplitst in drie FK-velden. Een voorAdmin
, een voorTeacher
en één voorStudent
.
- Alle velden van
2. Op tafel voor hele generalisatieset
In dit geval heb je slechts één tafelaanroep User
die alle velden van User
. bevat + alle velden van alle subklassen van User
- Pro
- Alle velden staan in dezelfde tabel, dus er is geen join nodig om alle
User
te krijgen gegevens - Geen splitsing van FK's naar
User
- Alle velden staan in dezelfde tabel, dus er is geen join nodig om alle
- Con
- Er zijn een aantal velden die nooit worden gebruikt. Alle velden specifiek voor
Student
enTeacher
worden nooit ingevuld voorAdmins
en vice versa - Gegevensvalidatie zoals verplichte velden voor een concrete klas zoals
Student
vrij complex worden omdat het niet langer een eenvoudigeNot Null
. is beperking.
- Er zijn een aantal velden die nooit worden gebruikt. Alle velden specifiek voor
3. Eén tafel per betonklasse en één voor de superklasse
In dit geval maakt u tabellen aan voor elk van de concrete subklassen en maakt u een tabel aan voor de klasse User
. Elk van de concrete subklasse-tabellen heeft een verplichte FK tot User
- Pro
- Meest genormaliseerde schema:geen herhaalde velden voor de kenmerken van de gebruiker en geen ongebruikte velden.
- Geen splitsing van FK's naar
User
- Eenvoudige gegevensvalidatiebeperkingen (zoals verplichte velden voor
Student
)
- Con
- Je moet twee tabellen opvragen als je alle gegevens van een
Student
wilt hebben - Complexe validatieregels om ervoor te zorgen dat elke
User
record heeft precies éénAdmin
,Teacher
ofStudent
opnemen.
- Je moet twee tabellen opvragen als je alle gegevens van een
Welke van deze opties je kiest, hangt af van een aantal dingen, zoals het aantal subklassen, het aantal attributen in een subklasse of superklasse, het aantal FK's voor de superklasse en waarschijnlijk een paar andere dingen die ik niet heb gedaan denk aan.