Podřízená tabulka (A.K.A. slabá entita ) je tabulka, jejíž atributy primárního klíče závisí na jiné tabulce, takže podřízená tabulka je identifikována nebo částečně identifikované podle řádků v tabulce závisí na (rodič). Řádky v podřízené tabulce nemohou existovat bez odpovídajícího řádku v nadřazené tabulce.
Pro ilustraci si uveďme jednoduchý a zcela relevantní příklad, který všichni známe:Rodiče a děti v kontextu rodiny . Tento vztah můžeme modelovat pomocí tabulek takto:
Ve výše uvedeném modelu každý řádek v Parents
tabulka je jedinečně identifikována pomocí SSN
. SSN
je vnitřním a jedinečným atributem pro každého rodiče, jde tedy o samostatnou nebo „silnou“ entitu, protože při definování své identity nespoléhá na jinou tabulku.
Děti však vyžadují rodič, aby mohl existovat (Parent_SSN
musí odkaz na existující SSN
v Parents
stůl).
Všimněte si složeného primárního klíče (Parent_SSN, Name
) v Children
stůl. To znamená, že děti jsou jedinečně identifikovány podle kombinace z Parent_SSN
a Name
. Nemůžete se dotazovat na jednotlivé potomky pouze na základě Name
protože více rodičů může mít děti se stejným jménem. Podobně se nemůžete dotazovat na jednotlivé potomky pouze na základě Parent_SSN
protože jeden rodič může mít mnoho dětí. Když to vezmeme v úvahu, děti částečně identifikuje jejich rodič, tedy identifikace vztah.
Ale nemohou být děti také jednoznačně identifikovány podle SSN? Proč ano, jistě. Pokračujme a upravme náš model tak, aby zahrnoval toto:
Všimněte si, že v této verzi modelu jsme zavedli SSN
pole pro Children
. Unikátní identita dětí je nyní definováno jejich vlastním vnitřním a jedinečným SSN
. Jejich identita již nezávisí na stránce Parents
stůl. Ačkoli Parent_SSN
pole stále odkazuje na SSN
z Parents
tabulka, nemá žádnou část v jedinečné identitě dítěte, tedy rodiče mají neidentifikační vztah ke svým dětem a obě tabulky lze nyní považovat za „silné“ samostatné entity.
Kromě toho má tato verze modelu oproti první několik výhod:
- Jeden rodič může mít nyní dvě nebo více dětí se stejným jménem, zatímco integrita entity omezení v předchozím modelu by to neumožňovalo.
- Můžete povolit
Parent_SSN
pole obsahujícíNULL
zaúčtovat případ, že máte údaje o dítěti, ale nevíte, kdo je jeho rodič.
V obou výše uvedených modelech Parents
tabulka je považována za nadřazenou tabulku Children
stůl. Nicméně v neidentifikaci vztahy jako ve druhém modelu, Parents
je pouze nadřazená tabulka v kontextu cizího klíče Parent_SSN
protože Parent_SSN
odkazy/závisí na SSN
v Parents
tabulka, ale není mají jakýkoli podíl na definování skutečné identity dětí.
Chcete-li ilustrovat, proč je kontext důležitý při rozhodování, které tabulky jsou nadřazené/podřízené tabulky, zvažte následující příklad zahrnující kruhovou závislost:
V tomto příkladu jsou zaměstnanci a oddělení jednoznačně identifikováni svými vlastními atributy a neodvozují žádnou část své identity z jiných tabulek.
Zde máme dva neidentifikující vztahy:zaměstnanec pracuje pro oddělení (DeptNo
v Employee
tabulka) a oddělení je řízeno zaměstnancem (ManagerSSN
v Department
stůl). Která je nadřazená tabulka? ...dětský stolek?
Záleží na kontextu – o jakém vztahu cizího klíče mluvíte? Tabulka oddělení by byla považována za nadřazenou tabulku v kontextu DeptNo
v Employee
tabulka, protože DeptNo
je odkazující/závislý na Department
stůl.
Tabulka Zaměstnanci by však byla považována za nadřazenou tabulku v kontextu ManagerSSN
v Department
tabulka, protože ManagerSSN
je odkazující/závislý na Employee
tabulka.