Database normalisering (Norsk)

Normalisering er en teknikk for databasedesign, som brukes til å designe en relasjonell databasetabell opp til høyere normalform. Prosessen er progressiv, og et høyere nivå av databasenormalisering kan ikke oppnås med mindre tidligere nivåer er oppfylt.

Det betyr at det å ha data i unormalisert form (den minst normaliserte) og sikte på å oppnå det høyeste normaliseringsnivå, ville det første trinnet være å sikre samsvar med den første normale formen, det andre trinnet ville være å sikre at den andre normale formen ble oppfylt, og så videre i den rekkefølgen som er nevnt ovenfor, til dataene samsvarer med sjette normale form. >

Det er imidlertid verdt å merke seg at normale former utover 4NF hovedsakelig er av akademisk interesse, ettersom problemene de eksisterer for å løse sjelden vises i praksis.

Vær oppmerksom på at dataene i følgende eksempel var med vilje designet for å motsi de fleste normale former. I det virkelige liv er det fullt mulig å kunne hoppe over noen av normaliseringstrinnene, fordi tabellen ikke inneholder noe som motsier den gitte normale formen. Det forekommer ofte at å fikse brudd på en normal form også løser brudd på en høyere normal form i prosessen. Det er også valgt en tabell for normalisering på hvert trinn, noe som betyr at det på slutten av denne eksempelprosessen fortsatt kan være noen tabeller som ikke tilfredsstiller den høyeste normale formen.

Initial dataEdit

La en databasetabell med følgende struktur:

Tittel Forfatter Forfatter Nasjonalitet Format Pris Emne Sider Tykkelse Utgiver Utgiverland Publikasjonstype Genre ID Genre Name
Start MySQL Database Design and Optimization Chad Russell American Innbundet 49,99 MySQL,

Database,

Design

520 Tykk Apress USA E-bok 1 Veiledning

Vi antar i dette eksemplet at hver bok bare har en forfatter.

Tilfredsstillende 1NFEdit

For å tilfredsstille 1NF må verdiene i hver kolonne i en tabell være atomare. I den første tabellen inneholder Emne et sett med emneverdier, noe som betyr at det ikke samsvarer.

En måte å oppnå 1NF på ville være å skille duplikatene i flere kolonner ved hjelp av gjentatte grupper Emne:

Tittel Format Forfatter Forfatter Nasjonalitet Pris Emne 1 Emne 2 Emne 3 Sider Tykkelse Utgiver Utgiverland Genre ID Genre Name
Begynner MySQL-databasedesign og optimalisering Innbundet Chad Russell Amerikansk 49,99 MySQL Database Design 520 Tykk Apress USA 1 Veiledning

Selv om tabellen nå formelt samsvarer med 1NF (er atom), er problemet med denne løsningen åpenbar – hvis en bok har mer enn tre emner, den kan ikke legges til databasen uten å endre strukturen.

For å løse problemet på en mer elegant måte er det nødvendig å identifisere enheter representert i tabellen og skille dem inn i sine respektive respektive tabeller. I dette tilfellet vil det resultere i bok-, emne- og forlagstabeller:

Book
Tittel Format Forfatter Forfatter Nasjonalitet Pris Sider Tykkelse Genre ID Genre Name Publisher ID
Begynner MySQL Database Design and Optimization Hardcover Chad Russell American 49.99 520 Tykk 1 Veiledning 1
Emne
Emne-ID Fagnavn
1 MySQL
2 Database
3 Design
Publisher
Publisher_ID Navn Land
1 Apress USA

Bare å skille de opprinnelige dataene i flere tabeller vil bryte forbindelsen mellom dataene. Det betyr at forholdet mellom de nylig introduserte tabellene må bestemmes. Legg merke til at kolonnen Publisher ID i bokens tabell er en fremmed nøkkel som realiserer mange-til-en-forhold mellom en bok og en forlegger.

En bok kan passe mange emner, så vel som et emne kan tilsvarer mange bøker. Det betyr også at mange-til-mange-forhold må defineres, oppnås ved å opprette en lenketabell:

