3.1 Database-normalisatie

Normale vorm is een eigenschap van een relatie in een relationeel gegevensmodel die deze kenmerkt in termen van redundantie, wat mogelijk kan leiden tot logisch foutieve resultaten van het bemonsteren of wijzigen van gegevens. Normaalvorm wordt gedefinieerd als de set eisen waaraan een relatie (tabellen in een database) moet voldoen.

Het proces van het converteren van databaserelaties naar een formulier dat overeenkomt met normale formulieren wordt normalisatie genoemd. Normalisatie is bedoeld om de structuur van de database naar een vorm te brengen die minimale logische redundantie biedt , en is niet bedoeld om de prestaties te verminderen of te verbeteren, of om het fysieke volume van de database te verkleinen of te vergroten .

Het uiteindelijke doel van normalisatie is het verminderen van de mogelijke inconsistentie van de informatie die in de database is opgeslagen. Het algemene doel van het normalisatieproces is als volgt:

  • uitsluiting van bepaalde vormen van redundantie;
  • repareer enkele update-afwijkingen;
  • ontwikkeling van een databaseproject dat een voldoende “hoge kwaliteit” weergave is van de reële wereld, intuïtief is en als goede basis kan dienen voor latere uitbreiding;
  • vereenvoudiging van de procedure voor het toepassen van de noodzakelijke integriteitsbeperkingen.

Redundantie wordt meestal geëlimineerd door relaties zodanig te ontbinden dat alleen primaire feiten in elke relatie worden opgeslagen (dat wil zeggen feiten die niet zijn afgeleid van andere opgeslagen feiten).

Hoewel normalisatie-ideeën zeer nuttig zijn voor databaseontwerp, zijn ze geenszins een universeel of uitputtend middel om de kwaliteit van een databaseontwerp te verbeteren. Dit is te wijten aan het feit dat er te veel verschillende mogelijke fouten en tekortkomingen in de databasestructuur zijn die niet kunnen worden verholpen door normalisatie.

Ondanks deze overwegingen is de theorie van normalisatie een zeer waardevolle prestatie van relationele theorie en praktijk, aangezien het wetenschappelijk rigoureuze en redelijke criteria biedt voor de kwaliteit van een databaseproject en formele methoden om deze kwaliteit te verbeteren. Hierdoor onderscheidt de normalisatietheorie zich van de puur empirische ontwerpbenaderingen die in andere datamodellen worden aangeboden. Bovendien kan worden betoogd dat er op het hele gebied van informatietechnologie praktisch geen methoden zijn voor het evalueren en verbeteren van ontwerpoplossingen die vergelijkbaar zijn met de theorie van normalisatie van relationele databases in termen van het niveau van formele strengheid.

Normalisatie wordt soms bekritiseerd omdat "het gewoon gezond verstand is" en dat elke bekwame professional "natuurlijk" een volledig genormaliseerde database zal ontwerpen zonder de afhankelijkheidstheorie toe te passen.

Zoals professor Christopher Date opmerkte, zijn normalisatie echter precies de principes van gezond verstand die een volwassen ontwerper in zijn geest leiden, dat wil zeggen, de principes van normalisatie zijn geformaliseerd gezond verstand . Ondertussen is het identificeren en formaliseren van de principes van gezond verstand een zeer moeilijke taak, en succes bij het oplossen ervan is een belangrijke prestatie.

3.2 Eerste normaalvorm

Eerste normaalvorm (1NF) is de basisnormaalvorm van een relatie in het relationele datamodel.

Een relatievariabele heeft de eerste normaalvorm als en slechts als, in een geldige waarde van die variabele, elk relatietupel precies één waarde bevat voor elk van de attributen.

In een relationeel model is een relatie altijd in de eerste normaalvorm, per definitie van het begrip relatie.

Wat de verschillende tabellen betreft, deze zijn mogelijk geen correcte weergave van relaties en zijn daarom mogelijk niet in 1NF. Volgens de definitie van Christopher Date voor een dergelijk geval is een tabel genormaliseerd (op equivalente wijze in de eerste normale vorm) als en slechts als het een directe en ware weergave is van een relatie. Meer specifiek moet de betreffende tafel voldoen aan de volgende vijf voorwaarden:

  • Er is geen volgorde van rijen van boven naar beneden (met andere woorden, de volgorde van rijen geeft geen informatie weer).
  • Er is geen volgorde van links naar rechts van de kolommen (met andere woorden, de volgorde van de kolommen bevat geen informatie).
  • Geen dubbele regels.
  • Elk snijpunt van een rij en een kolom bevat precies één waarde uit het overeenkomstige domein (en verder niets).
  • Alle kolommen zijn "normaal".

De "regelmaat" van alle kolommen van een tabel betekent dat er geen "verborgen" componenten in de tabel zijn die alleen toegankelijk zijn door een speciale operator aan te roepen in plaats van te verwijzen naar reguliere kolomnamen, of die leiden tot neveneffecten voor rijen of tabellen bij het aanroepen van standaardoperators.

De originele niet-genormaliseerde (dat wil zeggen, geen correcte weergave van een bepaalde relatie) tabel:

Medewerker Telefoonnummer
Ivanov II

283-56-82

390-57-34

Petrov PP 708-62-34
Sidorov SS

Een tabel teruggebracht tot 1NF, wat de juiste weergave is van een relatie:

Medewerker Telefoonnummer
Ivanov II 283-56-82
Ivanov II 390-57-34
Petrov PP 708-62-34

3.3 Tweede normaalvorm

Een relatievariabele is in de tweede normaalvorm als en slechts als hij in de eerste normaalvorm is en elk niet-sleutelattribuut onherleidbaar afhankelijk is van (elke) zijn kandidaat-sleutel .

Onherleidbaarheid betekent dat de potentiële sleutel geen kleinere subset van attributen bevat waaruit deze functionele afhankelijkheid ook kan worden afgeleid. Voor een onherleidbare functionele afhankelijkheid wordt vaak het equivalente concept van "volledig functionele afhankelijkheid" gebruikt.

Als de kandidaat-sleutel eenvoudig is, dat wil zeggen, hij bestaat uit een enkel attribuut, dan is elke functionele afhankelijkheid ervan onherleidbaar (volledig). Als de kandidaatsleutel een samengestelde sleutel is, dan mogen er volgens de definitie van de tweede normaalvorm geen niet-sleutelattributen in de relatie zijn die afhankelijk zijn van een deel van de samengestelde kandidaatsleutel.

Een voorbeeld van het omzetten van een relatie naar de tweede normaalvorm

Laat het attributenpaar {Bedrijfstak, Positie} de primaire sleutel vormen in de volgende relatie:

R
Bedrijfsfiliaal Functietitel Salaris Beschikbaarheid van een computer
Filiaal in Tomsk Schoner 20000 Nee
Filiaal in Moskou Programmeur 40000 Eten
Filiaal in Tomsk Programmeur 25000 Eten

Laten we zeggen dat het salaris afhangt van de branche en functie, en de beschikbaarheid van een computer alleen afhangt van de functie.

Er is een functionele afhankelijkheid Positie -> Het hebben van een computer, waarin de linkerkant (determinant) slechts een deel is van de primaire sleutel, die de voorwaarde van de tweede normaalvorm schendt.

Om te reduceren tot 2NF, moet de oorspronkelijke relatie worden ontleed in twee relaties:

R1
Bedrijfsfiliaal Functietitel Salaris
Filiaal in Tomsk Schoner 20000
Filiaal in Moskou Programmeur 40000
Filiaal in Tomsk Programmeur 25000
R2
Functietitel Beschikbaarheid van een computer
Schoner Nee
Programmeur Eten
Programmeur Eten

3.4 Derde normaalvorm (3NF)

Een relatievariabele R zit in 3NF als en slechts als aan de volgende voorwaarden wordt voldaan:

  • Rbevindt zich in de tweede normaalvorm.
  • geen niet-sleutelattribuutRis niet transitief functioneel afhankelijk van de kandidaat-sleutelR.

Toelichtingen bij de definitie:

Een niet-sleutelattribuut van een relatie R is een attribuut dat niet behoort tot een van de kandidaat-sleutels van R.

De functionele afhankelijkheid van de set attributen Z van de set attributen X (geschreven X → Z, uitgesproken als "x bepaalt z") is transitief als er zo'n set attributen Y is dat X → Y en Y → Z. Hierin geval is geen van de sets X, Y en Z geen subset van de andere, dwz de functionele afhankelijkheden X → Z, X → Y en Y → Z zijn niet triviaal, en er is ook geen functionele afhankelijkheid Y → X.

Een definitie van 3NF, gelijk aan die van Codd maar anders geformuleerd, werd gegeven door Carlo Zaniolo in 1982. Volgens het is een relatievariabele in 3NF als en slechts als elk van zijn functionele afhankelijkheden X → A voldoet aan ten minste een van de volgende voorwaarden:

  • X bevat A (dat wil zeggen, X → A is een triviale functionele afhankelijkheid)
  • X - supersleutel
  • A is een sleutelattribuut (dat wil zeggen, A maakt deel uit van een kandidaat-sleutel).

De definitie van Zaniolo definieert duidelijk het verschil tussen 3NF en de strengere Boyce-Codd Normal Form (BCNF): BCNF sluit de derde voorwaarde uit ("A is een sleutelattribuut").

Een gedenkwaardige en traditioneel beschrijvende samenvatting van Codd's 3NF-definitie werd gegeven door Bill Kent: elk niet-sleutelattribuut "zou informatie moeten geven over de sleutel, de volledige sleutel en niets anders dan de sleutel ".

De voorwaarde van afhankelijk zijn van de "volledige sleutel" van niet-sleutelattributen zorgt ervoor dat de relatie de tweede normale vorm heeft; en de voorwaarde voor hen om afhankelijk te zijn van "niets dan de sleutel" is dat ze in de derde normale vorm zijn.

Chris Date spreekt over de samenvatting van Kent als een "intuïtief aantrekkelijk kenmerk" van 3NF, en merkt op dat het, met een kleine aanpassing, ook kan dienen als een definitie van de striktere Boyce-Codd-normaalvorm: "elk attribuut moet informatie geven over een sleutel , een volledige sleutel en niets anders dan de sleutel.

Kent's versie van de 3NF-definitie is minder strikt dan de Boyce-Codd-versie in normale vorm van de formulering van Data, aangezien de eerste alleen stelt dat niet-sleutelattributen afhankelijk zijn van sleutels.

Primaire attributen (die sleutels zijn of delen ervan) hoeven helemaal niet functioneel afhankelijk te zijn; elk van hen geeft informatie over de sleutel door de sleutel zelf of een deel ervan te verstrekken. Hierbij moet worden opgemerkt dat deze regel alleen geldig is voor niet-sleutelattributen, aangezien het toepassen ervan op alle attributen alle complexe alternatieve sleutels volledig zal uitschakelen, aangezien elk element van een dergelijke sleutel de "volledige sleutel"-voorwaarde schendt.

Beschouw als voorbeeld de relatievariabele R1:

R1
Medewerker Afdeling Telefoon
Grishin Boekhouding 22-11-33
Vasiliev Boekhouding 22-11-33
Petrov Levering 44-55-66

Elke medewerker behoort exclusief tot één afdeling; elke afdeling heeft één telefoon. Het kenmerk Employee is de primaire sleutel. Medewerkers hebben geen persoonlijke telefoons en het telefoonnummer van de medewerker is uitsluitend afhankelijk van de afdeling.

In het voorbeeld zijn de volgende functionele afhankelijkheden aanwezig: Medewerker → Afdeling, Afdeling → Telefoon, Medewerker → Telefoon.

De relatievariabele R1 heeft de tweede normaalvorm omdat elk attribuut een onherleidbare functionele afhankelijkheid heeft van de potentiële sleutel Medewerker.

De relatie Werknemer → Telefoon is transitief, dus de relatie is niet in de derde normaalvorm.

Het splitsen van R1 resulteert in twee relatievariabelen die in 3NF staan:

R2
Afdeling Telefoon
Boekhouding 22-11-33
Levering 44-55-66

R3
Medewerker Afdeling
Grishin Boekhouding
Vasiliev Boekhouding
Petrov Levering

De initiële relatie R1 wordt, indien nodig, gemakkelijk verkregen door de bewerking van het verbinden van de relaties R2 en R3.