Normalform (databaser)

Från Rilpedia

Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

Normalformer är i samband med relationsdatabaser ett slags tumregler för hur databasen bör designas för att få så god prestanda och vara så säker mot felaktiga data som möjligt. 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.

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).

Innehåll

Första normalformen

1NF innebär att varje attribut i en databas endast får innehålla ett värde och att varje rad (post, tupel) måste vara unik jämfört med andra rader i tabellen (oftast sker detta med hjälp av ett unikt attribut, en så kallad primärnyckel, medan resten av värdena kan vara lika för flera rader).

Ett exempel:

Försäljning
Kund Datum Vara Belopp Leverantör
Peter 2008-10-13 Symaskin, Motorsåg 2 300 Singer, Black & Decker
Peter 2008-10-15 Dammsugare 1 100 Elextrolux
Sara 2008-10-15 Symaskin, Lastbil 128 600 Singer, Saab

(Lägg märke till att vi har gjort flera förenklingar här. Vi förutsätter att varje kund bara gör ett inköp per vara och dag. Dessutom utesluter vi uppgift om hur mycket av varan söm köpts, utan förutsätter att det alltid är ett exemplar.)

Den här tabellen innehåller flera värden i attributen Vara och Leverantör. För att den ska uppfylla 1NF så borde den istället vara:

Försäljning
Kund Datum Vara Belopp Leverantör
Peter 2008-10-13 Symaskin 1 100 Singer
Peter 2008-10-13 Motorsåg 1 200 Black & Decker
Peter 2008-10-15 Dammsugare 1 100 Elextrolux
Sara 2008-10-15 Symaskin 1 100 Singer
Sara 2008-10-15 Lastbil 127 500 Saab

med Kund, Datum och Vara som primärnyckel.

Andra normalformen

För att vara i andra normalformen, 2NF, måste tabellen vara i första normalformen. Dessutom får det inte finnas några fullständiga funktionella beroenden mellan delar av primärnyckeln och attribut i tabellen. Ett fullständigt funktionellt beroende innebär dels att ett attribut är beroende av ett eller flera andra attribut, och att de attribut som styr beroendet är så få som de kan vara utan att beroendet upphör. Till exempel är Leverantör ovan beroende av Vara. Däremot behövs inte några andra delar av primärnyckeln (det vill säga Kund eller Datum) för att definiera beroendet.

På samma sätt är Belopp beroende av Vara.

För att undvika detta beroende skapar vi en ny tabell, Varor, och ändrar i tabellen Försäljning. Vanligtvis lägger man dessutom till en så kallad teknisk (numerisk) nyckel, som inte har något annat syfte än att vara unik och peka ut raden. På så sätt slipper man att ange ett långt nyckelbegrepp, och kan ange ett tal i stället:


Försäljning
Kund Datum Vara
Peter 2008-10-13 1
Peter 2008-10-13 2
Peter 2008-10-15 3
Sara 2008-10-15 1
Sara 2008-10-15 4
Varor
Varunyckel Vara Leverantör Pris
1 Symaskin Singer 1 100
2 Motorsåg Black & Decker 1 200
3 Dammsugare Elextrolux 1 100
4 Lastbil Saab 127 500

Attributet Vara i Försäljning-tabellen pekar alltså på Varunyckel i Varor-tabellen.  

Tredje normalformen

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, bara från och till primärnyckeln och delar av den. I de ovanstående tabellerna har vi inga sådana beroenden. De är alltså även i 3NF.

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 mellan attribut utanför primärnyckeln, bara från primärnyckeln (och även från delar av den).

Personliga verktyg