Tittel – Emne
Tittel Emne-ID
Begynner MySQL-databasedesign og optimalisering 1
Begynnelse av MySQL-databasedesign og optimalisering 2
Begynnelse av MySQL-databasedesign og optimalisering 3

I stedet for en tabell i unormalisert form, er det nå 4 tabeller som samsvarer med 1NF.

Tilfredsstille 2NFEdit

Boktabellen har en kandidatnøkkel (som derfor er den primære nøkkelen), den sammensatte nøkkelen {Tittel, Format}. Tenk på følgende tabellfragment:

Book
Tittel Format Forfatter Forfatter Nasjonalitet Pris Sider Tykkelse Genre ID Genre Name Publisher ID
Start MySQL Database Design and Optimization Innbundet Chad Russell Amerikansk 49,99 520 Tykt 1 Opplæring 1
Begynner MySQL-databasedesign og optimalisering E-bok Chad Russell Amerikansk 22.34 520 Tykk 1 Opplæring 1
Relasjonsmodellen for databaseadministrasjon: Versjon 2 E-bok EFCodd Britisk 13,88 538 Tykt 2 Populærvitenskap 2
Relasjonsmodellen for databasen Ma administrasjon: Versjon 2 Paperback EFCodd Britisk 39.99 538 Tykk 2 Populærvitenskap 2

Alle attributtene som ikke er en del av kandidatnøkkelen, avhenger av Tittel, men bare Pris avhenger også av Format. For å overholde 2NF og fjerne duplikater, må alle ikke-kandidatnøkkelattributter avhenge av hele kandidatnøkkelen, ikke bare en del av den.

For å normalisere denne tabellen, gjør du {Title} til en (enkel) kandidatnøkkel (den primære nøkkelen) slik at alle ikke-kandidat-nøkkelegenskaper avhenger av hele kandidatnøkkelen, og fjern Price i en egen tabell slik at dens avhengighet av Format kan bevares:

Book
Tittel Forfatter Forfatter Nasjonalitet Sider Tykkelse Genre ID Genre Name Publisher ID
Start MySQL Database Design and Optimization Chad Russell Amerikansk 520 Tykt 1 Veiledning 1
Relasjonsmodellen for databasestyring: Versjon 2 EFCodd Britisk 538 Tykk 2 Populærvitenskap 2
Format – Pris
Tittel Format Pris
Begynner MySQL-databasedesign og optimalisering Innbundet 49.99
MySQL-databasedesign og optimalisering begynner E-bok 22.34
Relasjonsmodellen for databaseadministrasjon: Versjon 2 E-bok 13.88
Relasjonsmodellen for databasestyring: Versjon 2 Paperback 39.99

Nå, Boktabellen er i samsvar med 2NF.

Tilfredsstillende 3NFEdit

Boktabellen har fremdeles en transitiv funksjonell avhengighet ({Author Nationality} er avhengig av {Author}, som er avhengig av {Title }). Et lignende brudd eksisterer for sjanger ({Genre Name} er avhengig av {Genre ID}, som er avhengig av {Title}). Derfor er ikke Book-tabellen i 3NF. For å gjøre det i 3NF, la oss bruke følgende tabellstruktur, og dermed eliminere de transitive funksjonelle avhengighetene ved å plassere {Author Nationality} og {Genre Name} i sine egne respektive tabeller:

Bok

Tittel Forfatter Sider Tykkelse Genre ID Publisher ID
Begynner MySQL-databasedesign og Optimalisering Chad Russell 520 Tykk 1 1
Relasjonsmodellen for databasestyring: Versjon 2 EFCodd 538 Tykk 2 2
Format – pris
Tittel Format Pris
Begynner MySQL-databasedesign og Optimalisering Innbundet 49,99
Begynner MySQL-databasedesign og optimalisering E-bok 22.34
Relasjonsmodellen for databasestyring: Versjon 2 E-bok 13.88
Relasjonsmodellen for databasestyring: Versjon 2 Paperback 39.99
Forfatter
Forfatter Forfatter Nasjonalitet
Chad Russell Amerikansk
EFCodd Britisk
Sjanger
Gen. re ID Genre Name
1 Tutorial
2 Populærvitenskap

