adatbázis

Adatbázis tervezése – feladatok

Adatbázis

Adatbázis tervezése – feladatok

Normalizáld az alábbi relációt:
SZAKÁCS(név, születési év, ételkód, ételnév, adag, cím, fajtakód, fajtanév)


Az 1NF (Első Normál Forma) biztosítja, hogy:

  1. Az oszlopok értékei atomiak, azaz minden mező csak egyetlen értéket tartalmaz (nincs többértékű attribútum, például egyetlen cellában nem szerepel több ételkód vagy cím).
  2. Minden sorban az oszlopok száma és sorrendje konzisztens.

A jelenlegi relációban (SZAKÁCS):

  • „név”, „születési év”, „ételkód”, „ételnév”, „adag”, „cím”, „fajtakód”, „fajtanév” mezők vannak.
  • A reláció megfelel az 1NF követelményeinek, mivel minden attribútum atomi, és nincs többértékű érték egy mezőben.

Második Normál Forma (2NF)

A 2NF követelményei:

  1. Az előfeltétel az, hogy a reláció már 1NF-ben van.
  2. Minden nem kulcs attribútum teljesen funkcionálisan függ az elsődleges kulcstól, azaz:
    • Egyik nem kulcs attribútum sem függhet az elsődleges kulcs egy részétől (ez a részleges függőség kiküszöbölése).

Elemzés a példára (SZAKÁCS táblázat):

A reláció elsődleges kulcsa: (név, ételkód)

Függőségek az adatok alapján:
  1. Név → születési év, cím
    Ez azt jelenti, hogy egy szakács neve alapján egyértelműen meghatározható a születési év és a cím. Ezek nem függnek az ételkódtól.
  2. Ételkód → ételnév, fajtakód, fajtanév
    Ez azt jelenti, hogy az ételkódhoz kapcsolódik az étel neve, illetve az ételhez tartozó fajtakód és fajtanév. Ezek sem függnek a szakács nevétől.
  3. (Név + Ételkód) → adag
    Ez az egyetlen olyan attribútum, amely teljesen függ az elsődleges kulcstól (a név és az ételkód együtt).

A táblázat részleges függőségei:

  • Név → születési év, cím: részleges függőség, mert csak a kulcs egyik része (név) határozza meg az attribútumokat.
  • Ételkód → ételnév, fajtakód, fajtanév: részleges függőség, mert csak a kulcs egyik része (ételkód) határozza meg az attribútumokat.

Megoldás: 2NF normalizálás

A részleges függőségek megszüntetése érdekében szétbontjuk a relációt három táblára:

  1. SZAKÁCS(név, születési év, cím)
    • Tartalmazza a szakácsokkal kapcsolatos attribútumokat, amelyeket a „név” egyértelműen meghatároz.
  2. ÉTEL(ételkód, ételnév, fajtakód, fajtanév)
    • Tartalmazza az ételekhez kapcsolódó adatokat, amelyeket az „ételkód” egyértelműen meghatároz.
  3. KÉSZÍT(név, ételkód, adag)
    • Kapcsoló tábla, amely a szakácsok és az általuk készített ételek kapcsolatát tárolja, valamint az ehhez tartozó adagot.

Eredmény (2NF-ben):

  1. SZAKÁCS tábla:
    Név Születési év Cím
    Kovács Anna 1985 Budapest
    Nagy Péter 1990 Debrecen
  2. ÉTEL tábla:
    Ételkód Ételnév Fajtakód Fajtanév
    101 Gulyás 1 Leves
    102 Túrógombóc 2 Desszert
  3. KÉSZÍT tábla:
    Név Ételkód Adag
    Kovács Anna 101 50
    Nagy Péter 102 30

Összegzés:

A 2NF elérése során megszüntettük a részleges függőségeket:

  • A szakácsokkal kapcsolatos attribútumok egy külön táblába kerültek.
  • Az ételekhez kapcsolódó attribútumok szintén egy külön táblába kerültek.
  • A szakácsok és az ételek közötti kapcsolatot egy harmadik, kapcsoló tábla rögzíti.

Harmadik Normál Forma (3NF)

A 3NF feltételei:

  1. Az előfeltétel az, hogy a reláció már 2NF-ben van.
  2. Egy reláció akkor van 3NF-ben, ha:
    • Minden nem kulcs attribútum kizárólag az elsődleges kulcstól függ.
    • Nem lehet tranzitív függőség, vagyis egy nem kulcs attribútum nem függhet másik nem kulcs attribútumtól.

Elemzés a példára (SZAKÁCS tábla):

