Teine normaalvorm (2NF): andmebaasi normaliseerimise määratlus

Õpi Teise normaalvormi (2NF) põhimõtteid: kuidas normaliseerida andmebaase, eemaldada osalised sõltuvused ja tagada tabelite andmete õigsus ning efektiivne indekseerimine.

Autor: Leandro Alegsa

Teine normaalvorm (2NF) on relatsioonilise mudeli, täpsemalt tabelite omadus, mis on andmebaasi normaliseerimise kriteerium.

Teise normaalvormi esimene kriteerium on, et tabel oleks esimene normaalvorm.

Teise normaalvormi tabelis sõltuvad iga rea igas veerus olevad andmed kogu rea primaarsest võtmest. Esmane võti on üks või mitu veergu reas, mida kasutatakse tabeli selle rea identifitseerimiseks ja indekseerimiseks. Veerud, mis ei ole seotud iga primaarvõtme veeruga, eemaldatakse. Säilitatakse ainult need veerud, mis on seotud kõigi primaarvõtme veergudega.

Mida täpsemalt tähendab "sõltuvad kogu primaarvõtmest"?

Teine normaalvorm nõuab, et iga mittevõtmeatribuut (st veerg, mis ei kuulu primaarvõtmesse) oleks funktsionaalselt sõltuv kogu primaarvõtmest, mitte ainult selle osast. Kui primaarvõti koosneb mitmest veerust (st see on koosseisev või komposiitvõti), siis ei tohi ükski mittevõtmeatribuut sõltuda ainult ühest komposiitvõtme komponendist. Sellist olukorda nimetatakse osaliseks sõltuvuseks ja see rikub 2NF-i.

Miks 2NF on oluline?

  • Vähendab andmete dubleerimist (redundantsust).
  • Vähendab andmete värskendamis-, lisamis- ja kustutamisanomaaliaid (update/insert/delete anomalies).
  • Selgitab andmete loogilist struktuuri, muutes andmebaasi haldamise ja hoolduse lihtsamaks.

Kui 2NF-i ei ole, siis milles probleem seisneb?

Kui tabelis on osalisi sõltuvusi, siis:

  • samad väärtused korduvad mitmel real (nt toote nimi koos tooteID-ga, aga see on korratud iga tellimuse rea juures),
  • uuendused nõuavad mitme rea muutmist (suur oht inkonsistentsuseks),
  • kustutamisel võib kaotada muud asjakohast infot (nt kui kustutatakse viimane teatud tellimusega seotud rida, kaob võib-olla kogu tooteinfo).

Oluline tähelepanek

Kui tabeli primaarvõti on üheveeruline (ühe atribuudiga), siis piisab tavaliselt sellest, et tabel oleks 1NF, sest iga mittevõtmeatribuut sõltub automaatselt “kogu” primaarvõtmest (mõttega: sellest ühest veerust). Seetõttu puutub 2NF eriti mängu siis, kui primaarvõti on komposiitvõti.

Kuidas teisendada tabel 2NF-i?

  1. Tuvasta primaarvõti (ja võimalikud kandidaadivõtmed).
  2. Leia kõik mittevõtmeatribuudid ning kontrolli, kas mõni neist sõltub ainult primaarvõtme osast (osaline sõltuvus).
  3. Loobu osalistest sõltuvustest, eraldades sõltuvad veerud omaette tabelitesse. Iga uus tabel peab olema 1NF-is ja omama sobivat primaarvõtit.
  4. Säilita viited: uus(t) tabel(id) hoiavad välisvõtmeid (foreign key), et säilitada seosed algse tabeliga.

Näide

Algtabel (ei ole 2NF):

OrderLine(OrderID, ProductID, ProductName, Quantity, OrderDate, CustomerName)

Siin on primaarvõti koosneva kaks veergu: (OrderID, ProductID). ProductName sõltub ainult ProductID-st (osaline sõltuvus) ja OrderDate ning CustomerName sõltuvad ainult OrderID-st. See põhjustab korduvaid ProductName ja OrderDate/CustomerName väärtusi ning anomaaliaid.

Decompositsioon 2NF-i saavutamiseks:

  • Order(OrderID, OrderDate, CustomerName)
  • Product(ProductID, ProductName, ...)
  • OrderLine(OrderID, ProductID, Quantity) — siin on primaarvõti (OrderID, ProductID) ja kõik muud väljad sõltuvad käesolevast primaarvõtmest täielikult.

Sellisel kujul ei sisalda OrderLine osalisi sõltuvusi: toote nimed ja tellimuse andmed on nüüd eraldi ja neid ei korrata iga rea puhul.

Piirangud ja edasised sammud

2NF ei eemalda transitiivseid sõltuvusi (nt A → B ja B → C, mis tähendab, et C transitiivselt sõltub A). Selliseid probleeme lahendatakse kolmandas normaalvormis (3NF) ja tugevamate vormidega (nt BCNF). Seega normaliseerimine on iteratiivne protsess: alustades 1NF-ist, liigud 2NF-i, seejärel 3NF-i jne vastavalt vajadusele ja jõuad kompromissini jõudluse ning andmete tervikluse vahel.

Praktilised näpunäited

  • Ära normaliseeri üle: väga sügavalt normaliseeritud skeem võib halvendada päringute jõudlust, kui on liiga palju liitumisi (JOIN).
  • Kombineeri normaliseerimise ja indekseerimise strateegiaid: säilita viited ja tekita indeksid, et päringud oleksid tõhusad.
  • Dokumenteeri kandidaadivõtmed ja välisvõtmed, et vältida segadust andmeskeemi muudatustel.

Kokkuvõtteks: teine normaalvorm (2NF) eeldab, et tabel on 1NF-is ja kõik mittevõtmeatribuudid sõltuvad täielikult (mitte osaliselt) primaarvõtmest. See vähendab redundantsust ja anomaaliaid, eriti kui primaarvõti on komposiitvõti.



Otsige
AlegsaOnline.com - 2020 / 2025 - License CC3