Tilfredsstillende EKNFEdit

Hovedartikkel: Elementær nøkkel normal form

Elementær nøkkel normalform (EKNF) faller strengt mellom 3NF og BCNF og er ikke mye diskutert i litteraturen. Det er ment «å fange opp de fremtredende egenskapene til både 3NF og BCNF» og samtidig unngå problemene til begge deler (nemlig at 3NF er «for tilgivende» og BCNF er «utsatt for beregningskompleksitet»). det er ikke inkludert i dette eksemplet.

Tilfredsstillende 4NFEdit

Anta at databasen eies av en franchise for bokforhandlere som har flere franchisetakere som eier butikker forskjellige steder.Og derfor bestemte forhandleren seg for å legge til en tabell som inneholder data om tilgjengeligheten av bøkene på forskjellige steder:

Franchisetaker – Book Location
Franchisetaker-ID Tittel Plassering
1 Begynnelse av MySQL-databasedesign og optimalisering California
1 Begynnelse av MySQL-databasedesign og optimalisering Florida
1 Begynner MySQL-databasedesign og optimalisering Texas
1 Relasjonsmodellen for databaseadministrasjon: Versjon 2 California
1 Relasjonsmodellen for databaseadministrasjon: versjon 2 Florida
1 Relasjonsmodellen for databasestyring: versjon 2 Texas
2 Begynner MySQL-databasedesign og optimalisering California
2 MySQL-databasedesign og optimalisering begynner Florida
2 Begynner MySQL-databasedesign og optimalisering Texas
2 Relasjonsmodellen for databaseadministrasjon: Versjon 2 California
2 Relasjonsmodellen for databaseadministrasjon: Versjon 2 Florida
2 Relasjonsmodellen for databaseadministrasjon: Versjon 2 Texas
3 Begynner MySQL databasedesign og optimalisering Texas

Ettersom denne tabellstrukturen består av en sammensatt primærnøkkel, inneholder den ikke noen ikke-nøkkelattributter, og den er allerede i BCNF (og tilfredsstiller derfor også alle tidligere normale former). Imidlertid, hvis vi antar at alle tilgjengelige bøker tilbys i hvert område, vil vi kanskje legge merke til at tittelen ikke er entydig bundet til en bestemt plassering, og derfor tilfredsstiller tabellen ikke 4NF.

Det betyr at, for å tilfredsstille den fjerde normale formen, må denne tabellen også dekomponeres:

Franchisetaker – Bok
Franchisetaker-ID Tittel
1 Begynner MySQL-databasedesign og optimalisering
1 Relasjonsmodellen for databaseadministrasjon: Versjon 2
2 Begynner MySQL-databasedesign og optimalisering
2 Relasjonsmodellen for databaseadministrasjon: Versjon 2
3 Begynner MySQL-databasedesign og optimalisering
Franchisetaker – Sted
Franchisetaker-ID Plassering
1 California
1 Florida
1 Texas
2 California
2 Florida
2 Texas
3 Texas

Nå blir hver post entydig identifisert av en supernøkkel, derfor er 4NF tilfreds.

Tilfredsstillende ETNFEdit

Anta at franchisetakerne også kan bestille bøker fra forskjellige leverandører. La forholdet også være underlagt følgende begrensning:

  • Hvis en bestemt leverandør leverer en viss tittel
  • og tittelen blir levert til franchisetaker
  • og franchisetaker blir levert av leverandøren,
  • så leverer leverandøren tittelen til franchisetaker.
Leverandør – bok – franchisetaker
Leverandør-ID Tittel Franchisetaker-ID
1 Begynner MySQL-databasedesign og optimalisering 1
2 Relasjonsmodellen for databasestyring: Versjon 2 2
3 Læring SQL 3

