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:
- 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).
- 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:
- Az előfeltétel az, hogy a reláció már 1NF-ben van.
- 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:
- 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. - É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. - (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:
- 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.
- ÉTEL(ételkód, ételnév, fajtakód, fajtanév)
- Tartalmazza az ételekhez kapcsolódó adatokat, amelyeket az „ételkód” egyértelműen meghatároz.
- 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):
- SZAKÁCS tábla:
Név Születési év Cím Kovács Anna 1985 Budapest Nagy Péter 1990 Debrecen - ÉTEL tábla:
Ételkód Ételnév Fajtakód Fajtanév 101 Gulyás 1 Leves 102 Túrógombóc 2 Desszert - 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:
- Az előfeltétel az, hogy a reláció már 2NF-ben van.
- 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:
- SZAKÁCS(név, születési év, cím)
- ÉTEL(ételkód, ételnév, fajtakód, fajtanév)
- KÉSZÍT(név, ételkód, adag)
Tranzitív függőség vizsgálata:
- 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.
- 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.
- Ételkód → fajtakód → fajtanév
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:
- ÉTEL(ételkód, ételnév, fajtakód)
- Az „ételkód” alapján meghatározható az étel neve és a fajtakód.
- FAJTA(fajtakód, fajtanév)
- A „fajtakód” alapján meghatározható a fajta neve.
Eredmény (3NF-ben):
- SZAKÁCS tábla:
Név Születési év Cím Kovács Anna 1985 Budapest Nagy Péter 1990 Debrecen - ÉTEL tábla:
Ételkód Ételnév Fajtakód 101 Gulyás 1 102 Túrógombóc 2 - FAJTA tábla:
Fajtakód Fajtanév 1 Leves 2 Desszert - 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:
- SZAKÁCS(név, születési év, cím)
- ÉTEL(ételkód, ételnév, fajtakód)
- FAJTA(fajtakód, fajtanév)
- KÉSZÍT(név, ételkód, adag)
BCNF vizsgálat:
- 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.
- É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.
- FAJTA: Nincs további függőség. A „fajtakód” szuperkulcs, és meghatározza a „fajtanév” attribútumot. Ez BCNF-ben van.
- 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:
- (Név, Ételkód) → Adag (minden kombináció meghatározza az adagszámot).
- 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.