adatbázis
Adatbázis tervezése
Adatbázis
Normalizálás, adatbázis tervezése
Normalizálás
A normalizálás az adatbázis tervezésének egyik kulcsfontosságú folyamata, amelynek célja az adatok redundanciájának minimalizálása és az adatstruktúra logikai átláthatóságának növelése. A folyamat során az adatokat kisebb, egymással összefüggő táblázatokra bontjuk, miközben biztosítjuk, hogy az adatok közötti kapcsolatok egyértelműek és konzisztens módon kezelhetők legyenek.
Normalizálás definíciója (magyarázattal):
A normalizálás egy táblázatbontó relációs művelet, amely során:
- Az adatok szervezése oly módon történik, hogy az ismétlődő vagy redundáns adatokat eltávolítjuk.
- Az adatbázisban tárolt információk strukturáltan, egymással logikailag összefüggő módon helyezkednek el.
- Minden tárolt adat egyértelműen kapcsolódik egy elsődleges kulcshoz.
Miért fontos a normalizálás?
- Csökkenti a tárolási igényt: Az adatok redundanciájának megszüntetésével kevesebb helyet foglalnak az adatbázisban.
- Megszünteti az anomáliákat: A módosítási, beszúrási vagy törlési műveletek során fellépő hibalehetőségeket minimalizálja.
- Átláthatóságot biztosít: A jól normalizált adatbázis könnyen kezelhető, módosítható és bővíthető.
A relációs adatbázisok és az 1NF követelménye:
Minden relációs adatbázis-kezelő rendszer alapfeltétele az 1. normál forma teljesítése. Ez biztosítja, hogy az adatbázis alapvető struktúrája megfeleljen az adatok hatékony és konzisztens kezelésének.
Normalizálás alapvetések
A normalizálás célja az adatbázis szerkezetének optimalizálása, amely során megszüntetjük a redundáns adatokat, elkerüljük az anomáliákat, és biztosítjuk az adatok konzisztens szervezését. Lássuk részletesen, mit jelent mindez, és hogyan kapcsolódnak hozzá a funkcionális függőségek.
Mi az a redundancia és miért kerülendő?
A redundancia többszörös, felesleges adattárolást jelent. Ez az alábbi problémákat eredményezheti:
- Felesleges helyfoglalás: Az ismétlődő adatok növelik az adatbázis méretét.
- Anomáliák keletkezése:
- Módosítási anomália: Egy adat módosításakor az ismétlődő példányokat is frissíteni kell; ennek elmulasztása ellentmondásokat okozhat.
- Beszúrási anomália: Bizonyos attribútumok hiánya akadályozhatja új adatok beszúrását.
- Törlési anomália: Egy rekord törlése olyan adatokat is eltávolíthat, amelyekre még szükség lenne.
Az adatbázis konzisztenciájának fontossága
Az adatbázis akkor konzisztens, ha csak egymással logikailag összefüggő, valós adatokat tartalmaz. A redundancia és az anomáliák azonban az adatok inkonzisztenciájához vezethetnek, amelyeket a normalizálással előzhetünk meg.
Funkcionális függőség: A normalizálás alapja
A funkcionális függőség az attribútumok közötti logikai kapcsolatot írja le. Ha egy attribútum (X) értéke meghatározza egy másik attribútum (Y) értékét, azt mondjuk, hogy Y funkcionálisan függ X-től.
Példa:
- Egy alkalmazotti nyilvántartásban az „azonosító” meghatározza a „név” attribútumot. Ez azt jelenti, hogy az azonosítóból egyértelműen levezethető a név.
Főbb tulajdonságok:
- X → Y igaz, de ebből nem következik, hogy Y → X.
- Ha K egy kulcs a relációban, akkor K funkcionálisan meghatározza az összes attribútumot a relációban.
A funkcionális függőségek következményei: Armstrong-axiómák részletesen
Az Armstrong-axiómák a funkcionális függőségek alapvető következtetési szabályai, amelyek segítenek új függőségeket levezetni meglévő függőségek alapján. Ezek az axiómák biztosítják, hogy az adatbázis logikai szerkezete helyesen legyen meghatározva.
1. Reflexivitás
Ha Y egy részhalmaza X-nek, akkor X → Y igaz.
- Magyarázat: Ha egy attribútumhalmaz már tartalmaz egy másik attribútumot vagy annak halmazát, akkor az egyértelműen levezethető.
- Példa:
- X = {azonosító, név, születési év}
- Y = {név, születési év} (részhalmaz)
- Következmény: {azonosító, név, születési év} → {név, születési év}
2. Bővítés (Augmentáció)
Ha X → Y, akkor tetszőleges Z attribútumhalmaz hozzáadása után XZ → YZ is igaz.
- Magyarázat: Ha egy halmaz már meghatároz egy másik halmazt, akkor a közös kiegészítésük is meghatározó lesz.
- Példa:
- X = {azonosító}, Y = {név}, ahol azonosító → név
- Z = {beosztás}
- Következmény: {azonosító, beosztás} → {név, beosztás}
3. Tranzitivitás
Ha X → Y és Y → Z, akkor X → Z is igaz.
- Magyarázat: Ha az egyik attribútumhalmazból levezethetünk egy másikat, és abból további attribútumokat, akkor az elsőből közvetlenül levezethető a harmadik.
- Példa:
- X = {azonosító}, Y = {név}, Z = {osztály}
- Ha azonosító → név és név → osztály, akkor azonosító → osztály is igaz.
4. Szétvágási szabály
Ha X → YZ, akkor X → Y és X → Z is igaz.
- Magyarázat: Ha egy halmaz meghatározza két attribútum együttes értékét, akkor ezek külön-külön is levezethetők.
- Példa:
- X = {azonosító}, YZ = {név, beosztás}
- Ha azonosító → {név, beosztás}, akkor:
- azonosító → név
- azonosító → beosztás
5. Egyesítési szabály
Ha X → Y és X → Z, akkor X → YZ is igaz.
- Magyarázat: Ha egy attribútumhalmaz külön-külön meghatározza két másik halmaz értékét, akkor azok együtt is levezethetők.
- Példa:
- X = {azonosító}, Y = {név}, Z = {beosztás}
- Ha azonosító → név és azonosító → beosztás, akkor:
- azonosító → {név, beosztás}
6. Pseudotranzitivitás
Ha X → Y és WY → Z, akkor WX → Z is igaz.
- Magyarázat: Ha egy attribútumhalmazból (X) egy másik attribútumhalmazt (Y) levezethetünk, és egy harmadik halmaz (W) ezt kiegészítve levezet egy további attribútumot (Z), akkor az első kettő együtt is meghatározó.
- Példa:
- X = {azonosító}, Y = {beosztás}, W = {név}, Z = {osztály}
- Ha azonosító → beosztás és {név, beosztás} → osztály, akkor:
- {azonosító, név} → osztály
Az Armstrong-axiómák biztosítják az attribútumok közötti kapcsolatok pontos meghatározását és logikai következményeinek levezetését. Ezek a szabályok segítenek az adatbázis helyes tervezésében és a funkcionális függőségek megfelelő kezelésében.
A normalizálás folyamata
0NF, UNF vagy 0. Normál forma
Ez a normalizálatlan relációs séma. Vesszük az összes mezőt, melyet az adatbázisnak tartalmaznia kell. Leírjuk egy nagy táblázatba, ahol minden szükséges mező szerepel, de még nem teljesíti a relációs modell követelményeit, például:
– többértékű attribútumot tartalmaz
– beágyazott táblázatot tartalmaz
– nincs elsődleges kulcsa
| Név | Szak | Hobbi |
|---|---|---|
| Kék Ibolya | Informatika | Olvasás, Zene |
1NF vagy első normálforma
– az oszlopok szám és sorrendje minden sorban azonos
– minden oszlop csak meghatározott értéket vehet fel az attribútum értéktartományból
– minden mező csak egy értéket vehet fel
– nincs összetett attribútum
– nincs beágyazott reláció (olyan tulajdonság, melynek értéke nem atomi)
– minden sorhoz egy egyedi kulcs tartozik, amitől az összes többi mező funkcionálisan függ (nincs két egyforma sor)
A hobbit külön sorokba bontjuk:
| Név | Szak | Hobbi |
|---|---|---|
| Kék Ibolya | Informatika | Olvasás |
| Kék Ibolya | Informatika | Zene |
2NF – második normálforma
1NF-ben van (előfeltétel) ÉS a nem kulcs attribútumok funkcionálisan függnek az elsődleges kulcstól. Megszünteti a részleges függőségeket, amelyek akkor fordulnak elő, ha egy nem kulcs attribútum csak a kulcs egy részétől függ.
Teljes funkcionális függőség
Egy attribútum teljes mértékben egy másik attribútumhalmaztól függ, azaz az adott attribútumot nem lehet meghatározni a kulcs egyetlen részhalmazából. Minden nem kulcs attribútum kizárólag a teljes elsődleges kulcstól függ.
Példa: Egy adatbázis, amely egyetemek kurzusainak részleteit tárolja:
| Kurzus ID | Hallgató ID | Jegy |
|---|---|---|
| 101 | 201 | 5 |
| 101 | 202 | 4 |
| 102 | 201 | 3 |
- Elsődleges kulcs: {Kurzus ID, Hallgató ID}
- Jegy attribútum teljes funkcionális függőségben van a {Kurzus ID, Hallgató ID} kulccsal. Ez azt jelenti, hogy a Jegy értéke csak a teljes kulcs (Kurzus ID és Hallgató ID) alapján egyértelműen meghatározható.
Miért teljes függőség?
- Ha csak a Kurzus ID van megadva, nem tudjuk, melyik hallgató jegyéről van szó.
- Ha csak a Hallgató ID van megadva, nem tudjuk, melyik kurzus jegyéről van szó.
- Csak a {Kurzus ID, Hallgató ID} együttes megléte adja meg a Jegy értékét.
Részleges funkcionális függőség
Egy attribútum csak a kulcs egy részétől függ, nem pedig a teljes kulcstól. Ez redundanciát okozhat, és ellentmond az 2NF követelményeinek.
Példa: Egy adatbázis, amely tanárok által tartott kurzusokat tárolja:
| Kurzus ID | Tanárok ID | Kurzus neve | Tanár neve |
|---|---|---|---|
| 101 | T1 | Matematika | Kovács Béla |
| 102 | T2 | Fizika | Nagy Anna |
- Elsődleges kulcs: {Kurzus ID, Tanárok ID}
- Kurzus neve attribútum teljes funkcionális függőségben van a Kurzus ID-tól.
- Tanár neve attribútum részleges funkcionális függőségben van, mert csak a Tanárok ID-tól függ, nem a teljes kulcstól.
Miért részleges függőség?
- A Tanár neve attribútumot meg tudjuk határozni csak a Tanárok ID alapján, függetlenül a teljes kulcstól.
Átalakítás 2NF-re:
-
Hozzunk létre külön táblát a tanároknak:
Tanárok ID Tanár neve T1 Kovács Béla T2 Nagy Anna -
Az eredeti táblát átalakítjuk:
Kurzus ID Kurzus neve Tanárok ID 101 Matematika T1 102 Fizika T2
Összegzés
-
Teljes funkcionális függőség:
- Az attribútum a teljes elsődleges kulcstól függ.
- Nincs redundancia vagy részleges kapcsolat.
- Példa: Egy kurzuson belüli jegyek, amelyek a kurzus és hallgató kombinációjától függnek.
-
Részleges funkcionális függőség:
- Az attribútum csak a kulcs egy részétől függ.
- Redundanciát okoz, amelyet külön táblázatokba helyezéssel szüntethetünk meg.
- Példa: Tanárok neve, amely csak a tanár azonosítójától függ, nem a teljes kulcstól.
3NF – harmadik normálforma
A 3NF célja, hogy eltávolítsa a tranzitív függőségeket az adatbázisból. Egy tábla akkor van 3NF-ben, ha:
- 2NF-ben van, és
- Nincs olyan nem elsődleges attribútum, amely tranzitív (közvetett) módon függ az elsődleges kulcstól.
Tranzitív funkcionális függőség:
Egy X → Z függőség tranzitív, ha létezik olyan Y attribútumhalmaz, amelyre:
- X → Y és
- Y → Z is teljesül.
👉 Példa tranzitív függőségre:
| Dolgozó ID (Szsz) | Osztályszám (Oszám) | Főnök neve |
|---|---|---|
| 1 | 101 | Kovács Béla |
| 2 | 101 | Kovács Béla |
| 3 | 102 | Nagy Anna |
- X → Y: Dolgozó ID → Osztályszám (egy dolgozó csak egy osztályhoz tartozik).
- Y → Z: Osztályszám → Főnök neve (egy osztályhoz egy főnök tartozik).
- X → Z (tranzitív): Dolgozó ID → Főnök neve (közvetett függőség).
Probléma: Ha a főnök neve megváltozik, az adatot több helyen kell módosítani, ami redundanciát okoz.
3NF-re normalizálás
-
Bontás külön táblákra:
- Hozzunk létre egy külön Osztályok táblát, amelyben tároljuk az osztályok azonosítóját és a hozzájuk tartozó főnök nevét.
- Az eredeti táblában csak a Dolgozó ID és az Osztályszám marad.
-
Átalakított táblák:
-
Dolgozók tábla:
Dolgozó ID (Szsz) Osztályszám (Oszám) 1 101 2 101 3 102 -
Osztályok tábla:
Osztályszám (Oszám) Főnök neve 101 Kovács Béla 102 Nagy Anna
-
Miért fontos a 3NF?
- Redundancia megszüntetése: Az adatok csak egyszer kerülnek tárolásra, így csökken a redundancia.
- Egyszerűbb adatkezelés: Ha egy adat megváltozik (pl. egy osztály főnöke), csak egy helyen kell módosítani.
- Karbantartás megkönnyítése: A tranzitív függőségek eltávolításával kevesebb adatkonfliktus és inkonzisztencia lép fel.
A Harmadik normál forma (3NF) célja, hogy az adatbázist tovább optimalizálja azáltal, hogy megszünteti a tranzitív függőségeket. Ezáltal az adatok még strukturáltabbak, könnyebben kezelhetők és karbantarthatók lesznek.
Egyéb normálformák
Boyce-Codd normál forma (BCNF)
Definíció:
Egy reláció sémája BCNF-ben van, ha minden X → Y funkcionális függőség esetén X szuperkulcs. Ez azt jelenti, hogy X attribútumainak egyedi módon kell azonosítaniuk az adott reláció összes sorát.
A Boyce-Codd normál forma (BCNF) egy szigorúbb változata a harmadik normál formának (3NF). A különbség lényege, hogy a BCNF kizárja azokat a funkcionális függőségeket is, amelyeket a 3NF megenged, ha azok nem kulcs attribútumokat érintenek.
- A 3NF lehetővé teszi, hogy egy nem kulcs attribútum függjön egy másik nem kulcs attribútumtól, ha ez nem sérti a tranzitív függőségek szabályait.
- A BCNF ezt a megengedést szünteti meg: minden attribútum függősége esetén a függőség bal oldala (determináns) szuperkulcs kell, hogy legyen.
BCNF és 3NF közötti különbség
-
3NF: Egy reláció 3NF-ben van, ha:
- Minden funkcionális függőség esetén legalább az egyik oldal kulcsjelölt.
- Megengedett, hogy nem kulcs attribútum függjön más nem kulcs attribútumtól (tranzitív függőség), ha a tranzitív függőség nem sérti az adatbázis integritását.
-
BCNF: Egy reláció BCNF-ben van, ha:
- Minden funkcionális függőség bal oldala (a determináns) szuperkulcs. Ez azt jelenti, hogy a bal oldali attribútumok egyedileg azonosítják a teljes relációt.
-
👉 Példa:
| Tanár | Tantárgy | Tanári szoba |
|---|---|---|
| Kiss Anna | Matematika | 101 |
| Kovács Béla | Fizika | 102 |
| Kiss Anna | Informatika | 101 |
Függőségek a táblában:
- Tanár → Tanári szoba
- Egy tanárhoz mindig ugyanaz a tanári szoba tartozik.
- Tanár, Tantárgy → Tanári szoba
- Egy tanár és a tantárgy együttesen meghatározza a tanári szobát.
3NF
- Egy reláció 3NF-ben van, ha:
- Minden attribútum közvetlenül az elsődleges kulcstól függ.
- Nincs tranzitív függőség a nem kulcs attribútumok között.
3NF alkalmazása a példánkra:
- Az elsődleges kulcs: Tanár, Tantárgy
- A függőségek:
- Tanár → Tanári szoba → Ez nem sérti a 3NF-et, mert a „Tanár” attribútum lehet nem kulcs attribútum is, ha ez az adatbázis szervezését nem bonyolítja vagy nem vezet redundanciához.
A táblázat tehát 3NF-ben van.
BCNF
- Egy reláció BCNF-ben van, ha:
- Minden függőség bal oldala szuperkulcs.
Mi a probléma BCNF szempontjából?
- A függőség: Tanár → Tanári szoba → Itt a bal oldali attribútum (Tanár) nem szuperkulcs (mert nem azonosítja egyedileg a táblázat sorait).
- Emiatt a tábla nincs BCNF-ben, mert „Tanár” nem az elsődleges kulcs része.
BCNF normalizálása
A táblát két részre kell bontani, hogy minden függőség bal oldala szuperkulcs legyen:
- Első tábla (Tanár és Tanári szoba kapcsolata):
| Tanár | Tanári szoba |
|---|---|
| Kiss Anna | 101 |
| Kovács Béla | 102 |
- Második tábla (Tantárgy és Tanár kapcsolata):
| Tanár | Tantárgy |
|---|---|
| Kiss Anna | Matematika |
| Kovács Béla | Fizika |
| Kiss Anna | Informatika |
- 3NF-ben maradhat egy olyan függőség, ahol a bal oldali attribútum nem szuperkulcs, ha ez nem okoz redundanciát vagy adatvesztést.
- BCNF-ben minden függőség bal oldalának szuperkulcsnak kell lennie, ami azt jelenti, hogy minden bal oldali attribútumnak egyedileg azonosítania kell a táblázat minden sorát.
4NF – negyedik normál forma
Definíció:
Egy reláció sémája 4NF-ben van, ha:
- Minden X → Y többrétű függőség esetén X szuperkulcs.
- Többrétű függőség: Egy X attribútum több, egymástól független Y és Z attribútumhoz kapcsolódik.
👉 Példa:
- Adattábla (Diákok):
| Diák neve | Nyelv | Sport |
|---|---|---|
| Anna | Angol | Kosárlabda |
| Anna | Német | Kosárlabda |
| Anna | Angol | Röplabda |
| Anna | Német | Röplabda |
Függőségek:
- Diák neve → Nyelv
- Diák neve → Sport
Probléma:
A táblázatban redundancia lép fel, mert a „Nyelv” és a „Sport” független egymástól.
Megoldás (4NF-re normalizálás):
-
Tábla 1: Diák neve → Nyelv
Diák neve Nyelv Anna Angol Anna Német -
Tábla 2: Diák neve → Sport
Diák neve Sport Anna Kosárlabda Anna Röplabda
5NF – ötödik normál forma
Definíció:
Egy reláció sémája 5NF-ben van, ha nincs nem-triviális összekapcsolási függőség. Ez azt jelenti, hogy a táblák kapcsolatai nem bonthatók fel további táblákra anélkül, hogy információt veszítenénk.
👉 Példa:
-
Munkatárs Projekt Szerep Anna A Tervező Anna B Fejlesztő Bence A Fejlesztő Bence B Tesztelő
Probléma:Az adatok redundánsak, és nincs biztosítva, hogy az „Anna” és „Bence” kapcsolatai a projektekhez és a szerepekhez helyesek maradjanak, ha új adatot vezetünk be. Ha például Anna egy új projektben „Tervező” szerepet kap, a redundancia miatt több sor is frissítésre szorul.
5NF NormalizálásaAz 5NF célja: Az összekapcsolási függőségeket úgy bontja szét, hogy minden reláció információvesztés nélkül helyreállítható legyen.
1. Táblázat: Munkatárs → Projekt
Munkatárs Projekt Anna A Anna B Bence A Bence B
2. Táblázat: Projekt → SzerepProjekt Szerep A Tervező A Fejlesztő B Fejlesztő B Tesztelő
3. Táblázat: Munkatárs → SzerepMunkatárs Szerep Anna Tervező Anna Fejlesztő Bence Fejlesztő Bence Tesztelő
-
6NF – Hatodik normál forma
Definíció:
Elméleti normál forma, amely a relációkat teljes mértékben dekomponálja időbeli függőségek kezelésére. Gyakorlatban ritkán alkalmazzák.
