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

Databázové modelování pro slabou entitu

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} , kde orderID je FK. BTW, tento PK by mohl být považován za "přirozený":

  • orderHistory má náhradní PK:{orderHistoryID} , zatímco orderID 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.



  1. Jak hledat řádky obsahující podřetězec?

  2. Jak odeslat parametry dotazu pomocí Axios?

  3. 6 způsobů, jak odstranit duplicitní řádky, které mají primární klíč v Oracle

  4. Práce s jazykem SQL (Structured Query Language) pomocí Microsoft Access 2010, 2013, 2016 a 2019