Függőségek, normálformák Adatbáziskezelés Függőségek, normálformák Készítette: Csíki Gyula
Függőségek Funkcionális függőség: Legyen egy R reláció P és Q mezőkkel. Azt mondjuk, hogy P funkcionálisan meghatározza Q-t, vagy Q funkcionálisan függ P-től, ha valamely két sor megegyezik a P halmazon, ebből következik, hogy megegyezik Q halmazon is. (Minden P értékhez csak 1 Q-hoz tartozó értéket tudunk hozzárendelni) Jelölés: P --> Q
Függőségek Példa: Személyi ig. Név Lakcím AB23424 Kovács Pál Szeged, P utca CD12344 Nagy Béla Miskolc, Z utca A személyi igazolványszám egyértelműen meghatározza a nevet és a lakcímet.
Függőségek Teljes funkcionális függőség: Dátum Kód Darab 2011.03.30 45434535 30 2008.06.12 23423424 11 A dátum és a kód együttesen alkot egy összetett kulcsot. A darabszám külön nem függ a dátumtól és a kódtól, hanem a két attribútumtól csak, mint kulcstól, tehát teljesen függ a kulcs két attribútumától. Ellenkező esetben, részleges függésről beszélünk.
Függőségek Tranzitív függés: Legyen P és Q egy részhalmaz. Q tranzitíven függ P-től, ha van egy olyan B részhalmaz, amely a P-től függ funkcionálisan (P -- > B), és a B-től pedig a Q (B -- >Q).
Függőségek Példa: Nyilvántartás(személyi_szám, havi_bér, éves_bér) Éves bér függ a személyi számtól, a havi bér szintén a személyi számtól, DE a másodlagos attribútumok is függnek egymástól. Tehát: személyi_szám --> havi_bér --> éves_bér A fenti reláció ábrázolását relációs sémának nevezzük.
Normálformák Normálforma: az egyed szerkezeti állapota (Tábla belső szerkezete) NÉV SZAKKÉPZETTSÉG SZÜLETÉSI DÁTUM Kovács István Gépészmérnők közgazdász 52.02.16 Kiss Pál Lakatos 58.08.08
Normálformák Normálformák: 0.normáforma (0NF vagy N1NF) 1.normálforma (1NF) 2.normálforma (2NF) 3.normálforma (3NF)
0. normálforma R reláció 0. normálformában van, ha létezik olyan másodlagos attribútum, amely a kulcstól funkcionálisan független A táblázat ismétlödő ismereteket tartalmaz NÉV SZAKKÉPZETTSÉG SZÜLETÉSI DÁTUM Nagy Zsolt Gépészmérnők közgazdász 52.02.16 Kiss Pál Lakatos 58.08.08
1. normálforma R reláció 1. normálformájú, ha minden másodlagos tulajdonság funkcionálisan függ a kulcstól A táblázat minden sorában pontosan egy attribútumérték van
Az előző példa 1NF-ben: NÉV SZAKKÉPZETTSÉG SZÜLETÉSI DÁTUM Nagy Zsolt Gépészmérnők 52.02.16 Közgazdász Kiss Pál Lakatos 58.08.08
2. normálforma R reláció 2. normálformájú, ha 1-es normálformában van, és minden másodlagos attribútuma a reláció bármely kulcsától teljesen függ Megjegyzések Ha sz R kulcsa egyetlen attribútumból áll, akkor 2NF típusú Ha nincsen R-ben másodlagos attribútum, akkor 2NF típusú
3. normálforma R reláció 3. normálformájú, ha 2-es normáformában van, és egyetlen másodlagos attribútuma sem függ tranzitíven valamely kulcstól. (A reláció egy másodlagos attribútuma között sincs funkcionális függés)
Anomáliák Módosítási anomália A nem normalizált táblában redundáns adatok találhatóak, ezért a módosításokat több helyen el kell végezni.
Anomáliák Törlési anomália Az adatbázisban lehet, hogy ha törlünk egy sort, akkor szükséges adatokat veszítünk.
Anomáliák Bővítési anomália Az adatbázis bővítése nem lehetséges.
Normalizálás Cél: a tárolási és karbantartási káosz megszüntetése – veszteségmentesen Normalizálás – normálforma dekompozíció A kedvezőtlen normálformájú egyedet lebontjuk több kívánt normálformájú egyedre.
1. Normálformára hozás Személyek {Név, szakképzettség, szüldátum} Nincs 1NF-ben, mert a szakképzettség több lehet egy személynél.
1. Normálformára hozás Megszüntetjük a több értéket tartalmazó cellákat, minden sort leírunk annyiszor, ahány értéket tartalmaznak. Két relációra bontjuk az eredeti relációt, az egyikben a kulcsokhoz írjuk az értékeket, a másikban pedig a külső kulcshoz írunk
1. Normálformára hozás Személyek{Névkod, szakképzettsegkod} Nevek{Névkod, név, szuldatum} Szakképzettség{szakképzettségkod, megnevezés}
2. Normálformára hozás Ez a reláció már 1NF-ben van! Figyeljük meg a relációt! Mivel egy attributumból tevődik össze a kulcs, ezért minden esetben a reláció 2NF-ben is lesz, tehát ebben az esetben nem kell 2NF-re hozni. DE!
2. Normálformára hozás Tegyük fel, hogy a reláció, melyet 1NF-re hoztunk, tartalmaza az alábbi összetett kulcsot: Nevek{Névkod, név, szemigszam, diakigszam} Ebben az esetben a két igszam teljesen függ a kulcstól, de külön is függnek a kulcs részhalmazától, tehát részleges függés is fennt áll. Ilyen esetben a reláció nincs 2NF-ben.
2. Normálformára hozás Hozzuk 2NF-re a relációt! A relációt több olyan relációra bontjuk, melyek 2NF-ben vannak! Megoldás, hogy az egyes relációkban összefogjuk az összetett kulcs azon részhalmazát, mely funkcionálisan is meghatározza a másodlagos attribútumokat.
2. Normálformára hozás Eredeti relációs séma: Nevek{Névkod, név, szemigszam, diakigszam} 2NF: Nevek{Névkod, szemigszam, diakszam} Nevek2{Névkód, név}
3. Normálformára hozás Nevek{Névkod, szemigszam, diakszam} reláció nincs 3NF-ben, mert az igazolványszámok funkcionálisan függnek egymástól. Relációk létrehozásával megszüntetjük a másodlagos attríbutumok közötti funkcionális függést.
3. Normálformára hozás Nevek{Névkod, szemigszam, diakszam} Nevek2{Névkod, név} Nevek3{Névkod, szemigszam} Nevek4{Névkod, diakszam}
3. Normálformára hozás Eredeti relációnk Személyek {Név, szakképzettség, szüldátum} 3NF relációnk Nevek{Névkod, szakképzettségkód} Nevek2{Névkód, szemig} Nevek3{Névkód, diakig} Nevek4{Névkód, név} Szakképzettség{szakképzettségkód, képzettség}
Minden táblázat 3NF-ben van Megmaradtak a funkcionális függőségek Megszüntettük a redundás adattárolást Eltüntettük a karbantartási anomáliákat
Tervezés Egyedkapcsolat modell: EK-modell segítségével felvázolhatjuk, mit is akarunk tárolni az adatbázisban. A modell a következő elemekből áll: egyed, attribútumok, kapcsolat.
Tervezés Egyedkapcsolat diagram: EK-modell segítségével grafikusan is ábrázolhatjuk az adatbázis tervet. Az egyedek nevét téglalapba írjuk, az attribútumokat oválisba, a kapcsolatokat pedig rombuszokba. Kulcsot aláhúzással jelöljük.
Tervezés
Tervezés Feladat! Készítsük el egy Cukrászda adatbázisának tervét, EK-diagrammal vázolva!
Az adatmodell dokumentálása Adatbázis neve, célja, környezete Diagram (a kapcsolatok ábrázolása ) Egyedek listája (miben mit tárolok) Kapcsolatok felsorolása Rekordleírás Minden tulajdonság szerepe Opcionalitás, egyediség Értékek,korlátozások Tulajdonságok (származtatás)
Az ÉTTEREM adatbázis normalizálása A rendszer ismertetése: Az étteremben különféle ételeket és italokat rendelhetünk, amelyeket bizonyos nyersanyagokból recept szerint készítenek el A fogyasztás végén számla szerint fizetünk
Az adatbázis létrehozása RECEPT{azonosító,elnevezés,ár,tipus, tipnév,akód,név,egysár,mértegys, szüksmenny} SZÁMLA{szlaszám,dátum,azonosító, elnevezés,ár,rendmenny,érték,végösszeg}
Lépések Mintasorok készítése Kulcsok meghatározása normalizálás
RECEPT kulcsa = {azonositó,akód} Igazak az alábbi funkcionális függőségek {azonosító,akód}{szüksmenny} {azonosító}{elnevezés,ár,tipus,tipnév} {akód}{név,egysár,mértegys}
SZÁMLA kulcsa = {szlaszám, azonosító} Igazak az alábbi funkcionális függőségek {szlaszám,azonosító}{rendmenny} {szlaszám}{dátum,végösszeg} {azonosító}{elnevezés,ár}
A relációk ÉTLAP{azonosító,elnevezés,ár,tipus, tipnév} ANYAG{akód,név,egysár,mértegys} RECEPT{azonosító,akód,szüksmenny} SZÁMLAFEJ{szlaszám,dátum,végösszeg} ÉTLAP{aznosító,elnevezés,ár} SZÁMLATÉTEL{szlaszám,azonosító, rendmenny}
Ezzel 2NF –ra hoztunk mindegyik táblát De van tranzitív függés az ÉTLAP –ban: {azonosító}{tipus} és {tipus}{tipusnév} {azonosító}{tipnév} A többi tábla 3NF –ban van.
A tranzitív függőség megszüntetése ÉTLAP {azonosító, elnevezés, ár, tipus} FAJTA {tipus,tipnév} Szótárfájl
Technikai adatok Az ÉTLAP van logikai tipusú tulajdonsága A SZÁMLAFEJ kifizet logikai tipusú tulajdonsága
Bővithetőség BESZERZÉS{akód,dátum,beár,menny} ANYAG{akód,név,egysár,mértegys, készlet} SZEMÉLY{kódszám,neve,poszt} BEOSZTÁS{poszt,jelentés} CSAPAT{dátum,kódszám}
Bővithetőség {dátum,sorszám}{kódszám} Ahol a sorszám az asztal egyedi azonosítója Nem igaz viszont, hogy a dátum és a kódszám meghatározná a sorszámot
Az új egyedek ASZTAL{sorszám,hányfős} KISZOLGÁL{dátum,sorszám,kódszám} Ezért a számlafej így módosul SZÁMLAFEJ{szlaszám,dátum,végösszeg,sorszám}