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
Userdupliceras i varje underklasstabell - Främmande nycklar till
Usermåste delas upp i tre FK-fält. En förAdmin, en förTeacheroch 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
Userdata - 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
StudentochTeacherfylls aldrig i förAdminsoch vice versa - Datavalidering som obligatoriska fält för en konkret klass som
Studentbli ganska komplex eftersom det inte längre är en enkelNot Nullbegrä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
Userposten har exakt enAdmin,TeacherellerStudentspela 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å.