2021-01-28, 17:56
  #1
Medlem
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.
Citera
2021-01-29, 07:00
  #2
Moderator
Protons avatar
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.
Har du kollatr nån av https://www.flashback.org/sok/?query...&search_post=1 till exempel tråden (FB) Normalisering, hjälp sökes

Hjälper det?
Citera
2021-01-29, 10:10
  #3
Medlem
ReimerDenYngres avatar
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.
__________________
Senast redigerad av ReimerDenYngre 2021-01-29 kl. 10:16.
Citera
2021-04-11, 15:35
  #4
Medlem
Är du ny på databaser så tycker inte jag du skall grotta ner dig i olika tekniska detaljer. Jag tvivlar på vana databasanvändare kan rabbla vad som gäller för olika normalformer.

Viktigast att lära sig i början är att värden bara skall lagras på ett ställe.

Exempel: Om du har företag i databasen, företaget byter namn eller ändrar telefonnummer. Måste du ändra på flera ställen så har du designat databasen fel. Det skall räcka med att ändra på ett enda ställe, allt skall följa med om databasen är designad bra.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in