Druhá normálna forma (2NF): definícia, pravidlá a príklady pre relačné databázy

Druhá normálna forma (2NF): vysvetlenie, pravidlá a príklady normalizácie databáz. Naučte sa rozpoznať a odstrániť parciálne závislosti pre konzistentné a efektívne tabuľky.

Autor: Leandro Alegsa

Druhá normálna forma (2NF) je vlastnosť relačného modelu, konkrétne tabuliek, ktorá je kritériom normalizácie databázy. Druhá normálna forma sa uplatňuje po splnení podmienok prvej normálnej formy a rieši najmä problém čiastkových závislostí v tabuľkách s kompozitným (zloženým) primárnym kľúčom.

Prvým kritériom druhej normálnej formy je, aby bola tabuľka prvou normálnou formou (1NF) — to znamená, že každý atribút obsahuje len atómové hodnoty a každý riadok je jednoznačne identifikovateľný.

Čo presne znamená 2NF

Tabuľka je v druhej normálnej forme, ak spĺňa dve podmienky:

  • je v 1NF,
  • žiadny ne-kľúčový atribút nie je čiastočne závislý na časti kompozitného primárneho kľúča — každá ne-kľúčová kolóna musí byť závislá od celého primárneho kľúča, nie len od jeho časti.

Ak je primárny kľúč len jeden stĺpec (jednoduchý kľúč), potom po splnení 1NF je druhá normálna forma v praxi automaticky splnená, pretože neexistuje možnosť čiastočnej závislosti od „časti“ kľúča.

Čo sú čiastkové (partial) závislosti

Čiastková závislosť nastáva, keď ne-kľúčový atribút závisí len od časti kompozitného primárneho kľúča. Takéto závislosti spôsobujú redundantné údaje a anomálie (pri vkladaní, aktualizácii a mazání).

Príklad (ilustrácia problému)

Máme tabuľku OrderItems s atribútmi:

  • OrderID (časť primárneho kľúča)
  • ProductID (časť primárneho kľúča)
  • ProductName
  • Quantity
  • UnitPrice

Primárny kľúč je zložený: (OrderID, ProductID). Atribúty ProductName a UnitPrice závisia len od ProductID (nie od OrderID). To je čiastková závislosť — tabuľka nie je v 2NF.

Riešenie: dekompozícia do 2NF

Aby sme dosiahli 2NF, rozdelíme tabuľku tak, aby každý ne-kľúčový atribút bol závislý od celého primárneho kľúča alebo aby sa stal súčasťou novej tabuľky, kde má vlastný primárny kľúč.

  • Orders(OrderID, OrderDate, CustomerID, ...)
  • OrderItems(OrderID, ProductID, Quantity) — primárny kľúč: (OrderID, ProductID)
  • Products(ProductID, ProductName, UnitPrice, ...) — primárny kľúč: ProductID

Po dekompozícii sú ProductName a UnitPrice v tabuľke Products závislé od celého svojho (jednoduchého) kľúča ProductID, a OrderItems už neobsahuje čiastkové závislosti.

Kroky na overenie a prevod tabuľky do 2NF

  1. Uistite sa, že tabuľka je v 1NF (atómové hodnoty, jednoznačné riadky).
  2. Identifikujte primárny kľúč — zistite, či je kompozitný.
  3. Nájdite všetky ne-kľúčové atribúty a skontrolujte, či závisia od celej množiny kľúčových stĺpcov alebo len od jej časti.
  4. Pre každú čiastkovú závislosť vytvorte novú tabuľku, kde atribút závisí od vlastného primárneho kľúča.
  5. Zabezpečte referenčnú integritu medzi tabuľkami (cudzí kľúče).

Dôsledky, ak tabuľka nie je v 2NF

  • Redundancia dát — rovnaké informácie sa opakujú v mnohých riadkoch.
  • Anomálie pri aktualizácii — zmena hodnoty musí byť vykonaná na viacerých miestach.
  • Anomálie pri vkladaní a mazání — ťažkosti so zachovaním konzistencie údajov (napr. nemožnosť vložiť nový produkt bez objednávky alebo stratenie informácií pri vymazaní poslednej objednávky obsahujúcej produkt).

Vzťah k ostatným normálnym formám

  • 1NF: rieši atómovosť polí a jednoznačnosť riadkov (predpoklad pre 2NF).
  • 2NF: odstraňuje čiastkové závislosti pri kompozitných kľúčoch.
  • 3NF: ďalej rieši tranzitívne závislosti (keď ne-kľúčový atribút závisí od iného ne-kľúčového atribútu).
  • BCNF: silnejšia forma, ktorá rieši všetky závislosti medzi atribútmi a kľúčmi.

Krátke SQL poznámky

Po dekompozícii vytvorte primárne a cudzie kľúče, napríklad:

CREATE TABLE Products (   ProductID INT PRIMARY KEY,   ProductName VARCHAR(100),   UnitPrice DECIMAL(10,2) );  CREATE TABLE OrderItems (   OrderID INT,   ProductID INT,   Quantity INT,   PRIMARY KEY (OrderID, ProductID),   FOREIGN KEY (ProductID) REFERENCES Products(ProductID) ); 

Zhrnutie

2NF zabezpečuje, aby každý ne-kľúčový atribút v tabuľke závisel na celom primárnom kľúči, čím sa znižuje redundancia a predchádza sa anomáliám pri zmene dát. Je to dôležitý krok normalizácie medzi 1NF a 3NF, hlavne pri tabuľkách s kompozitnými kľúčmi.



Prehľadať
AlegsaOnline.com - 2020 / 2025 - License CC3