Ugrás a fő tartalomra

Adatbázis normál alakok jellemzőinek összefoglalása

 Az adatbázis normál formák (normal forms) az adatbázisok tervezési szabályait jelentik, amelyek célja az adatok redundanciájának csökkentése és az adatok integritásának biztosítása. Az 1NF-től az 5NF-ig terjedő normál formák mindegyike egyre szigorúbb feltételeket ír elő.


🔹 1. Miért fontosak a normál formák?

  • Csökkentik a redundanciát (ugyanaz az adat ne ismétlődjön feleslegesen).
  • Minimalizálják az anomáliákat (beszúrási, módosítási és törlési hibák).
  • Biztosítják az adatok konzisztenciáját és hatékonyabb lekérdezéseket tesznek lehetővé.

💡 Fontos: A normalizálás és a denormalizálás közötti egyensúlyt mindig az adott alkalmazás teljesítményigényei és funkcionalitása alapján kell meghatározni!


🔹 2. A normál formák részletesen

1NF – Első normál forma

📌 Feltétel:

  • Minden mező atomikus (oszthatatlan) kell legyen.
  • Minden rekordnak egyedi azonosítója (elsődleges kulcs) kell legyen.

Használata:

  • Alapvető szintű normalizálás, minden relációs adatbázis legalább 1NF-ben kell legyen.

📌 Példa: Nem 1NF (mert a "Telefon" mezőben több érték is van)

IDNévTelefon
1Anna123-456, 789-012
2Béla555-678

Megoldás (1NF-be hozva)

IDNévTelefon
1Anna123-456
1Anna789-012
2Béla555-678

2NF – Második normál forma

📌 Feltételek:

  • Az 1NF teljesül.
  • Minden nem kulcs attribútum teljes függésben van az elsődleges kulccsal (nincs részleges függőség).

🔴 Probléma, ha nincs 2NF:
Ha egy összetett elsődleges kulcs van, akkor egyes attribútumok csak annak egy részétől függenek.

📌 Példa: Nem 2NF (az "Edző neve" csak a "Csapat" mezőtől függ, nem az egész kulcstól)

Játékos_IDCsapatEdző neve
1BarcaXavi
2BarcaXavi
3RealAncelotti

Megoldás: Külön táblába bontjuk az edzőt
🔹 Játékosok tábla

Játékos_IDCsapat
1Barca
2Barca
3Real

🔹 Csapatok tábla

CsapatEdző neve
BarcaXavi
RealAncelotti

3NF – Harmadik normál forma

📌 Feltételek:

  • A 2NF teljesül.
  • Nincsenek tranzitív függőségek (egy oszlop nem függhet közvetetten a kulcstól).

📌 Példa: Nem 3NF

IDNévIrányítószámVáros
1Anna1051Budapest
2Béla4031Debrecen

🔴 Probléma: Az "Irányítószám" és a "Város" kapcsolata független az ID-tól → tranzitív függőség.

Megoldás: Városokat külön táblába tesszük
🔹 Emberek tábla

IDNévIrányítószám
1Anna1051
2Béla4031

🔹 Városok tábla

IrányítószámVáros
1051Budapest
4031Debrecen

BCNF – Boyce-Codd normál forma

📌 Feltétel:

  • A 3NF teljesül.
  • Minden meghatározó attribútumnak (determinánsnak) kulcsnak kell lennie.

🔴 Probléma: Ha egy nem elsődleges kulcsmező határozza meg egy másik oszlop értékét.

📌 Példa: Nem BCNF

TanárTantárgyOsztály
KovácsMatek10.A
KovácsMatek10.B
TóthFizika10.A

🔴 Itt a "Tanár" határozza meg a "Tantárgyat", de nem egyedi kulcs.

Megoldás: Külön táblák létrehozása

TanárTantárgy
KovácsMatek
TóthFizika
TantárgyOsztály
Matek10.A
Matek10.B
Fizika10.A

4NF és 5NF – Magasabb szintű normalizáció

  • 4NF (Negyedik normál forma): Megszünteti a többértékű függőségeket. Ha egy táblában egy oszlop többféle független értéket tartalmazhat egy másik oszlophoz képest, azt külön táblákba kell bontani.
  • 5NF (Ötödik normál forma): Kiküszöböli az összetett (összetett kulcsok által meghatározott) kapcsolódási problémákat.

💡 4NF és 5NF ritkán szükséges, főként nagy és komplex rendszereknél alkalmazzák.


🔹 3NF vs. Denormalizáció – Mikor melyiket használjuk?

Amikor normalizálunk (3NF vagy BCNF):

  • Az adatbázis mérete csökken.
  • Az adatfrissítések egyszerűbbek és gyorsabbak.
  • Jobb adatkonzisztencia.

Amikor denormalizálunk:

  • Gyorsabb lekérdezésekre van szükség.
  • Adattárházaknál gyakran denormalizálnak (pl. OLAP rendszerek).

📌 Gyakorlati tanács:

  • OLTP rendszerekben (napi használat, sok írás)3NF vagy BCNF
  • Adattárházaknál (kimutatások, gyors lekérdezések)Denormalizálás, dimenziós modellek


