3.1 Databasnormalisering

Normalform är en egenskap hos en relation i en relationsdatamodell som kännetecknar den i termer av redundans, vilket potentiellt leder till logiskt felaktiga resultat av sampling eller ändring av data. Normalform definieras som den uppsättning krav som en relation (tabeller i en databas) måste uppfylla.

Processen att konvertera databasrelationer till en form som överensstämmer med normala former kallas normalisering. Normalisering är avsedd att föra databasens struktur till en form som ger minimal logisk redundans och är inte avsedd att minska eller öka prestanda, eller minska eller öka den fysiska volymen av databasen .

Det slutliga målet med normalisering är att minska den potentiella inkonsekvensen av informationen som lagras i databasen. Det allmänna syftet med normaliseringsprocessen är följande:

  • uteslutning av vissa typer av redundans;
  • fixa några uppdateringsavvikelser;
  • utveckling av ett databasprojekt som är en tillräckligt "högkvalitativ" representation av den verkliga världen, är intuitiv och kan fungera som en bra grund för efterföljande expansion;
  • förenkla förfarandet för att tillämpa nödvändiga integritetsbegränsningar.

Redundans elimineras vanligtvis genom att sönderfalla relationer på ett sådant sätt att endast primära fakta lagras i varje relation (det vill säga fakta som inte härrör från andra lagrade fakta).

Även om normaliseringsidéer är mycket användbara för databasdesign, är de inte på något sätt ett universellt eller uttömmande sätt att förbättra kvaliteten på en databasdesign. Detta beror på att det finns för stor variation av möjliga fel och brister i databasstrukturen som inte kan elimineras genom normalisering.

Trots dessa överväganden är teorin om normalisering en mycket värdefull prestation av relationell teori och praktik, eftersom den ger vetenskapligt rigorösa och rimliga kriterier för kvaliteten på ett databasprojekt och formella metoder för att förbättra denna kvalitet. Detta gör att normaliseringsteorin sticker ut från de rent empiriska designmetoder som erbjuds i andra datamodeller. Dessutom kan det hävdas att det inom hela informationsteknologiområdet praktiskt taget inte finns några metoder för att utvärdera och förbättra designlösningar som är jämförbara med teorin om normalisering av relationsdatabaser när det gäller nivån av formell rigor.

Normalisering kritiseras ibland med motiveringen att "det är bara sunt förnuft" och alla kompetenta professionella kommer "naturligtvis" att designa en helt normaliserad databas utan att behöva tillämpa beroendeteori.

Men, som professor Christopher Date noterade, är normalisering just principerna för sunt förnuft som vägleder en mogen designer i hans sinne, det vill säga normaliseringsprinciperna är formaliserat sunt förnuft . Samtidigt är det en mycket svår uppgift att identifiera och formalisera principerna för sunt förnuft, och framgång med att lösa det är en betydande prestation.

3.2 Första normalformen

Första normalformen (1NF) är den grundläggande normalformen av en relation i den relationella datamodellen.

En relationsvariabel är i den första normala formen om och endast om, i något giltigt värde av den variabeln, varje relationstupel innehåller exakt ett värde för vart och ett av attributen.

I en relationsmodell är en relation alltid i första normalform, per definition av relationsbegreppet.

När det gäller de olika tabellerna kanske de inte är korrekta representationer av relationer och följaktligen inte i 1NF. Enligt Christopher Dates definition för ett sådant fall är en tabell normaliserad (likväl i första normalform) om och bara om den är en direkt och sann representation av någon relation. Mer specifikt måste tabellen i fråga uppfylla följande fem villkor:

  • Det finns ingen ordning av rader uppifrån och ned (med andra ord, ordningen på rader förmedlar ingen information).
  • Det finns ingen ordning från vänster till höger av kolumnerna (med andra ord, kolumnernas ordning innehåller ingen information).
  • Inga dubbletter av rader.
  • Varje skärning av en rad och en kolumn innehåller exakt ett värde från motsvarande domän (och inget annat).
  • Alla kolumner är "vanliga".

"Regulariteten" för alla kolumner i en tabell innebär att det inte finns några "dolda" komponenter i tabellen som bara kan nås i anropet av någon speciell operator istället för att referera till vanliga kolumnnamn, eller som leder till bieffekter för rader eller tabeller när standardoperatorer anropas.

Den ursprungliga icke-normaliserade (det vill säga inte en korrekt representation av någon relation) tabellen:

Anställd Telefonnummer
Ivanov I.I.

283-56-82

390-57-34

Petrov P.P. 708-62-34
Sidorov S.S.

En tabell reducerad till 1NF, vilket är den korrekta representationen av någon relation:

Anställd Telefonnummer
Ivanov I.I. 283-56-82
Ivanov I.I. 390-57-34
Petrov P.P. 708-62-34

3.3 Andra normalformen

En relationsvariabel är i andra normalform om och endast om den är i första normalform och varje icke-nyckelattribut är irreducerbart beroende av (varje) dess kandidatnyckel .

Oreducerbarhet innebär att den potentiella nyckeln inte innehåller en mindre delmängd av attribut från vilka även detta funktionella beroende kan härledas. För ett irreducerbart funktionellt beroende används ofta det motsvarande begreppet "full funktionellt beroende".

Om kandidatnyckeln är enkel, det vill säga den består av ett enda attribut, är varje funktionellt beroende av den irreducerbart (komplett). Om kandidatnyckeln är en sammansatt nyckel, så får det enligt definitionen av den andra normalformen inte finnas några icke-nyckelattribut i relationen som beror på en del av den sammansatta kandidatnyckeln.