Denne tabellen er i 4NF, men leverandør-ID er lik sammenføyningen av fremskrivningene: {{leverandør-ID, bok}, {bok, franchisetaker-ID}, {franchisetaker-ID, leverandør ID}}.Ingen komponent i den tilknytningsavhengigheten er en supernøkkel (den eneste supernøkkelen er hele overskriften), så tabellen tilfredsstiller ikke ETNF og kan videre dekomponeres:

Leverandør – bok
Leverandør-ID Tittel
1 Begynner MySQL-databasedesign og optimalisering
2 Relasjonsmodellen for databaseadministrasjon: Versjon 2
3 Learning SQL
Bok – franchisetaker
Tittel Franchisetaker-ID
Begynner MySQL-databasedesign og optimalisering 1
Relasjonsmodellen for databasestyring: Versjon 2 2
Læring SQL 3
Franchisetaker – leverandør
Leverandør-ID Franchisetaker-ID
1 1
2 2
3 3

Nedbrytningen gir ETNF-samsvar.

Tilfredsstillende 5NFEdit

For å få øye på et bord som ikke tilfredsstiller 5NF, er det er vanligvis nødvendig for å undersøke dataene grundig. Anta at tabellen fra 4NF-eksemplet med en liten modifikasjon i data og la oss undersøke om den tilfredsstiller 5NF:

Franchisetaker – Book Location
Franchisetaker-ID Tittel Plassering
1 Begynner MySQL-databasedesign og optimalisering California
1 Læring SQL California
1 Relasjonsmodellen for databaseadministrasjon: Versjon 2 Texas
2 Relasjonsmodellen for databaseadministrasjon: Versjon 2 California

Hvis vi nedbryter denne tabellen, reduserer vi permitteringer og får følgende to tabeller:

Franchisetaker – Bok
Franchisetaker-ID Tittel
1 MySQL-databasedesign og optimalisering begynner
1 Læring SQL
1 Relasjonsmodellen for databaseadministrasjon: versjon 2
2 Relasjonsmodellen for databaseadministrasjon: versjon 2
Franchisetaker – Sted
Franchisetaker-ID Plassering
1 California
1 Texas
2 California

Hva skjer hvis vi prøver å bli med i disse tabellene? Spørringen vil returnere følgende data:

Franchisetaker – Bok – Sted JOINed
Franchisetaker-ID Tittel Plassering
1 Begynner MySQL-databasedesign og Optimalisering California
1 Læring SQL California
1 Relasjonsmodellen for databaseadministrasjon: Versjon 2 California
1 Relasjonsmodellen for databaseadministrasjon: Versjon 2 Texas
1 Learning SQL Texas
1 Begynner MySQL-databasedesign og optimalisering Texas
2 Relasjonsmodellen for databasestyring: Versjon 2 California

JOIN returnerer tilsynelatende tre rader til enn det burde – la oss prøve å legge til ano tabellen for å avklare forholdet.Vi ender med tre separate tabeller:

Franchisetaker – Bok
Franchisetaker-ID Tittel
1 Begynnelse av MySQL-databasedesign og optimalisering
1 Learning SQL
1 Relasjonsmodellen for databaseadministrasjon: versjon 2
2 Relasjonsmodellen for databaseadministrasjon: versjon 2
Franchisetaker – Sted
Franchisetaker-ID Plassering
1 California
1 Texas
2 California
Plassering – Boo k
Sted Tittel
California Begynner MySQL-databasedesign og optimalisering
California Learning SQL
California Relasjonsmodellen for databaseadministrasjon: versjon 2
Texas Relasjonsmodellen for databasestyring: versjon 2

Hva vil JOIN returnere nå? Det er faktisk ikke mulig å bli med i disse tre tabellene. Det betyr at det ikke var mulig å spalte franchisetaker – bokplassering uten tap av data, derfor oppfyller tabellen allerede 5NF.

CJ Date har hevdet at bare en database i 5NF virkelig er «normalisert».

