Relationsdatabaser og SQL Del 4 af 4 Normalisering
Relationsdatabaser og SQL Del 4 af 4: Normalisering og dataintegritet Aalborg Universitet, d. 6. september 2006 Bent Møller Madsen
Normalisering Optimering af et databasedesign Undgå redundans Medfører opdeling til flere tabeller Disse skal kunne samles (joines) igen uden datatab 6 normalformer 1. , 2. , 3. , Boyce-Codd, 4. og 5. normalform Mest almindelige er 1. til 3. normalform + evt. Boyce Codd normalformen (BCNF)
Første Normalform (1 NF) Mindstekrav til en relationel database Krav til tabeller på 1 NF: For hver række gælder det, at kun én værdi må indtastes i hver kolonne. Der må ikke forekomme repeterende grupper Der skal eksistere en primærnøgle
1. normalform - et eksempel Vare_id Navn Kategori Pris_1 Pris_2 Pris_3 210 Sofabord Stue, Glas 699, 50 749, 50 779, 00 212 Stol Stue, Klassisk 499, 00 529, 50 Vare_id Navn 210 Sofabord 212 Stol Kategori_id Navn 11 Stue 12 Glas 13 Klassisk Vare_id Kategori_id 210 11 210 12 212 11 212 13 Vare_id Pris 210 699, 50 210 749, 50 210 779, 00 212 499, 00 212 529, 50
Anden normalform (2 NF) Krav til en tabel på 2 NF: Tabellen skal være på 1 NF Alle ikke-nøgle attributter skal være fuldt funktionelt afhængige af primærnøglen • Dvs. at ikke-nøgle attributter ikke må være afhængige af en delmængde af primærnøglen. Kun relevant, hvis primærnøglen består af 2 eller flere kolonner
2. normalform - et eksempel Ordre_id Linie_id Kunde_id Ordre_dato Vare_id Antal 101 1 1013 13 -08 -2005 423 40 101 2 1013 13 -08 -2005 251 10 101 3 1013 13 -08 -2005 122 5 Ordre_id Kunde_id Ordre_dato 1013 13 -08 -2005 Ordre_id Linie_id Vare_id Antal 101 1 423 40 101 2 251 10 101 3 122 5
Tredje normalform (3 NF) Krav til en tabel på 3 NF: Tabellen skal være på 2 NF Ingen ikke-nøgle attributter er transitivt afhængige af primærnøglen • Dvs. at attributterne kun må være afhængig af primærnøglen og ikke andre, heller ikke en kombination af andre attributter Transitiv afhængighed A B og B C A C
3. normalform - et eksempel Medarbejdere Id Navn Adresse Postnr Bynavn 101 Hans Jensen Sildevej 45 9000 Aalborg 102 Inga Petersen Østre Alle 30 9000 Aalborg 103 Peter Andersen Æblestien 4 8000 Århus C Medarbejdere Id Navn Adresse Postnr 101 Hans Jensen Sildevej 45 9000 102 Inga Petersen Østre Alle 30 9000 103 Peter Andersen Æblestien 4 8000 Postnumre Postnr Bynavn 9000 Aalborg 8000 Århus C
Boyce-Codd normalform (BCNF) Krav til en tabel på BCNF: Alle determinanter skal være kandidatnøgler • En determinant er en eller flere attributter, der bestemmer (determinerer) andre attributters værdi • En kandidatnøgle er en potentiel primærnøgle Eller på dansk: En tabel er på BCNF, når alle felter eller sammensatte felter, der kan bruges som nøgle for en del af tabellen, også kan bruges som primærnøgle for hele tabellen. BCNF er et alternativ til 1. -3. normalform + at den opfanger et specialtilfælde der ikke dækkes af 1. -3. normalform
Normalisering - opsamling Normaliser til 3. normalform eller BCNF Brug sund fornuft Overvejelser i forbindelse med undtagelser for normalisering og denormalisering Konsekvenser for performance Konsekvenser for integritet
Integritet Fjerne fejl i databasen Sikre at der er sammenhæng i databasen, og at denne opretholdes og fungerer Sikre at data bliver indtastet det rigtige sted Sikre overensstemmelse mellem virkeligheden og informationer i databasen
Typer af integritet Entitetsintegritet: Alle rækker i en tabel skal være identificerbare Referentiel integritet Integriteten mellem tabeller Semantisk integritet: Betydning af data
Sikring af integritet Entitetsintegritet: Primærnøgle Referentiel integritet: Fremmednøgler Semantisk integritet: Datatyper Not Null Unikke nøgler Check betingelser
Sikring af integritet - eksempel CREATE TABLE medarbejdere (id NUMBER(4) PRIMARY KEY , navn VARCHAR 2(50) NOT NULL, loen NUMBER(7, 2) NOT NULL, koen CHAR(1), afd_id NUMBER(3), CONSTRAINT med_afd_fk FOREIGN KEY (afd_id) REFERENCES afdelinger (id) ON DELETE CASCADE, CONSTRAINT min_loen CHECK (loen >= 15000), CONSTRAINT koen_cc CHECK (koen IN (’m’, ’k’));
- Slides: 15