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
Userworden gedupliceerd in elke subklassetabel - Buitenlandse sleutels voor
Usermoeten worden opgesplitst in drie FK-velden. Een voorAdmin, een voorTeacheren éé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
Userte 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
StudentenTeacherworden nooit ingevuld voorAdminsen vice versa - Gegevensvalidatie zoals verplichte velden voor een concrete klas zoals
Studentvrij 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
Studentwilt hebben - Complexe validatieregels om ervoor te zorgen dat elke
Userrecord heeft precies éénAdmin,TeacherofStudentopnemen.
- 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.