Tilfredsstillende DKNFEdit

La oss se på boktabellen fra tidligere eksempler og se om den tilfredsstiller domenenøkkelens normale form:

Logisk sett bestemmes tykkelsen av antall sider. Det betyr at det avhenger av sider som ikke er en nøkkel. La oss sette et eksempel på en konvensjon som sier at en bok på opptil 350 sider betraktes som «slank» og en bok på over 350 sider betraktes som «tykk». begrensning eller nøkkelbegrensning; derfor kan vi ikke stole på domenebegrensninger og nøkkelbegrensninger for å opprettholde dataintegriteten.

Med andre ord – ingenting hindrer oss i å sette for eksempel «Tykk» for en bok med 50 sider – og dette gjør at tabellen bryter med DKNF.

For å løse dette kan vi opprette en tabell med opptelling som definerer tykkelsen og fjerne den kolonnen fra den opprinnelige tabellen:

Bok
Tittel Sider Tykkelse Genre ID Publisher ID
Start MySQL Database Design and Optimization 520 Tykt 1 1
Relasjonsmodellen for databaseadministrasjon: Versjon 2 538 Tykt 2 2
Læring SQL 338 Slim 1 3
SQL Cookbook 636 Tykt 1 3
Tykkelse Enum
Tykkelse Min sider Maks sider
Slank 1 350
Tykk 351 999.999.999.999
Bok – Sider – Sjanger – Utgiver
Tittel Sider Sjanger-ID Publisher ID
Begynner MySQL-databasedesign og optimalisering 520 1 1
Relasjonsmodellen for Database Management: Versjon 2 538 2 2
Learning SQL 338 1 3
SQL Cookbook 636 1 3

På den måten er brudd på domeneintegriteten eliminert, og tabellen er i DKNF.

Tilfredsstillende 6NFEdit

En enkel og intuitiv definisjon av den sjette normale formen er at «en tabell er i 6NF når raden inneholder primærnøkkelen, og maksimalt ett annet attributt».

Det betyr for eksempel Publisher-tabellen designet mens du opprettet 1NF

Publisher
Publisher_ID Name Country
1 Apress USA

må være lenger dekomponert i to tabeller:

Publisher
Publisher_ID Name
1 Apress
Utgiverland
Publisher_ID Country
1 USA

Den åpenbare ulempen med 6NF er spredning av tabeller som kreves for å representere informasjonen om en enkelt enhet. Hvis en tabell i 5NF har en primær nøkkelkolonne og N-attributter, vil det å representere den samme informasjonen i 6NF kreve N-tabeller; flerfeltoppdateringer til en enkelt konseptuell post vil kreve oppdateringer til flere tabeller; og innsatser og slettinger vil på samme måte kreve operasjoner på tvers av flere tabeller. Av denne grunn bør 6NF ikke brukes i databaser som er ment å betjene behovet for online transaksjonsbehandling.

Imidlertid i datalager som ikke tillater interaktive oppdateringer og som er spesialiserte for raske spørsmål på store datamengder. bestemte DBMS-er bruker en intern 6NF-representasjon – kjent som en Columnar-datalager. I situasjoner der antall unike verdier i en kolonne er langt mindre enn antall rader i tabellen, tillater kolonneorientert lagring betydelige besparelser i plass gjennom datakomprimering. Kolonnelagring tillater også rask kjøring av rekkeviddesøk (f.eks. Viser alle poster der en bestemt kolonne er mellom X og Y, eller mindre enn X.)

I alle disse tilfellene gjør databasedesigneren imidlertid ikke må utføre 6NF-normalisering manuelt ved å opprette separate tabeller. Noen DBMS-er som er spesialiserte for lagring, for eksempel Sybase IQ, bruker kolonnelagring som standard, men designeren ser fortsatt bare en enkelt flerkolonnetabell. Andre DBMSer, for eksempel Microsoft SQL Server 2012 og nyere, lar deg spesifisere en «kolonnelagerindeks» for en bestemt tabell.

Write a Comment

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *