Entita není slabá proto, že nemůže existovat samostatně, ale proto, že ji nelze identifikovat nezávisle. Proto se vztah, který „vede“ ke slabé entitě, nazývá „identifikační“ vztah. V praxi to znamená, že primární klíč rodiče je migrován do (obvykle správného ) podmnožina PK dítěte (pojem „slabá entita“ je obvykle definován ve vztahu k primárním klíčům, i když by se teoreticky mohl vztahovat na jakýkoli klíč).
Je naprosto legitimní mít entitu, která nemůže existovat nezávisle, ale může být identifikována nezávisle – jinými slovy, která je v neidentifikujícím vztahu k non-NULL.
Musíte se zeptat:can historyLineID
být jedinečný sám nebo v kombinaci s orderID
? Mám podezření, že je tomu tak v druhém případě, což by z něj udělalo slabou entitu.
To, co jste nám ukázali, není slabá entita – rodičovská PK není migrována do PK dítěte.
Máte v podstatě dvě možnosti:
-
orderHistory
má složený PK:{orderID, historyLineID}
, kdeorderID
je FK. BTW, tento PK by mohl být považován za "přirozený": -
orderHistory
má náhradní PK:{orderHistoryID}
, zatímcoorderID
je mimo PK. Stále budete potřebovat alternativní klíč{orderID, historyLineID}
ačkoli:
Ano, toto je první možnost popsaná výše. Pokud nemáte podřízené vztahy v orderHistory
sám o sobě je to také nejlepší řešení. Pokud orderHistory
má děti, pak to může nebo nemusí být nejlepší řešení, v závislosti na několika faktorech.
To není buď-nebo. Pole může být FK i součástí (primárního nebo alternativního) klíče, jak je uvedeno výše.
Nebudete moci dosáhnout 3NF, pokud správně neurčíte své klíče, a nebudete to moci udělat, aniž byste zvážili, kterou entitu lze identifikovat nezávisle a kterou ne.