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:
-
orderHistory
har en sammensat PK:{orderID, historyLineID}
, hvororderID
er FK. BTW, denne PK kunne betragtes som "naturlig": -
orderHistory
har en surrogat-PK:{orderHistoryID}
, mensorderID
er 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.