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
Usersą zduplikowane w każdej tabeli podklas - Klucze obce do
Usermuszą być podzielone na trzy pola FK. Jeden dlaAdmin, jeden dlaTeacheri 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
Userdane - 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
StudentiTeachernigdy nie są wypełniane dlaAdminsi odwrotnie - Weryfikacja danych, takich jak pola obowiązkowe dla konkretnej klasy, takiej jak
Studentstają się dość skomplikowane, ponieważ nie są już prostymNot Nullograniczenie.
- 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
Userrekord ma dokładnie jednegoAdmin,TeacherlubStudentrekord.
- 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.