Zasadniczo istnieją trzy możliwości przetłumaczenia uogólnienia na model bazy danych
1. Jeden stół na klasę betonu
Utwórz tabele Admin
, Teacher
i Student
. Każda z tych tabel zawiera kolumny dla wszystkich atrybutów i relacji User
- Pro
- Wszystkie pola konkretnej podklasy znajdują się w tej samej tabeli, więc nie jest potrzebne łączenie, aby uzyskać wszystkie dane Studenta
- Łatwe ograniczenia walidacji danych (takie jak obowiązkowe pola dla
Student
)
- Kon
- Wszystkie pola
User
są zduplikowane w każdej tabeli podklas - Klucze obce do
User
muszą być podzielone na trzy pola FK. Jeden dlaAdmin
, jeden dlaTeacher
i jeden dlaStudent
.
- Wszystkie pola
2. Na stole dla całego zestawu generalizacji
W tym przypadku masz tylko jedną tabelę wywołania User
który zawiera wszystkie pola User
+ wszystkie pola wszystkich podklas User
- Pro
- Wszystkie pola znajdują się w tej samej tabeli, więc nie jest potrzebne połączenie, aby uzyskać wszystkich
User
dane - Brak podziału FK na
User
- Wszystkie pola znajdują się w tej samej tabeli, więc nie jest potrzebne połączenie, aby uzyskać wszystkich
- Kon
- Istnieje wiele pól, które nigdy nie są używane. Wszystkie pola specyficzne dla
Student
iTeacher
nigdy nie są wypełniane dlaAdmins
i odwrotnie - Weryfikacja danych, takich jak pola obowiązkowe dla konkretnej klasy, takiej jak
Student
stają się dość skomplikowane, ponieważ nie są już prostymNot Null
ograniczenie.
- Istnieje wiele pól, które nigdy nie są używane. Wszystkie pola specyficzne dla
3. Jeden stół na konkretną klasę i jeden na superklasę
W tym przypadku tworzysz tabele dla każdej z konkretnych podklas i tworzysz tabelę dla klasy User
. Każda z konkretnych tabel podklas ma obowiązkowy FK dla User
- Pro
- Najbardziej znormalizowany schemat:brak powtarzających się pól dla atrybutów użytkownika i brak nieużywanych pól.
- Brak podziału FK na
User
- Łatwe ograniczenia walidacji danych (takie jak obowiązkowe pola dla
Student
)
- Kon
- Musisz wysłać zapytanie do dwóch tabel, jeśli chcesz uzyskać wszystkie dane
Student
- Złożone reguły walidacji, aby upewnić się, że każdy
User
rekord ma dokładnie jednegoAdmin
,Teacher
lubStudent
rekord.
- Musisz wysłać zapytanie do dwóch tabel, jeśli chcesz uzyskać wszystkie dane
Wybór jednej z tych opcji zależy od wielu czynników, takich jak liczba podklas, liczba atrybutów w podklasie lub nadklasie, liczba FK w nadklasie i prawdopodobnie kilku innych rzeczy, których nie zrobiłem pomyśl o tym.