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:
-
orderHistoryma złożony PK:{orderID, historyLineID}, gdzieorderIDto FK. BTW, ten PK można uznać za „naturalny”:
-
orderHistoryma zastępczy PK:{orderHistoryID}, natomiastorderIDjest 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.