150 likes | 400 Views
B e n t M ø l l e r M a d s e n. Relationsdatabaser og SQL. Del 4 af 4: Normalisering og dataintegritet Aalborg Universitet, d. 6. september 2006. Normalisering. Optimering af et databasedesign Undgå redundans Medfører opdeling til flere tabeller
E N D
BentMøllerMadsen Relationsdatabaser og SQL Del 4 af 4: Normalisering og dataintegritet Aalborg Universitet, d. 6. september 2006
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 (1NF) • Mindstekrav til en relationel database • Krav til tabeller på 1NF: • 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
Anden normalform (2NF) • Krav til en tabel på 2NF: • Tabellen skal være på 1NF • 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
Tredje normalform (3NF) • Krav til en tabel på 3NF: • Tabellen skal være på 2NF • 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
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 VARCHAR2(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’));