Derde normaalvorm - Third normal form
Derde normaalvorm ( 3NF ) is een database schema ontwerp aanpak voor relationele databases die gebruik maakt van het normaliseren principes om de verdubbeling van data, te vermijden verminderen gegevens anomalieën , zorgen voor referentiële integriteit en gegevensbeheer te vereenvoudigen. Het werd in 1971 gedefinieerd door Edgar F. Codd , een Engelse computerwetenschapper die het relationele model voor databasebeheer uitvond .
Van een databaserelatie (bijvoorbeeld een databasetabel ) wordt gezegd dat deze voldoet aan de normen van de derde normaalvorm als alle attributen (bijvoorbeeld databasekolommen ) functioneel afhankelijk zijn van alleen de primaire sleutel . Codd definieerde dit als een relatie in tweede normaalvorm waarbij alle niet-prime attributen alleen afhankelijk zijn van de kandidaatsleutels en geen transitieve afhankelijkheid hebben van een andere sleutel.
Een hypothetisch voorbeeld van het niet voldoen aan de derde normaalvorm zou een ziekenhuisdatabase zijn met een tabel van patiënten met een kolom voor het telefoonnummer van hun arts. Het telefoonnummer is afhankelijk van de arts, en niet van de patiënt, en kan dus beter worden opgeslagen in een tabel met artsen. Het negatieve resultaat van een dergelijk ontwerp is dat het nummer van een arts in de database wordt gedupliceerd als ze meerdere patiënten hebben, waardoor zowel de kans op invoerfouten als de kosten en het risico van het bijwerken van dat nummer als het verandert (vergeleken met een derde normale vormconform datamodel dat een doktersnummer maar één keer opslaat op een dokterstafel).
Codd realiseerde zich later dat 3NF niet alle ongewenste gegevensafwijkingen elimineerde en ontwikkelde in 1974 een sterkere versie om dit aan te pakken, bekend als de Boyce-Codd-normale vorm .
Definitie van derde normaalvorm
De derde normaalvorm (3NF) is een normaalvorm die wordt gebruikt bij databasenormalisatie . 3NF werd oorspronkelijk gedefinieerd door E.F. Codd in 1971.
De definitie van Codd stelt dat een tabel in 3NF is als en alleen als beide van de volgende voorwaarden gelden:
- De relatie R (tabel) is in tweede normaalvorm (2NF).
- Elk niet-prime attribuut van R is niet-transitief afhankelijk van elke sleutel van R.
Een niet-prime-attribuut van R is een attribuut dat niet tot een kandidaatsleutel van R behoort . Een transitieve afhankelijkheid is een functionele afhankelijkheid waarin X → Z ( X bepaalt Z ) indirect, krachtens X → Y en Y → Z (waar het niet zo is dat Y → X ).
Een 3NF-definitie die gelijk is aan die van Codd, maar anders uitgedrukt, werd in 1982 gegeven door Carlo Zaniolo. Deze definitie stelt dat een tabel in 3NF is als en slechts als voor elk van zijn functionele afhankelijkheden X → A , ten minste een van de volgende voorwaarden gelden:
- X bevat A (dat wil zeggen, A is een subset van X , wat betekent dat X → A triviale functionele afhankelijkheid is),
- X is een supersleutel ,
- elk element van A \ X , het ingestelde verschil tussen A en X, is een priemattribuut (dwz elk attribuut in A \ X is vervat in een kandidaatsleutel ).
De definitie van Zaniolo geeft een duidelijk beeld van het verschil tussen 3NF en de strengere Boyce-Codd-normaalvorm (BCNF). BCNF elimineert eenvoudig het derde alternatief ("Elk element van A \ X , het ingestelde verschil tussen A en X , is een priemattribuut.").
"Niets dan de sleutel"
Een benadering van Codd's definitie van 3NF, parallel aan de traditionele belofte om echt bewijs te leveren in een rechtbank, werd gegeven door Bill Kent: "[elke] niet-sleutel [attribuut] moet een feit bevatten over de sleutel, de hele sleutel, en niets dan de sleutel". Een veel voorkomende variatie vult deze definitie aan met de eed "so help me Codd ".
Het vereisen van het bestaan van "de sleutel" zorgt ervoor dat de tabel in 1NF staat ; vereisen dat niet-sleutelattributen afhankelijk zijn van "de hele sleutel" zorgt voor 2NF ; verder vereisen dat niet-sleutelattributen afhankelijk zijn van "niets anders dan de sleutel" zorgt voor 3NF. Hoewel deze zin een nuttig geheugensteuntje is, betekent het feit dat het slechts een enkele sleutel vermeldt, dat het enkele noodzakelijke maar niet voldoende voorwaarden definieert om aan de 2e en 3e normaalvorm te voldoen. Zowel 2NF als 3NF houden zich in gelijke mate bezig met alle kandidaatsleutels van een tabel en niet met slechts één sleutel.
Chris Date verwijst naar Kents samenvatting als "een intuïtief aantrekkelijke karakterisering" van 3NF en merkt op dat het met een kleine aanpassing kan dienen als een definitie van de iets sterkere Boyce-Codd-normaalvorm : "Elk attribuut moet een feit vertegenwoordigen over de sleutel, het geheel sleutel, en niets dan de sleutel." De 3NF-versie van de definitie is zwakker dan de BCNF-variatie van Date, omdat de eerste zich alleen bezighoudt met het verzekeren dat niet-sleutelattributen afhankelijk zijn van sleutels. Prime-attributen (die sleutels of delen van sleutels zijn) mogen helemaal niet functioneel afhankelijk zijn; ze vertegenwoordigen elk een feit over de sleutel in de zin van het verstrekken van een deel of de hele sleutel zelf. (Deze regel is alleen van toepassing op functioneel afhankelijke attributen, aangezien het toepassen op alle attributen impliciet samengestelde kandidaatsleutels zou verbieden, aangezien elk deel van een dergelijke sleutel de "hele sleutel"-clausule zou schenden.)
Een voorbeeld van een 2NF-tabel die niet voldoet aan de vereisten van 3NF is:
| Toernooi | Jaar | Winnaar | Geboortedatum winnaar |
|---|---|---|---|
| Indiana Invitational | 1998 | Al Fredrickson | 21 juli 1975 |
| Cleveland Open | 1999 | Bob Albertson | 28 september 1968 |
| Des Moines Masters | 1999 | Al Fredrickson | 21 juli 1975 |
| Indiana Invitational | 1999 | Chip Masterson | 14 maart 1977 |
Omdat elke rij in de tabel ons moet vertellen wie een bepaald Toernooi in een bepaald Jaar heeft gewonnen, is de samengestelde sleutel {Toernooi, Jaar} een minimale set attributen die gegarandeerd een rij uniek identificeert. Dat wil zeggen, {Toernooi, Jaar} is een kandidaatsleutel voor de tafel.
De schending van 3NF vindt plaats omdat het niet-prime-attribuut (geboortedatum van de winnaar) transitief afhankelijk is van de kandidaatsleutel {Toernooi, jaar} via het niet-prime-attribuut Winnaar. Het feit dat de geboortedatum van de winnaar functioneel afhankelijk is van de winnaar, maakt de tabel kwetsbaar voor logische inconsistenties, aangezien er niets is om te voorkomen dat dezelfde persoon wordt weergegeven met verschillende geboortedata op verschillende records.
Om dezelfde feiten weer te geven zonder 3NF te schenden, is het noodzakelijk om de tabel in tweeën te splitsen:
|
|
Afwijkingen van updates kunnen in deze tabellen niet voorkomen, omdat de winnaar, in tegenstelling tot voorheen, nu een kandidaat-sleutel is in de tweede tabel, waardoor er voor elke winnaar slechts één waarde voor de geboortedatum is.
Berekening
Een relatie kan altijd worden ontleed in de derde normaalvorm, dat wil zeggen, de relatie R wordt herschreven tot projecties R 1 , ..., R n waarvan de join gelijk is aan de oorspronkelijke relatie. Verder verliest deze decompositie geen enkele functionele afhankelijkheid , in die zin dat elke functionele afhankelijkheid van R kan worden afgeleid uit de functionele afhankelijkheden die gelden voor de projecties R 1 , ..., R n . Bovendien kan zo'n decompositie in polynomiale tijd worden berekend .
Afleiding van Zaniolo-voorwaarden
De definitie van 3NF die door Carlo Zaniolo in 1982 werd gegeven en hierboven is gegeven, wordt op de volgende manier bewezen: Laat X → A een niet-triviale FD zijn (dwz een waarbij X geen A bevat) en laat A een niet-sleutelattribuut zijn. Laat Y ook een sleutel van R zijn. Dan is Y → X.
Normalisatie voorbij 3NF
De meeste 3NF-tabellen zijn vrij van afwijkingen bij het bijwerken, invoegen en verwijderen. Bepaalde typen 3NF-tabellen, die in de praktijk zelden worden aangetroffen, hebben last van dergelijke anomalieën; dit zijn tabellen die ofwel niet voldoen aan de Boyce-Codd-normale vorm (BCNF) of, als ze voldoen aan BCNF, niet voldoen aan de hogere normaalvormen 4NF of 5NF .
Overwegingen voor gebruik in rapportageomgevingen
Hoewel 3NF ideaal was voor machinale verwerking, kan het gesegmenteerde karakter van het datamodel moeilijk te consumeren zijn door een menselijke gebruiker. Analyses via query's, rapportage en dashboards werden vaak gefaciliteerd door een ander type gegevensmodel dat vooraf berekende analyses leverde, zoals trendlijnen, period-to-date berekeningen (month-to-date, quarter-to-date, year-to-date, to-date), cumulatieve berekeningen elementaire statistiek (gemiddelde, standaarddeviatie, voortschrijdende gemiddelden) en de vorige periode vergelijkingen (jaar geleden, maand, week geleden) bv dimensioneel modelleren en daarbuiten dimensioneel modelleren, vlakkere sterren via Hadoop en data science .
Zie ook
Referenties
Verder lezen
- Date, CJ (1999), An Introduction to Database Systems (8e ed.). Addison-Wesley Longman. ISBN 0-321-19784-4 .
- Kent, W. (1983) A Simple Guide to Five Normal Forms in Relational Database Theory , Communications of the ACM, vol. 26, blz. 120-126
Externe links
- Litt's tips: normalisatie
- Basisprincipes van databasenormalisatie door Mike Chapple (About.com)
- Een inleiding tot databasenormalisatie door Mike Hillyer.
- Een tutorial over de eerste 3 normaalvormen door Fred Coulson
- Beschrijving van de basisprincipes van databasenormalisatie door Microsoft
- Derde normaalvorm met eenvoudige voorbeelden door exploreDatabase