Databasnormalisering
Databasnormalisering eller databasnormalisering (se stavningsskillnader ) är processen att strukturera en relationsdatabas i enlighet med en serie så kallade normala former för att minska dataredundans och förbättra dataintegriteten . Det föreslogs först av den brittiske datavetaren Edgar F. Codd som en del av hans relationsmodell .
Normalisering innebär att organisera kolumner (attribut) och tabeller (relationer) i en databas för att säkerställa att deras beroenden upprätthålls korrekt av databasintegritetsbegränsningar. Det åstadkoms genom att tillämpa några formella regler antingen genom en syntesprocess ( skapa en ny databasdesign) eller nedbrytning (förbättra en befintlig databasdesign).
Mål
Ett grundläggande syfte med den första normala formen som definierades av Codd 1970 var att tillåta att data efterfrågas och manipuleras med ett "universellt dataunderspråk" grundat i första ordningens logik . Ett exempel på ett sådant språk är SQL , även om det är ett som Codd betraktade som allvarligt felaktigt.
Målen för normalisering bortom 1NF (första normala formen) angavs av Codd som:
- För att befria insamlingen av relationer från oönskade insättnings-, uppdaterings- och raderingsberoenden.
- För att minska behovet av omstrukturering av insamlingen av relationer, när nya typer av data introduceras, och därmed öka livslängden för applikationsprogram.
- Att göra relationsmodellen mer informativ för användarna.
- Att göra insamlingen av relationer neutral till frågestatistiken, där denna statistik kan komma att förändras med tiden.
— EF Codd, "Ytterligare normalisering av databasens relationsmodell"
När ett försök görs att modifiera (uppdatera, infoga i eller ta bort från) en relation kan följande oönskade biverkningar uppstå i relationer som inte har normaliserats tillräckligt:
- Insättningsavvikelse. Det finns omständigheter under vilka vissa fakta inte alls kan registreras. Till exempel kan varje post i en "Fakultet och deras kurser"-relation innehålla ett fakultets-ID, fakultetsnamn, fakultetsanställningsdatum och kurskod. Därför kan uppgifterna om en fakultetsmedlem som undervisar i minst en kurs registreras, men en nyanställd fakultetsmedlem som ännu inte har fått i uppdrag att undervisa i några kurser kan inte registreras, förutom genom att sätta kurskoden på null .
- Uppdatera anomali. Samma information kan uttryckas på flera rader; Därför kan uppdateringar av relationen leda till logiska inkonsekvenser. Till exempel kan varje post i en "Anställdas färdigheter"-relation innehålla ett anställd-ID, anställds adress och kompetens; Således kan en adressändring för en viss anställd behöva tillämpas på flera poster (en för varje färdighet). Om uppdateringen endast delvis lyckas – den anställdes adress uppdateras på vissa poster men inte i andra – lämnas relationen i ett inkonsekvent tillstånd. Specifikt ger relationen motstridiga svar på frågan om vad just denna anställdes adress är.
- Borttagningsavvikelse. Under vissa omständigheter kräver radering av uppgifter som representerar vissa fakta radering av uppgifter som representerar helt andra fakta. Relationen "Fakulteten och deras kurser" som beskrivs i det föregående exemplet lider av denna typ av anomali, för om en fakultetsmedlem tillfälligt upphör att tilldelas några kurser, måste den sista av de poster som den fakultetsmedlemmen förekommer på raderas, i praktiken tar också bort fakultetsmedlemmen, såvida inte fältet Kurskod är satt till null.
Minimera omdesign när du utökar databasstrukturen
En helt normaliserad databas gör att dess struktur kan utökas för att rymma nya typer av data utan att ändra befintlig struktur för mycket. Som ett resultat påverkas applikationer som interagerar med databasen minimalt.
Normaliserade relationer, och förhållandet mellan en normaliserad relation och en annan, speglar verkliga begrepp och deras inbördes relationer.
Normala former
Codd introducerade begreppet normalisering och vad som nu är känt som den första normala formen (1NF) 1970. Codd fortsatte med att definiera den andra normala formen (2NF) och tredje normalformen (3NF) 1971, och Codd och Raymond F. Boyce definierade Boyce-Codd normalformen (BCNF) 1974.
Informellt beskrivs en relationsdatabasrelation ofta som "normaliserad" om den uppfyller tredje normalformen. De flesta 3NF-relationer är fria från insättnings-, uppdaterings- och raderingsavvikelser.
De normala formerna (från minst normaliserade till mest normaliserade) är:
- UNF: Onormaliserad form
- 1NF: Första normalformen
- 2NF: Andra normalformen
- 3NF: Tredje normalformen
- EKNF: Elementär nyckel normalform
- BCNF: Boyce-Codd normalform
- 4NF: Fjärde normalformen
- ETNF: Essential tupel normal form
- 5NF: Femte normalformen
- DKNF: Domännyckel normal form
- 6NF: Sjätte normalformen
Begränsning (informell beskrivning inom parentes) |
UNF (1970) |
1NF (1970) |
2NF (1971) |
3NF (1971) |
EKNF (1982) |
BCNF (1974) |
4NF (1977) |
ETNF (2012) |
5NF (1979) |
DKNF (1981) |
6NF (2003) |
---|---|---|---|---|---|---|---|---|---|---|---|
Unika rader (inga dubbletter av poster) | |||||||||||
Skalära kolumner (kolumner kan inte innehålla relationer eller sammansatta värden) | |||||||||||
Varje icke-primärt attribut har ett fullt funktionellt beroende av en kandidatnyckel (attribut beror på den fullständiga primärnyckeln) | |||||||||||
Varje icke-trivialt funktionellt beroende börjar antingen med en supernyckel eller slutar med ett primärt attribut (attribut beror bara på primärnyckeln) | |||||||||||
Varje icke-trivialt funktionellt beroende börjar antingen med en supernyckel eller slutar med ett elementärt primattribut (en strängare form av 3NF) | — | ||||||||||
Varje icke-trivialt funktionellt beroende börjar med en supernyckel (en strängare form av 3NF) | — | ||||||||||
Varje icke-trivialt flervärdigt beroende börjar med en supernyckel | — | ||||||||||
Varje anslutningsberoende har en supernyckelkomponent | — | ||||||||||
Varje anslutningsberoende har bara supernyckelkomponenter | — | ||||||||||
Varje begränsning är en konsekvens av domänbegränsningar och nyckelbegränsningar | |||||||||||
Varje kopplingsberoende är trivialt |
Exempel på en steg för steg normalisering
Normalisering är en databasdesignteknik, som används för att designa en relationsdatabastabell upp till högre normalform. Processen är progressiv och en högre nivå av databasnormalisering kan inte uppnås om inte de tidigare nivåerna har uppfyllts.
Det betyder att, med data i onormaliserad form (den minst normaliserade) och som syftar till att uppnå den högsta nivån av normalisering, skulle det första steget vara att säkerställa överensstämmelse med den första normala formen , det andra steget skulle vara att säkerställa att den andra normala formen är uppfylld, och så vidare i den ordning som nämns ovan, tills data överensstämmer med sjätte normalformen .
Det är dock värt att notera att normala former utöver 4NF främst är av akademiskt intresse, eftersom de problem de finns för att lösa sällan dyker upp i praktiken.
Data i följande exempel var avsiktligt utformade för att motsäga de flesta normala formerna. I det verkliga livet är det fullt möjligt att kunna hoppa över några av normaliseringsstegen eftersom tabellen inte innehåller något som motsäger den givna normalformen. Det är också vanligt att fixa ett brott av en normalform också fixar ett brott av en högre normalform i processen. En tabell har också valts för normalisering vid varje steg, vilket innebär att i slutet av denna exempelprocess kan det fortfarande finnas några tabeller som inte uppfyller den högsta normalformen.
Inledande data
Låt en databastabell existera med följande struktur:
Titel | Författare | Författarens nationalitet | Formatera | Pris | Ämne | Sidor | Tjocklek | Utgivare | Utgivarland | Publikationstyp | Genre ID | Genrens namn | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Börjar design och optimering av MySQL-databas | Chad Russell | amerikansk | Hårt omslag | 49,99 |
|
520 | Tjock | Apress | USA | E-bok | 1 | Handledning |
För detta exempel antas det att varje bok endast har en författare.
Som en förutsättning för att överensstämma med relationsmodellen måste en tabell ha en primärnyckel , som unikt identifierar en rad. Två böcker kan ha samma titel, men ett ISBN identifierar en bok unikt, så det kan användas som primärnyckel:
ISBN | Titel | Författare | Författarens nationalitet | Formatera | Pris | Ämne | Sidor | Tjocklek | Utgivare | Utgivarland | Publikationstyp | Genre ID | Genrens namn | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1590593324 | Börjar design och optimering av MySQL-databas | Chad Russell | amerikansk | Hårt omslag | 49,99 |
|
520 | Tjock | Apress | USA | E-bok | 1 | Handledning |
Tillfredsställande 1NF
För att uppfylla First normal form måste varje kolumn i en tabell ha ett enda värde. Kolumner som innehåller uppsättningar värden eller kapslade poster är inte tillåtna.
I den inledande tabellen innehåller Ämne en uppsättning ämnesvärden, vilket betyder att den inte överensstämmer.
För att lösa problemet extraheras ämnena i en separat Ämnestabell :
ISBN | Titel | Formatera | Författare | Författarens nationalitet | Pris | Sidor | Tjocklek | Utgivare | Utgivarland | Genre ID | Genrens namn |
---|---|---|---|---|---|---|---|---|---|---|---|
1590593324 | Börjar design och optimering av MySQL-databas | Hårt omslag | Chad Russell | amerikansk | 49,99 | 520 | Tjock | Apress | USA | 1 | Handledning |
ISBN | Ämnesnamn |
---|---|
1590593324 | MySQL |
1590593324 | Databas |
1590593324 | Design |
En främmande nyckelkolumn läggs till i Subject -tabellen, som hänvisar till primärnyckeln på raden från vilken ämnet extraherades. Samma information representeras därför men utan användning av icke-enkla domäner.
Istället för en tabell i onormaliserad form finns det nu två tabeller som överensstämmer med 1NF.
Tillfredsställande 2NF
Om en tabell har en primärnyckel med en kolumn, uppfyller den automatiskt 2NF, men om en tabell har en flerkolumn eller sammansatt nyckel kanske den inte uppfyller 2NF. Boktabellen nedan har en sammansatt nyckel av {Title, Format} (anges av understrykningen), så den kanske inte uppfyller 2NF . Vid denna tidpunkt i vår design är nyckeln inte slutgiltig som primärnyckel , så den kallas en kandidatnyckel . Tänk på följande tabell:
Titel | Formatera | Författare | Författarens nationalitet | Pris | Sidor | Tjocklek | Genre ID | Genrens namn | Utgivar-ID |
---|---|---|---|---|---|---|---|---|---|
Börjar design och optimering av MySQL-databas | Hårt omslag | Chad Russell | amerikansk | 49,99 | 520 | Tjock | 1 | Handledning | 1 |
Börjar design och optimering av MySQL-databas | E-bok | Chad Russell | amerikansk | 22.34 | 520 | Tjock | 1 | Handledning | 1 |
Relationsmodellen för databashantering: Version 2 | E-bok | EFCodd | brittisk | 13,88 | 538 | Tjock | 2 | Populär vetenskap | 2 |
Relationsmodellen för databashantering: Version 2 | Pocketbok | EFCodd | brittisk | 39,99 | 538 | Tjock | 2 | Populär vetenskap | 2 |
Alla attribut som inte är en del av kandidatnyckeln beror på Titel , men endast Pris beror också på Format . För att överensstämma med 2NF och ta bort dubbletter måste varje icke-kandidat-nyckel-attribut bero på hela kandidatnyckeln, inte bara en del av den.
För att normalisera denna tabell, gör {Title} till en (enkel) kandidatnyckel (primärnyckeln) så att alla icke-kandidatnyckelattribut beror på hela kandidatnyckeln, och ta bort Price till en separat tabell så att dess beroende av Format kan bevaras:
|
|
|||||||||||||||||||||||||||||||||||||||
|
Nu överensstämmer boktabellen med 2NF .
Tillfredsställande 3NF
Boktabellen har fortfarande ett transitivt funktionellt beroende ({Author Nationality} är beroende av {Author}, vilket är beroende av {Title}) . En liknande överträdelse finns för genren ({Genre Name} är beroende av {Genre ID}, som är beroende av {Title}). Därför boktabellen i 3NF. För att göra det i 3NF, låt oss använda följande tabellstruktur, och därmed eliminera de transitiva funktionella beroenden genom att placera {Author Nationality} och {Genre Name} i sina respektive tabeller:
Titel | Författare | Sidor | Tjocklek | Genre ID | Utgivar-ID |
---|---|---|---|---|---|
Börjar design och optimering av MySQL-databas | Chad Russell | 520 | Tjock | 1 | 1 |
Relationsmodellen för databashantering: Version 2 | EFCodd | 538 | Tjock | 2 | 2 |
|
Författare | Författarens nationalitet |
---|---|
Chad Russell | amerikansk |
EFCodd | brittisk |
Genre ID | Genrens namn |
---|---|
1 | Handledning |
2 | Populär vetenskap |
Tillfredsställande EKNF
Den elementära nyckelnormalformen (EKNF) faller strikt mellan 3NF och BCNF och diskuteras inte mycket i litteraturen. Det är avsett att "fånga de framträdande egenskaperna hos både 3NF och BCNF" samtidigt som man undviker problemen med båda (nämligen att 3NF är "för förlåtande" och BCNF är "benägen till beräkningskomplexitet"). Eftersom det sällan nämns i litteraturen ingår det inte i detta exempel.
Tillfredsställande 4NF
Anta att databasen ägs av en bokhandelsfranchise som har flera franchisetagare som äger butiker på olika platser. Och därför bestämde sig återförsäljaren för att lägga till en tabell som innehåller information om tillgängligheten för böckerna på olika platser:
Franchisetagarens ID | Titel | Plats |
---|---|---|
1 | Börjar design och optimering av MySQL-databas | Kalifornien |
1 | Börjar design och optimering av MySQL-databas | Florida |
1 | Börjar design och optimering av MySQL-databas | Texas |
1 | Relationsmodellen för databashantering: Version 2 | Kalifornien |
1 | Relationsmodellen för databashantering: Version 2 | Florida |
1 | Relationsmodellen för databashantering: Version 2 | Texas |
2 | Börjar design och optimering av MySQL-databas | Kalifornien |
2 | Börjar design och optimering av MySQL-databas | Florida |
2 | Börjar design och optimering av MySQL-databas | Texas |
2 | Relationsmodellen för databashantering: Version 2 | Kalifornien |
2 | Relationsmodellen för databashantering: Version 2 | Florida |
2 | Relationsmodellen för databashantering: Version 2 | Texas |
3 | Börjar design och optimering av MySQL-databas | Texas |
Eftersom den här tabellstrukturen består av en sammansatt primärnyckel innehåller den inga icke-nyckelattribut och den finns redan i BCNF (och uppfyller därför även alla tidigare normala former ). Men förutsatt att alla tillgängliga böcker erbjuds i varje område, titeln inte entydigt bunden till en viss plats och därför uppfyller tabellen inte 4NF .
Det betyder att, för att tillfredsställa den fjärde normalformen , måste denna tabell också delas upp:
|
|
Nu identifieras varje post otvetydigt av en supernyckel , därför är 4NF uppfylld.
Tillfredsställande ETNF
Anta att franchisetagarna också kan beställa böcker från olika leverantörer. Låt relationen också vara föremål för följande begränsning:
- Om en viss leverantör tillhandahåller en viss titel
- och titeln levereras till franchisetagaren
- och franchisetagaren levereras av leverantören,
- sedan tillhandahåller leverantören titeln till franchisetagaren .
Leverantörs-ID | Titel | Franchisetagarens ID |
---|---|---|
1 | Börjar design och optimering av MySQL-databas | 1 |
2 | Relationsmodellen för databashantering: Version 2 | 2 |
3 | Att lära sig SQL | 3 |
Den här tabellen är i 4NF , men leverantörs-ID är lika med sammanfogningen av dess projektioner: {{Leverantörs-ID, Titel}, {Titel, Franchisetagare-ID}, {Franchisetagare-ID, Leverantörs-ID}}. Ingen komponent i det anslutningsberoendet är en supernyckel (den enda supernyckeln är hela rubriken), så tabellen uppfyller inte ETNF och kan dekomponeras ytterligare:
|
|
|
Nedbrytningen ger ETNF-efterlevnad.
Tillfredsställande 5NF
För att upptäcka en tabell som inte uppfyller 5NF är det vanligtvis nödvändigt att undersöka uppgifterna noggrant. Antag att tabellen från 4NF-exemplet med en liten modifiering av data och låt oss undersöka om den uppfyller 5NF :
Franchisetagarens ID | Titel | Plats |
---|---|---|
1 | Börjar design och optimering av MySQL-databas | Kalifornien |
1 | Att lära sig SQL | Kalifornien |
1 | Relationsmodellen för databashantering: Version 2 | Texas |
2 | Relationsmodellen för databashantering: Version 2 | Kalifornien |
Att sönderdela denna tabell minskar redundanserna, vilket resulterar i följande två tabeller:
|
|
Frågan som förenar dessa tabeller skulle returnera följande data:
Franchisetagarens ID | Titel | Plats |
---|---|---|
1 | Börjar design och optimering av MySQL-databas | Kalifornien |
1 | Att lära sig SQL | Kalifornien |
1 | Relationsmodellen för databashantering: Version 2 | Kalifornien |
1 | Relationsmodellen för databashantering: Version 2 | Texas |
1 | Att lära sig SQL | Texas |
1 | Börjar design och optimering av MySQL-databas | Texas |
2 | Relationsmodellen för databashantering: Version 2 | Kalifornien |
JOIN returnerar tre fler rader än den borde; lägga till ytterligare en tabell för att förtydliga relationen resulterar i tre separata tabeller:
|
|
|
Vad kommer JOIN att returnera nu? Det är faktiskt inte möjligt att sammanfoga dessa tre bord. Det betyder att det inte var möjligt att dekomponera Franchisetagaren - Boka - Plats utan dataförlust, därför uppfyller tabellen redan 5NF .
CJ Date har hävdat att endast en databas i 5NF verkligen är "normaliserad".
Tillfredsställande DKNF
Låt oss ta en titt på boktabellen från tidigare exempel och se om den uppfyller domännyckelns normala form :
Titel | Sidor | Tjocklek | Genre ID | Utgivar-ID |
---|---|---|---|---|
Börjar design och optimering av MySQL-databas | 520 | Tjock | 1 | 1 |
Relationsmodellen för databashantering: Version 2 | 538 | Tjock | 2 | 2 |
Att lära sig SQL | 338 | Smal | 1 | 3 |
SQL kokbok | 636 | Tjock | 1 | 3 |
Logiskt sett bestäms tjockleken av antalet sidor. Det betyder att det beror på sidor som inte är en nyckel. Låt oss ge ett exempel som säger att en bok på upp till 350 sidor anses vara "tunn" och en bok över 350 sidor anses vara "tjock".
Denna konvention är tekniskt sett en restriktion men den är varken en domänrestriktion eller en nyckelrestriktion; Därför kan vi inte lita på domänbegränsningar och nyckelbegränsningar för att behålla dataintegriteten.
Med andra ord – ingenting hindrar oss från att sätta till exempel "Tjock" för en bok på bara 50 sidor – och det gör att tabellen strider mot DKNF .
skapas en tabell med en uppräkning som definierar tjockleken, och den kolumnen tas bort från den ursprungliga tabellen:
|
|
På så sätt har domänintegritetsintrånget eliminerats och tabellen är i DKNF .
Tillfredsställande 6NF
En enkel och intuitiv definition av den sjätte normalformen är att "en tabell är i 6NF när raden innehåller den primära nyckeln och högst ett annat attribut" .
Det betyder, till exempel, Publisher -tabellen som designades när 1NF skapades
Utgivar-ID | namn | Land |
---|---|---|
1 | Apress | USA |
måste delas upp ytterligare i två tabeller:
|
|
Den uppenbara nackdelen med 6NF är spridningen av tabeller som krävs för att representera informationen om en enda enhet. Om en tabell i 5NF har en primär nyckelkolumn och N attribut, kommer att representera samma information i 6NF att kräva N tabeller; flerfältsuppdateringar till en enda konceptuell post kommer att kräva uppdateringar av flera tabeller; och infogning och borttagning kommer på liknande sätt att kräva operationer över flera tabeller. bör 6NF inte användas i databaser som är avsedda att tjäna onlinetransaktionsbehandlingsbehov .
Men i datalager , som inte tillåter interaktiva uppdateringar och som är specialiserade för snabba frågor om stora datavolymer, använder vissa DBMS en intern 6NF-representation – känd som ett kolumnärt datalager . I situationer där antalet unika värden i en kolumn är mycket mindre än antalet rader i tabellen tillåter kolumnorienterad lagring avsevärda besparingar i utrymme genom datakomprimering. Kolumnlagring tillåter också snabb exekvering av intervallfrågor (visa t.ex. alla poster där en viss kolumn är mellan X och Y, eller mindre än X.)
I alla dessa fall behöver dock inte databasdesignern utföra 6NF-normalisering manuellt genom att skapa separata tabeller. Vissa DBMS som är specialiserade för lagerhållning, som Sybase IQ , använder kolumnlagring som standard, men designern ser fortfarande bara en enda flerkolumntabell. Andra DBMS, som Microsoft SQL Server 2012 och senare, låter dig ange ett "kolumnlagerindex" för en viss tabell.
Se även
Anteckningar och referenser
Vidare läsning
- Date, CJ (1999), An Introduction to Database Systems (8:e upplagan). 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, s. 120–125
- H.-J. Schek, P. Pistors datastrukturer för ett integrerat databashanterings- och informationshämtningssystem
externa länkar
- Kent, William (februari 1983). "En enkel guide till fem normala former i relationsdatabasteori" . Kommunikation från ACM . 26 (2): 120–125. doi : 10.1145/358024.358054 . S2CID 9195704 .
- Databas Normalization Basics av Mike Chapple (About.com)
- Databasnormalisering Intro Arkiverad 28 september 2011, på Wayback Machine , del 2 Arkiverad 8 juli 2011, på Wayback Machine
- En introduktion till databasnormalisering av Mike Hillyer.
- En handledning om de första 3 normala formerna av Fred Coulson
- Beskrivning av grunderna för databasnormalisering av Microsoft
- Normalisering i DBMS av Chaitanya (beginnersbook.com)
- En steg-för-steg-guide för databasnormalisering
- ETNF – Essential tuple normal form Arkiverad 6 mars 2016, på Wayback Machine