Példa

  • Tegyük fel, hogy egy egyetemi kurzusnyilvántartó rendszer adatbázisát tervezzük. Az adatbázis célja, hogy rögzítse a hallgatók, az általuk felvett kurzusok és az oktatók adatait.

    🔹 Kiinduló táblázat (nem normalizált adatok)

    Hallgató_IDHallgató_névKurzusOktatóOktató_telefonTeremIdőpont
    1Kovács PéterMatek 1Dr. Nagy123-456A101Hétfő 10:00
    2Szabó AnnaProg 1Dr. Kiss987-654B202Kedd 12:00
    3Kovács PéterProg 1Dr. Kiss987-654B202Kedd 12:00
    4Tóth ÁdámMatek 1Dr. Nagy123-456A101Hétfő 10:00

    🔴 Problémák ezzel a struktúrával:

    • Redundancia: Az oktatók és az időpontok többször szerepelnek.
    • Frissítési anomália: Ha egy oktató telefonszáma változik, több sorban kell módosítani.
    • Törlési anomália: Ha egyetlen kurzust törlünk, elveszíthetjük az oktató adatait is.

    🔹 1NF – Első normál forma

    📌 Feltételek:

    • Minden mező atomikus (oszthatatlan) kell legyen.
    • Nincsenek többszörös értékeket tartalmazó oszlopok.

    Módosított tábla (1NF-be hozva)

    Hallgató_IDHallgató_névKurzusOktatóOktató_telefonTeremIdőpont
    1Kovács PéterMatek 1Dr. Nagy123-456A101Hétfő 10:00
    2Szabó AnnaProg 1Dr. Kiss987-654B202Kedd 12:00
    3Kovács PéterProg 1Dr. Kiss987-654B202Kedd 12:00
    4Tóth ÁdámMatek 1Dr. Nagy123-456A101Hétfő 10:00

    🔹 Mi változott?

    • Az oszlopok oszthatóak maradtak, de még mindig redundancia van az oktatóknál és az órarendi adatoknál.

    🔹 2NF – Második normál forma

    📌 Feltételek:

    • Az 1NF teljesül.
    • Nincsenek részleges függőségek (minden nem kulcs attribútumnak teljesen az elsődleges kulcshoz kell kapcsolódnia).

    🔴 Probléma:

    • Az Oktató_telefon mező csak az Oktató oszloptól függ, nem a teljes kulcstól (Hallgató_ID, Kurzus).

    Megoldás: Az oktatókat külön táblába bontjuk

    🔹 Hallgató-Kurzus tábla (2NF)

    Hallgató_IDHallgató_névKurzus
    1Kovács PéterMatek 1
    2Szabó AnnaProg 1
    3Kovács PéterProg 1
    4Tóth ÁdámMatek 1

    🔹 Kurzus-Oktató tábla

    KurzusOktató
    Matek 1Dr. Nagy
    Prog 1Dr. Kiss

    🔹 Oktatók tábla

    OktatóOktató_telefon
    Dr. Nagy123-456
    Dr. Kiss987-654

    🔹 Kurzus-Órarend tábla

    KurzusTeremIdőpont
    Matek 1A101Hétfő 10:00
    Prog 1B202Kedd 12:00

    🔹 Mi változott?

    • Az oktatók és a kurzusok adatai külön táblába kerültek.
    • Nincs több felesleges adatismétlés.

    🔹 3NF – Harmadik normál forma

    📌 Feltételek:

    • A 2NF teljesül.
    • Nincsenek tranzitív függőségek (egy attribútum nem függ közvetetten az elsődleges kulcstól).

    🔴 Probléma:

    • Az "Időpont" az "Terem" oszloptól függ, tehát tranzitív függőség van.

    Megoldás: A termeket külön táblába tesszük

    🔹 Kurzus-Órarend tábla (3NF)

    KurzusTerem_ID
    Matek 1A101
    Prog 1B202

    🔹 Termek tábla

    Terem_IDIdőpont
    A101Hétfő 10:00
    B202Kedd 12:00

    🔹 Mi változott?

    • Az időpontokat külön táblába helyeztük, így nem függnek közvetetten a kurzustól.

    🔹 BCNF – Boyce-Codd normál forma

    📌 Feltételek:

    • A 3NF teljesül.
    • Minden determináns (meghatározó mező) kulcs kell legyen.

    🔴 Probléma:

    • Egyes esetekben az "Oktató" meghatározza a "Kurzus" attribútumot, ami nem elsődleges kulcs.

    Megoldás: Oktató-Kurzus kapcsolat külön táblába kerül

    🔹 Kurzusok

    Kurzus_IDKurzus
    1Matek 1
    2Prog 1

    🔹 Oktató-Kurzus tábla (BCNF)

    OktatóKurzus_ID
    Dr. Nagy1
    Dr. Kiss2

    Összegzés

    Normál formaFő célja
    1NFAtomikus adatmezők
    2NFRészleges függőségek eltávolítása
    3NFTranzitív függőségek eltávolítása
    BCNFMinden meghatározó kulcs kell legyen

    💡 Tipikus gyakorlat:

    • OLTP rendszerekben (pl. CRM, ERP) 3NF vagy BCNF ajánlott.
    • Adattárházaknál (pl. BI rendszerek) denormalizálás hasznos lehet.


Megjegyzések