Citat:
Ursprungligen postat av
_x3m_
Försöker förstå normalformerna inom databasdesign. Första normalformen tycker jag säger sig själv, att man inte får ha två värden i en cell, ex två olika telefonnummer i en cell.
Men kan någon kort och enkelt förklara dem andra? När jag sökt får man upp stora utredningar men vill ha korta regler om det är möjligt.
Jag gör ett försök.
Du har köpt detta med att värdena skall vara atomära så jag skippar det nedan för att få en enklare lista
1NF. Om du vet primärnyckeln vet du resten
2NF. Endast om du vet
hela primärnyckeln vet du resten (1NF måste också vara uppfyllt)
3NF. Endast primärnyckeln kan säga något om ett annat värde (2NF måste också vara uppfyllt)
Exempel
1NF Vet du mitt bilregnummer vet du bilfärg, tillverkare osv
2NF I körjournalen för bilar är regnummer och starttidpunkt (tidsstämpel) primärnyckel. Andra attribut kan förekomma, t.ex. resmål, bränsleförbrukning, förarens personnummer, förarens namn mm. Däremot kan inte biltillverkare, modell mm finnas med eftersom dessa värden inte är beroende av starttid utan bara på regnummer.
3NF Körjournalen är i 3NF om den innehåller regnummer, starttid, sluttid, personnummer, resmål. Men den får inte innehålla t.ex. förarens namn, för om du vet personnummer så vet du namnet.
Det hela är dock lite mer komplicerat eftersom det i många fall finns mer än en möjlig primärnyckel. Säg till exempel att körjournalen innehåller en kolumn "resenummer" som är en räknare. Med de enkla reglerna ovan skulle det plötsligt vara enligt regeln att ha bilmärke och bilfärg i körjournalen och uppnå 2 NF.
Så när de enkla reglerna ovan tillämpas så bör man minnas att regeln inte skall tillämpas för "primärnyckeln" utan för varje möjlig primärnyckel. Eftersom regnummer och starttid är en möjlig primärnyckel är alltså tabellen inte i 2 NF även om resenummer valts som faktisk primärnyckel. När den korrigeringen väl är gjord så blir plötsligt mitt andra exempel ovan felaktigt. Jag återkommer till det nedan.
När det gäller 3NF så skall också den se på alla möjliga primärnyckar. De fält som
kan ingå i en primärnyckel fredas från kontroll. Det är bara förhållanden mellan övriga kolumner som skall granskas. Ironiskt nog innebär det att om körjournalen innehåller regnummer, starttid, personnummer och namn så blir namn plötsligt tillåtet enligt 3NF (vid första anblick). Det beror på att starttid och personnummer också är en möjlig primärnyckel och i 3NF granskas bara fält som inte ingår i en mljlig primärnyckel. Men vid närmare eftertanke så är tabellen inte ens i 2 NF eftersom namn är beroende av en del av den möjliga primärnyckeln personnummer + starttid.
3NF känns därför inte helt logisk och många föredrar därför i praktiken att granska att övriga fält är beroende endast av primärnyckeln.
Dvs följ Boyce-Codds lag: Every non key element is fully dependent on the key, the whole key and nothing but the key, so help me Codd.