Normalformer är i samband med relationsdatabaser ett systematiskt sätt att se till att databasstrukturen är lämplig för normala frågedatabaser så att inga oönskade anomalier vid insättning, uppdatering eller borttagning kan ske, och därmed att skydda databasens integritet. De vanligaste är 1NF, 2NF, 3NF och Boyce-Codds normalform (BCNF). Inte lika ofta implementerade är 4NF, 5NF och 6NF. Dessa anger, i ökande grad av strikthet, ett antal krav på databasens utseende. 1NF räcker för skapa en databas, men vid lägre normalform ökar risken för att anomalier när data uppdateras.
För tabeller som ingår i så kallade stjärnscheman i informationslager tillämpar man dock inte normalformerna (annat än kravet på bara ett värde per rad och attribut, vilket de flesta databasmotorer kräver).
Första normalformen (1NF)
Första normalformen innebär att varje cell endast innehåller ett värde.Connolly & Begg (2004), s 175-176 Det förutsätts dessutom att raderna är unika, annars är det ingen tabell.
Exempel på 1NF Följande tabell är i 1NF då varje cell bara innehåller ett värde. I tabellen är primärnyckeln persnr + avdnr. Då attributen namn och avdnamn bara är beroende av en del av primärnyckeln klarar tabellen inte 2NF.
+ Kund persnr namn avdnr avdnamn P1 Lina A1 Mjällby P1 Lina A2 Orsa P2 Karl A1 Mjällby P2 Karl A3 Landskrona
Exempel på normalisering
Tabellen innehåller flera värden i varje cell i kolumnen telenr och är därför inte i första normalformen.
+ Kund kundnr kundnamn telenr K001 Lina 111, 222K002Denise 333, 444 K003 Robert 555, 666
För att uppfylla 1NF kan telenr sättas i en separat tabell:
+ Kund kundnr kundnamn K001 Lina K002 Denise K003 Robert
+ KundTelefonnr kundnr telenr K001 111 K001 222 K002 333 K002 444 K003 555 K003 666
Nu är kundnr i tabellen KundTelefonnr en främmande nyckel som hänvisar till primärnyckeln i tabellen Kund.
Andra normalformen (2NF)
För att vara i andra normalformen måste tabellen vara i första normalformen. Dessutom får det inte finnas några fullständiga funktionella beroenden från delar av primärnyckeln till attribut i tabellen, och inte heller från delar av av någon annan kandidatnyckel. Ett fullständigt funktionellt beroende innebär dels att ett attribut är beroende av ett eller flera andra attribut, dels att de attribut som styr beroendet är så få som de kan vara utan att beroendet upphör. En kandidatnyckel är ett eller flera attribut som skulle vara en möjlig alternativ primärnyckel.
Exempel på 2NF
I tabellen nedan är regnr primärnyckel och den enda kandidatnyckeln. Då det bara finns ett attribut i nyckeln, kan inga attribut vara beroende av en del av nyckeln. Därför är tabellen i 2NF. Attributet bränsle är beroende av ett icke-nyckel attribut, vilket gör att tabellen inte klarar kraven för 3NF.
+ Bilar regnr motor bränsle BIL 001 D1 Diesel BIL 002 D1 Diesel BIL 003 B1 Bensin
Exempel på normalisering
Sammansatt nyckel för tabellen nedan är anstnr och certifikat. Anstnr eller anstnamn kan inte vara ensam nyckel då det kan finnas dubbletter för olika certifikat. Certifikat kan inte vara ensam nyckel då det kan finnas dubbletter när två anställda har samma certifikat. Attributet anstnamn är beroende av endast en del av den sammansatta nyckeln, nämligen anstnr, vilket gör att tabellen inte är i andra normalformen.
+ Anställda anstnr certifikat anstnamn A001 Trafikflyg Lena A001 Segelflyg Lena A002 Trafikflyg Kalle A002 Segelflyg Kalle
Problemen kan lösas genom att dela tabellen.
+ Anställda anstnr anstnamn A001 Lena A002 Kalle
+ Certifikat anstnr certifikat A001 Trafikflyg A001 Segelflyg A002 Trafikflyg A002 Segelflyg
Tredje normalformen (3NF) För att vara i tredje normalformen, 3NF, måste tabellen vara i andra normalformen. Dessutom får det inte finnas några fullständiga funktionella beroenden mellan attribut utanför primärnyckeln eller någon annan kandidatnyckel, bara från och till nyckeln och delar av den.
Exempel på normalisering I exemplet nedan är regnr primärnyckel. Bränsletypen är beroende av ett annat attribut, vilken motor som används. Tabellen är därför på andra normalformen men inte i tredje normalformen.
+ Bilar regnr motor bränsle BIL 001 D1 Diesel BIL 002 D1 Diesel BIL 003 B1 Bensin BIL 004 B1 Bensin
Problemet kan lösas genom att dela tabellen:
+ Bilar regnr motor BIL 001 D1 BIL 002 D1 BIL 003 B1 BIL 004 B1
+ Motor motor bränsle D1 Diesel B1 Bensin
Boyce-Codds normalform Boyce-Codds normalform, BCNF, är samma som 3NF, med tillägget att det inte får finnas några beroenden från attribut utanför nyckeln in i den. Det fullständiga villkoret är alltså:
För att vara på Boyce-Codds normalform, BCNF, måste tabellen vara i andra normalformen. Dessutom får det inte finnas några fullständiga funktionella beroenden från attribut utanför primärnyckeln eller någon annan kandidatnyckel, bara från hela nyckeln.
Källor Fotnoter
Litteratur
Kategori:Datavetenskap