sql >> Database teknologi >  >> RDS >> Mysql

Databasemodellering for en svag enhed

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} , hvor orderID er FK. BTW, denne PK kunne betragtes som "naturlig":

  • orderHistory har en surrogat-PK:{orderHistoryID} , mens orderID 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.



  1. MySQL ændre tabel og konvertere data fra tekst til datetime

  2. Har PL/SQL-udgange i realtid

  3. Håndtering af SQL-databaser med PyQt:Det grundlæggende

  4. Fuzzy matching ved hjælp af T-SQL