Jednostka nie jest słaba, ponieważ nie może istnieć niezależnie, ale dlatego, że nie można jej zidentyfikować niezależnie. Dlatego relacja, która „prowadzi” do słabego bytu, nazywana jest relacją „identyfikującą”. W praktyce oznacza to, że klucz podstawowy rodzica jest migrowany do (zwykle właściwy ) podzbiór PK dziecka (termin „słaba jednostka” jest zwykle definiowany w odniesieniu do kluczy podstawowych, chociaż teoretycznie może odnosić się do dowolnego klucza).
Jest całkowicie uzasadnione posiadanie jednostki, która nie może istnieć niezależnie, ale może być niezależnie zidentyfikowana - innymi słowy, to jest w nieidentyfikującej relacji z nie-NULL.
Musisz zapytać:czy historyLineID
być wyjątkowym samodzielnie lub w połączeniu z orderID
? Podejrzewam, że ma to miejsce w tym drugim przypadku, co czyni go słabym podmiotem.
To, co nam pokazałeś, nie jest słabą jednostką - PK rodzica nie jest przenoszone do PK dziecka.
Masz zasadniczo dwie opcje:
-
orderHistory
ma złożony PK:{orderID, historyLineID}
, gdzieorderID
to FK. BTW, ten PK można uznać za „naturalny”: -
orderHistory
ma zastępczy PK:{orderHistoryID}
, natomiastorderID
jest poza PK. Nadal musisz mieć alternatywny klucz{orderID, historyLineID}
chociaż:
Tak, to pierwsza opcja opisana powyżej. Chyba że masz relacje podrzędne w orderHistory
samo w sobie jest to również najlepsze rozwiązanie. Jeśli orderHistory
ma dzieci, to może, ale nie musi, być najlepszym rozwiązaniem, w zależności od kilku czynników.
To nie jest albo-albo. Pole może być zarówno FK, jak i częścią klucza (podstawowego lub alternatywnego), jak pokazano powyżej.
Nie będziesz w stanie dotrzeć do 3NF, chyba że poprawnie określisz swoje klucze i nie będziesz w stanie tego zrobić bez rozważenia, która jednostka może być zidentyfikowana niezależnie, a która nie.