2NF után kapott táblák:

  1. SZAKÁCS(név, születési év, cím)
  2. ÉTEL(ételkód, ételnév, fajtakód, fajtanév)
  3. KÉSZÍT(név, ételkód, adag)

Tranzitív függőség vizsgálata:

  1. Az SZAKÁCS tábla rendben van: a „név” egyértelműen meghatározza a „születési év” és „cím” attribútumokat, nincs tranzitív függőség.
  2. Az ÉTEL táblában azonban van tranzitív függőség:
    • Ételkód → fajtakód → fajtanév
      • Az „ételkód” meghatározza a „fajtakódot”, és a „fajtakód” meghatározza a „fajtanév” attribútumot. Ez egy tranzitív függőség, amelyet el kell távolítani.

Megoldás: 3NF normalizálás

A tranzitív függőség megszüntetése érdekében szétbontjuk az ÉTEL táblát:

  1. ÉTEL(ételkód, ételnév, fajtakód)
    • Az „ételkód” alapján meghatározható az étel neve és a fajtakód.
  2. FAJTA(fajtakód, fajtanév)
    • A „fajtakód” alapján meghatározható a fajta neve.

 

 

Eredmény (3NF-ben):

  1. SZAKÁCS tábla:
    Név Születési év Cím
    Kovács Anna 1985 Budapest
    Nagy Péter 1990 Debrecen
  2. ÉTEL tábla:
    Ételkód Ételnév Fajtakód
    101 Gulyás 1
    102 Túrógombóc 2
  3. FAJTA tábla:
    Fajtakód Fajtanév
    1 Leves
    2 Desszert
  4. KÉSZÍT tábla:
    Név Ételkód Adag
    Kovács Anna 101 50
    Nagy Péter 102 30

Összegzés:

  • A 3NF elérése érdekében megszüntettük a tranzitív függőségeket.
  • Az ÉTEL táblából eltávolítottuk a „fajtanév” attribútumot, és egy külön FAJTA táblába helyeztük.
  • Most már minden nem kulcs attribútum kizárólag az elsődleges kulcstól függ, nincs tranzitív függőség

 

Boyce-Codd Normál Forma (BCNF) és a Különbség a 3NF-hez Képest

Miért lehet szükség BCNF-re?

A BCNF szigorúbb, mint a 3NF. Egy reláció 3NF-ben lehet, de még mindig tartalmazhat olyan függőségeket, amelyek nem felelnek meg a BCNF kritériumainak.

  • 3NF kritériuma: Minden nem kulcs attribútum kizárólag az elsődleges kulcstól függ.
  • BCNF kritériuma: Minden funkcionális függőség bal oldala szuperkulcs kell, hogy legyen.

Ez azt jelenti, hogy BCNF-ben nem lehet olyan funkcionális függőség, ahol a bal oldalon nem egy szuperkulcs található.

 

Elemzés a példára (SZAKÁCS tábla)

3NF után kapott táblák:

  1. SZAKÁCS(név, születési év, cím)
  2. ÉTEL(ételkód, ételnév, fajtakód)
  3. FAJTA(fajtakód, fajtanév)
  4. KÉSZÍT(név, ételkód, adag)

BCNF vizsgálat:

  1. SZAKÁCS: Nincs további függőség. A „név” egyértelműen meghatározza a „születési év” és „cím” attribútumokat. Ez már BCNF-ben van.
  2. ÉTEL: Nincs további függőség. Az „ételkód” szuperkulcs, és minden attribútum tőle függ. Ez is BCNF-ben van.
  3. FAJTA: Nincs további függőség. A „fajtakód” szuperkulcs, és meghatározza a „fajtanév” attribútumot. Ez BCNF-ben van.
  4. KÉSZÍT: Vizsgáljuk meg az esetleges függőségeket.

 

BCNF probléma a KÉSZÍT táblában

A KÉSZÍT(név, ételkód, adag) tábla tartalma:

Név Ételkód Adag
Kovács Anna 101 50
Kovács Anna 102 30
Nagy Péter 101 20
Nagy Péter 102 40

Funkcionális függőségek:

  1. (Név, Ételkód) → Adag (minden kombináció meghatározza az adagszámot).
  2. Nincs olyan további függőség, amely sértené a BCNF-et, mert:
    • A „Név” és „Ételkód” páros szuperkulcs, és minden attribútum kizárólag ettől függ.

Eredmény (BCNF-ben):

A 3NF után a táblák már teljesítik a BCNF kritériumait is, mert:

  • Minden funkcionális függőség bal oldala szuperkulcs.
  • Nincs olyan további függőség, amely felbontást igényelne.