Kolmas normaalimuoto (3NF): määritelmä tietokannan normalisoinnista

Kolmas normaalimuoto (3NF): selkeä opas tietokannan normalisointiin — poistaa riippuvuudet, parantaa tietojen yhdenmukaisuutta ja optimoi taulurakenteet.

Tekijä: Leandro Alegsa

Kolmas normaalimuoto (third normal form, 3NF) on relaatiomallin, erityisesti taulukoiden, ominaisuus, joka on tietokannan normalisoinnin kriteeri.

Kolmannen normaalimuodon ensimmäinen kriteeri on, että taulukko on toisen normaalimuodon mukainen.

Yksinkertaisemmin ilmaistuna 3NF edellyttää, että taulukon jokainen ei-avainsarakkeen (ei-prime-attribuutti) arvo riippuu suoraan ja ainoastaan koko ensisijaisesta avaimesta eikä muiden ei-avainsarakkeiden kautta. Tämän taustalla on halu poistaa transitiiviset riippuvuudet ja siten vähentää toistoa sekä päivitys-, lisäys- ja poistomokia.

Määritelmä ja formalisointi

Formaalisti relaatiotason riippuvuuksien näkökulmasta kolmas normaalimuoto voidaan ilmaista näin: jokaisen funktionaalisen riippuvuuden X → A pätee ainakin yksi seuraavista ehdoista:

  • X → A on triviaaliriippuvuus (A kuuluu X:ään), tai
  • X on superavain (eli sisältää jonkin taulun kandidaattiliittimen), tai
  • A on prime-attribuutti (eli A kuuluu johonkin taulun kandidaattiliittimeen).

Tämä Coddin esittämä muoto sallii joissain tapauksissa riippuvuuksia, joissa riippuvan puolen attribuutti on osa jotain avainta; käytännössä kuitenkin yleisin ymmärrys on, että ei-avainattribuutit eivät saa riippua toisista ei-avainattribuuteista.

Käytännön esimerkki

Esimerkki ennen normalisointia:

  • Tilaus(OrderID PK, CustomerID, CustomerName, CustomerAddress, OrderDate)

Tässä on transitiivinen riippuvuus OrderID → CustomerID → CustomerName/CustomerAddress. CustomerName ja CustomerAddress eivät riipu suoraan OrderID:stä vaan CustomerID:stä. Tämän vuoksi taulu ei ole 3NF:ssä.

Ratkaisu: siirretään asiakkaan tiedot omaan tauluunsa ja viitataan siitä ulkoavaimella:

  • Order(OrderID PK, CustomerID FK, OrderDate)
  • Customer(CustomerID PK, CustomerName, CustomerAddress)

Tällä jaolla poistuu toisto ja päivitysanomaliat (esim. osoitteen päivitys yhdestä paikasta riittää).

Erot 3NF:n ja BCNF:n välillä

BCNF (Boyce–Codd Normal Form) on tiukempi: jokaisen ei-triviaalin riippuvuuden X → Y tulee toteutua siten, että X on superavain. Toisin sanoen BCNF ei salli poikkeustapausta, jossa riippuva attribuutti olisi prime-attribuutti. Käytännössä 3NF riittää usein, koska se sallii jonkin verran joustavuutta säilyttäen tietokannan eheyden, kun taas BCNF voi vaatia lisähajautuksia ja monimutkaisempia liittymiä.

Hyödyt ja haitat

  • Hyödyt: vähentää redundanssia, tekee päivityksistä turvallisempia, parantaa eheyden ylläpitoa ja selkeyttää tietomallia.
  • Haitat: normaalisointi voi lisätä taulujen määrää ja johtaa useampiin JOIN-operaatioihin kyselyissä, mikä voi heikentää suorituskykyä tietyissä tilanteissa. Siksi joskus käytetään tarkoituksellista denormalisointia suorituskyvyn parantamiseksi.

Tarkistuslista normalisointiprosessissa

  • Varmista, että taulu on 1NF:ssä (atomiset arvot).
  • Poista osittaiset riippuvuudet -> saavuta 2NF.
  • Poista transitiiviset riippuvuudet -> saavuta 3NF.
  • Tarkista kandidaattiliittimet ja määritä avaimet oikein (ensimmäinen avain = primary key).
  • Arvioi, tarvitaanko tiukempi BCNF vai riittääkö 3NF sovelluksen vaatimuksiin ja suorituskykyyn liittyen.

Kolmas normaalimuoto on siten keskeinen askel tietokannan suunnittelussa: se vähentää tietojen päällekkäisyyttä ja epäjohdonmukaisuutta samalla kun se pitää rakenteen kohtuullisen yksinkertaisena käytännön sovelluksille.

 

Etsiä
AlegsaOnline.com - 2020 / 2025 - License CC3