Ett exempel på att konvertera en relation till andra normalform

Låt attributparet {Company branch, Position} bilda primärnyckeln i följande relation:

R
Företagsfilial Jobbtitel Lön Tillgänglighet för en dator
Filial i Tomsk Rengöringsmedel 20 000 Nej
Filial i Moskva Programmerare 40 000 Äta
Filial i Tomsk Programmerare 25 000 Äta

Låt oss säga att lönen beror på gren och befattning, och tillgången på en dator beror bara på befattningen.

Det finns ett funktionellt beroende Position -> Att ha en dator, där vänster sida (determinant) bara är en del av primärnyckeln, vilket bryter mot villkoret för den andra normala formen.

För att reducera till 2NF bör den ursprungliga relationen delas upp i två relationer:

R1
Företagsfilial Jobbtitel Lön
Filial i Tomsk Rengöringsmedel 20 000
Filial i Moskva Programmerare 40 000
Filial i Tomsk Programmerare 25 000
R2
Jobbtitel Tillgänglighet för en dator
Rengöringsmedel Nej
Programmerare Äta
Programmerare Äta

3.4 Tredje normalformen (3NF)

En relationsvariabel R är i 3NF om och endast om följande villkor är sanna:

  • Rär i andra normalform.
  • inget icke-nyckelattributRär inte i transitivt funktionellt beroende av kandidatnyckelnR.

Förklaringar till definitionen:

Ett icke-nyckelattribut för en relation R är ett attribut som inte tillhör någon av kandidatnycklarna till R.

Det funktionella beroendet av uppsättningen attribut Z på uppsättningen av attribut X (skrivet X → Z, uttalas "x bestämmer z") är transitivt om det finns en sådan uppsättning attribut Y att X → Y och Y → Z. I detta fallet är ingen av mängderna X, Y och Z inte en delmängd av den andra, det vill säga de funktionella beroendena X → Z, X → Y och Y → Z är inte triviala, och det finns inte heller något funktionellt beroende Y → X.

En definition av 3NF, likvärdig med Codds men formulerad annorlunda, gavs av Carlo Zaniolo 1982. Enligt den finns en relationsvariabel i 3NF om och endast om vart och ett av dess funktionella beroenden X → A uppfyller minst ett av följande villkor:

  • X innehåller A (det vill säga X → A är ett trivialt funktionellt beroende)
  • X - supernyckel
  • A är ett nyckelattribut (det vill säga A är en del av en kandidatnyckel).

Zaniolos definition definierar tydligt skillnaden mellan 3NF och den mer stringenta Boyce-Codd Normal Form (BCNF): BCNF utesluter det tredje villkoret ("A är ett nyckelattribut").

En minnesvärd och traditionellt beskrivande sammanfattning av Codds 3NF-definition gavs av Bill Kent: varje icke-nyckelattribut "ska ge information om nyckeln, den fullständiga nyckeln och inget annat än nyckeln " .

Villkoret att vara beroende av "full nyckel" för icke-nyckelattribut säkerställer att relationen är i andra normalform; och villkoret för att de ska vara beroende av "ingenting annat än nyckeln" är att de är i tredje normalform.

Chris Date talar om Kents sammanfattning som en "intuitivt attraktiv egenskap" av 3NF, och observerar att den, med en liten modifiering, också kan fungera som en definition av den striktare Boyce-Codd normalformen: "varje attribut måste ge information om en nyckel , en hel nyckel, och inget annat än nyckeln.

Kents version av 3NF-definitionen är mindre strikt än Boyce-Codds normala version av Datas formulering, eftersom den förstnämnda endast anger att icke-nyckelattribut är beroende av nycklar.

Primära attribut (som är nycklar eller delar av dem) behöver inte alls vara funktionellt beroende; var och en av dem ger information om nyckeln genom att tillhandahålla själva nyckeln eller en del av den. Det bör noteras här att denna regel endast är giltig för icke-nyckelattribut, eftersom applicering av den på alla attribut helt kommer att inaktivera alla komplexa alternativa nycklar, eftersom varje element i en sådan nyckel bryter mot villkoret "full nyckel".

Betrakta relationsvariabeln R1 som ett exempel:

R1
Anställd Avdelning Telefon
Grishin Bokföring 11-22-33
Vasiliev Bokföring 11-22-33
Petrov Tillförsel 44-55-66

Varje anställd tillhör uteslutande en avdelning; varje avdelning har en enda telefon. Attributet Employee är den primära nyckeln. Anställda har inga personliga telefoner och den anställdes telefonnummer beror enbart på avdelningen.

I exemplet finns följande funktionella beroenden: Anställd → Avdelning, Avdelning → Telefon, Anställd → Telefon.

Relationsvariabeln R1 är i andra normalform eftersom varje attribut har ett irreducerbart funktionellt beroende av den potentiella nyckelanställda.

Relationen Anställd → Telefon är transitiv, så relationen är inte i tredje normalform.

Att dela R1 resulterar i två relationsvariabler som finns i 3NF:

R2
Avdelning Telefon
Bokföring 11-22-33
Tillförsel 44-55-66

R3
Anställd Avdelning
Grishin Bokföring
Vasiliev Bokföring
Petrov Tillförsel

Den initiala relationen R1, om nödvändigt, erhålls lätt som ett resultat av operationen att förena relationerna R2 och R3.