Det finns i princip tre val för att översätta generalisering till en databasmodell
1. Ett bord per betongklass
Skapa tabeller Admin
, Teacher
och Student
. Var och en av dessa tabeller innehåller kolumner för alla attribut och relationer för User
- Pro
- Alla fält i en konkret underklass finns i samma tabell, så ingen koppling behövs för att få all studentdata
- Enkla begränsningar för datavalidering (som obligatoriska fält för
Student
)
- Con
- Alla fält för
User
dupliceras i varje underklasstabell - Främmande nycklar till
User
måste delas upp i tre FK-fält. En förAdmin
, en förTeacher
och en förStudent
.
- Alla fält för
2. På bordet för hela generaliseringsuppsättningen
I det här fallet har du bara ett tabellanrop User
som innehåller alla fält för User
+ alla fält i alla underklasser av User
- Pro
- Alla fält finns i samma tabell, så ingen anslutning behövs för att få alla
User
data - Ingen uppdelning av FK:er till
User
- Alla fält finns i samma tabell, så ingen anslutning behövs för att få alla
- Con
- Det finns ett gäng fält som aldrig används. Alla fält specifika för
Student
ochTeacher
fylls aldrig i förAdmins
och vice versa - Datavalidering som obligatoriska fält för en konkret klass som
Student
bli ganska komplex eftersom det inte längre är en enkelNot Null
begränsning.
- Det finns ett gäng fält som aldrig används. Alla fält specifika för
3. Ett bord per betongklass och ett för superklassen
I det här fallet skapar du tabeller för var och en av de konkreta underklasserna och du skapar en tabell för klassen User
. Var och en av de konkreta underklasstabellerna har en obligatorisk FK till User
- Pro
- Mest normaliserade schema:Inga upprepade fält för användarens attribut och inga oanvända fält.
- Ingen uppdelning av FK:er till
User
- Enkla begränsningar för datavalidering (som obligatoriska fält för
Student
)
- Con
- Du måste fråga två tabeller om du vill ha all data för en
Student
- Komplexa valideringsregler för att säkerställa att varje
User
posten har exakt enAdmin
,Teacher
ellerStudent
spela in.
- Du måste fråga två tabeller om du vill ha all data för en
Vilket av dessa alternativ du väljer beror på ett antal saker som antalet underklasser, antalet attribut i antingen underklass eller superklass, antalet FK till superklassen, och förmodligen några andra saker som jag inte gjorde tänka på.