sql >> Databasteknik >  >> RDS >> Mysql

Databasmodellering för en svag enhet

En enhet är inte svag för att den inte kan existera oberoende, utan för att den inte kan identifieras oberoende av. Därför kallas en relation som "leder" till en svag enhet "identifierande" relation. I praktiken betyder detta att förälderns primärnyckel migreras till (vanligtvis korrekt ) delmängd av barnets PK (termen "svag enhet" definieras vanligtvis i relation till primärnycklar, även om det i teorin kan gälla vilken nyckel som helst).

Det är helt legitimt att ha en enhet som inte kan existera oberoende, men som kan identifieras oberoende - med andra ord, det vill säga i ett icke-identifierande förhållande till en icke-NULL.

Du måste fråga:kan historyLineID vara unik ensam , eller i kombination med orderID ? Jag misstänker att det senare är fallet, vilket skulle göra det till en svag enhet.

Det du har visat oss är inte en svag enhet - förälders PK migreras inte till barnets PK.

Du har i huvudsak två alternativ:

  • orderHistory har en sammansatt PK:{orderID, historyLineID} , där orderID är FK. BTW, denna PK kan betraktas som "naturlig":

  • orderHistory har en surrogat-PK:{orderHistoryID} , medan orderID är utanför PK. Du skulle fortfarande behöva ha en alternativ nyckel {orderID, historyLineID} dock:

Ja, detta är det första alternativet som beskrivs ovan. Såvida du inte har underordnade relationer på orderHistory i sig är detta också den bästa lösningen. Om orderHistory har barn, men detta kan eller kanske inte är den bästa lösningen, beroende på flera faktorer.

Detta är inte antingen-eller. Ett fält kan vara både FK och en del av en (primär eller alternativ) nyckel, som visas ovan.

Du kommer inte att kunna nå 3NF om du inte anger dina nycklar korrekt, och du kommer inte att kunna göra det utan att överväga vilken enhet som kan identifieras oberoende och vilken som inte kan.



  1. Perl DBI fetchall_hashref

  2. Hur man ändrar storlek på formulärkontroller i Access 2016

  3. Grupperad LIMIT i PostgreSQL:visa de första N raderna för varje grupp?

  4. Oct2014CPU kraschar ArcGIS Desktop