sql >> Databáze >  >> RDS >> Mysql

Která je podřízená tabulka v Identifikačním nebo Neidentifikujícím vztahu?

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.



  1. Výběr hodnot sloupců tabulky spojení jako název sloupce výsledku

  2. výkonné řazení klíčů ve složeném indexu MySQL (WRT Rails Polymorphic Associations a STI)

  3. Jak odebrat záhlaví sloupců při odesílání výsledků dotazu e-mailem na SQL Server (T-SQL)

  4. SELECT COUNT() vs mysql_num_rows();