V zásadě existují tři možnosti, jak převést zobecnění do databázového modelu
1. Jedna tabulka na betonovou třídu
Vytvořte tabulky Admin
, Teacher
a Student
. Každá z těchto tabulek obsahuje sloupce pro všechny atributy a vztahy User
- Pro
- Všechna pole konkrétní podtřídy jsou ve stejné tabulce, takže k získání všech dat studentů není potřeba spojení
- Snadná omezení ověřování dat (jako jsou povinná pole pro
Student
)
- Kon
- Všechna pole
User
jsou duplikovány v každé tabulce podtříd - Cizí klíče pro
User
musí být rozdělena do tří polí FK. Jeden proAdmin
, jeden proTeacher
a jeden proStudent
.
- Všechna pole
2. Na stole pro celou sadu zobecnění
V tomto případě máte pouze jedno volání tabulky User
který obsahuje všechna pole User
+ všechna pole všech podtříd User
- Pro
- Všechna pole jsou ve stejné tabulce, takže k získání všech
User
není potřeba spojení údaje - Žádné rozdělení FK na
User
- Všechna pole jsou ve stejné tabulce, takže k získání všech
- Kon
- Existuje spousta polí, která se nikdy nepoužívají. Všechna pole specifická pro
Student
aTeacher
se uAdmins
nikdy nevyplňují a naopak - Ověření dat, jako jsou povinná pole pro konkrétní třídu, jako je
Student
se stává poměrně složitým, protože již není jednoduchýmNot Null
omezení.
- Existuje spousta polí, která se nikdy nepoužívají. Všechna pole specifická pro
3. Jedna tabulka pro konkrétní třídu a jedna pro nadtřídu
V tomto případě vytvoříte tabulky pro každou z konkrétních podtříd a vytvoříte tabulku pro třídu User
. Každá z konkrétních tabulek podtříd má povinný FK pro User
- Pro
- Nejnormalizovanější schéma:Žádná opakovaná pole pro atributy uživatele a žádná nepoužívaná pole.
- Žádné rozdělení FK na
User
- Snadná omezení ověřování dat (jako jsou povinná pole pro
Student
)
- Kon
- Pokud chcete všechna data
Student
, musíte zadat dotaz do dvou tabulek - Složitá ověřovací pravidla, která zajistí, aby každý
User
záznam má právě jednohoAdmin
,Teacher
neboStudent
záznam.
- Pokud chcete všechna data
Kterou z těchto možností zvolíte, závisí na řadě věcí, jako je počet podtříd, počet atributů v podtřídě nebo nadtřídě, počet FK do nadtřídy a pravděpodobně na několika dalších věcech, které jsem neznal. přemýšlejte.