En enhed er ikke svag, fordi den ikke kan eksistere uafhængigt, men fordi den ikke kan identificeres selvstændigt. Derfor kaldes et forhold, der "fører" til en svag enhed, "identificerende" forhold. I praksis betyder det, at forælderens primære nøgle migreres til (normalt korrekt ) delmængde af barnets PK (udtrykket "svag enhed" er normalt defineret i relation til primære nøgler, selvom det i teorien kunne gælde for enhver nøgle).
Det er helt legitimt at have en enhed, der ikke kan eksistere uafhængigt, men kan identificeres uafhængigt - med andre ord, det er i et ikke-identificerende forhold til en ikke-NULL.
Du skal spørge:kan historyLineID være unik alene , eller i kombination med orderID ? Jeg formoder, at det sidste er tilfældet, hvilket ville gøre det til en svag enhed.
Det, du har vist os, er ikke en svag enhed - forældrenes PK er ikke migreret til barnets PK.
Du har grundlæggende to muligheder:
-
orderHistoryhar en sammensat PK:{orderID, historyLineID}, hvororderIDer FK. BTW, denne PK kunne betragtes som "naturlig":
-
orderHistoryhar en surrogat-PK:{orderHistoryID}, mensorderIDer uden for PK. Du skal stadig have en alternativ nøgle{orderID, historyLineID}dog:
Ja, dette er den første mulighed beskrevet ovenfor. Medmindre du har underordnede forhold på orderHistory i sig selv er dette også den bedste løsning. Hvis orderHistory har børn, så er dette måske eller måske ikke den bedste løsning, afhængigt af flere faktorer.
Dette er ikke enten-eller. Et felt kan være både FK og en del af en (primær eller alternativ) nøgle, som vist ovenfor.
Du vil ikke være i stand til at nå 3NF, medmindre du angiver dine nøgler korrekt, og du vil ikke være i stand til at gøre det uden at overveje, hvilken enhed der kan identificeres uafhængigt, og hvilken der ikke kan.