Funkcionális függések, kulcskeresés, Armstrong axiómák A kékkel írt dolgokat tudniuk kell már, nem kell újra elmondani
0. Ha valahol még nem szerepelt a relációs algebrai osztás, akkor azt kell először venni: Példa:
Önálló feladat:
1. Funkcionális függőség: Definíció: B attribútum funkcionálisan függ A attribútumtól (vagy A funkcionálisan meghatározza B-t), ha t1[A]=t2[A] esetén t1[B]=t2[B]. Ez a definíció azt jelenti, hogy ha B attribútum (tábla egy oszlopa) funkcionálisan függ A attribútumtól, akkor az A attribútmon azonos értéket felvevő sorokban a B attribútum értékei is megegyeznek. Jelölés: A→B A a1 a1 a2
B b1 b2 b3
C c1 c2 c3
F: funkcionális függés halmaza
→
A a1 a1 a2
b2=b1
B b1 b1 b3
( pl: F={A D, B E, DE C} ) 1
C c1 c2 c3
Implikáció definíciója (Logikai következmény) Egy adott FD1 funkcionális függőségi halmaz implikáltja (logikai következménye) FD2 függőségi halmaz, ha a reláció minden egyes legális előfordulása FD1 szerint legális FD2 szerint is. Jelölés: FD1 |= FD2 1.1. Adott a következő R(X,Y,Z) reláció egy r előfordulása: r: X x1 x1 x2 x2
Y y1 y1 y1 y1
Z z1 z2 z1 z3
Kérdések: Mondjon példát olyan funkcionális függésre, amely szerint legális az előfordulás. Módosítsuk z3-at, z2-re. Válaszoljon az előző kérdésre újra! Válaszok: F={ Z Y, X Y, XZ Y } Ugyan az mint előbb. ( F nem változott )
1.2. Adott a következő S(A,B,C) reláció egy s példánya: Kérdés: B C Ellenőrizze, hogy s legális-e az alábbi függőségekre: 2 3 A B, BC A, B C Válasz: 2 3 BC A szerint nem legális (pl: 1,2,3 illetve 4,2,3) 3 3 a többi igen Kék részeket csak kérdezni kell. s: A 1 4 5
2. Armstrong axiómák:
(Előadáson szerepelt! Ezért talán nem kellene ideírni, nehogy véletlenül vegyék) 2.1. Reflexívitás-Reflexivity: Állítás (nem def)Ha attribútum részhalmaza attribútumnak akkor funkcionálisan függ -tól. (Ha , akkor ) Biz.: A funkcionális függések definíciójából következik, hogyha t1[ ]= t2[ ], akkor t1[ ]= t2[ ] is igaz. A állítás következménye, hogy ha a sorok értéke ugyanaz az attribútumok halmazán, akkor a részhalmazon is. 2.2. Bővítés-Augmentation: Def.: Ha → , akkor → Biz.: t1[ ] = t2[ ] és t1[ ] = t2[ ] t1[ ] = t2[ ]
t1[
] = t2[
]
t1[ ] = t2[ ]
2.3. Tranzitivitás-Transivity: Def.: Ha → és → , akkor → Biz.: jelentése: ha t1[ ] = t2[ ] t1[ ] = t2[ ] jelentése: ha t1[ ] = t2[ ] t1[ ] = t2[ ] Így ha t1[ ] = t2[ ] és t1[ ] = t2[ ] fennáll, akkor t1[ ]= t2[ ] kell legyen. 2
3. Levezetések és formális bizonyítások: 3.1. Dekompozíció szabály (definíció alapján) (ha , akkor és ) jelentése: ha t1[ ]= t2[ ], akkor t1[ ]= t2[ ] igaz. De ez a második egyenlőség a t1[ ]= t2[ ] és t1[ ]= t2[ ] egyenlőségekből áll, amelyek bizonyítják az állítást. 3.2. Unió szabály ( és , akkor ) Ha t1[ ]= t2[ ], akkor t1[ ]= t2[ ] és t1[ ]= t2[ ], akkor t1[ ]= t2[ ] igaz, akkor a t1[ ]= t2[ ], akkor t1[ ]= t2[ ] is teljesül. 3.3. Pszeudo-tranzitivitás (ha Ha
és , akkor + bővítés -val
) és
. Mivel
, ezért a tranzitivitás miatt
3.4. Pszeudo-kibővítés (ha Ha
, akkor ) + bővítés -val
3.5. Önálló feladat (ha és , akkor Ha + bővítés -val Tranzitivitással: és
. Dekompozíciós szabály:
és
.
) + bővítés -val
. Valamint
.
.
4. Funkcionális függés lezártja: F lezártja F+, ha az F+ tartalmazza az összes funkcionális függést, amit az F meghatároz (ami az Armstrong axiómák segítségével levezethető F-ből). Két függőségi halmaz ekvivalens, ha lezártjuk egyenlő. Ez nem volt még! A kékek kövekező gyakorlaton legyenek! Definíció: Az levezethető (derivation) az FD1, FD2, FD3, ....FDn funkcionális függések sorozatából az FD funkcionális függések halmazán, ha: FDn = és minden FDk FD, vagy az FDk az FD elemeiből levezethető az Armstrong axiómák segítségével vagy az előzőleg meghatározott származtatottakból vagy mindkettőből. 4.1. Funkcionális függés lezártja: R(A,B,C,D) F = {A B, A C, C D} F+ = {A A, A B, A C, A D, A AB, A AC, A AD, A BC, A BD, A CD, A ABC, A ABD, A BCD, A ABCD, C D… }
3
.
4.2. Ekvivalens függőségi halmazok: R(A,B,C) F1 = {AC C, A BC, C C} F2 = {ABC BC, A B, A C} Megoldás: F1-ből levezethetőek F2 funkcionális függőségei: A BC dekompozíció: A B, A C A BC bővítés BC-vel: ABC BC F2-ből levezethetőek F1 funkcionális függőségei: A B és A C unió: A BC A C bővítés C-vel: AC C C-ből triviális (reflexivitással): C C 4.3. Következménye-e a C A, illetve a D C függőségek az F:={AB C, C D, D A} függőségi halmaznak? (Funkcionális függés lezárttal) Megoldás: C D és D A tranzitivitás: C A D funkfügg-jei: D A, D D, D AD
C A következménye F-nek. D C nem következménye F-nek.
5. Attribútum halmaz lezártja adott F függőségi halmaz szerint: {A1, A2, ... An}+={B| A1, A2, ... An B, amely F-ből következik} Bemenet: X attribútum halmaz, F függőségi halmaz Eredmény: X attribútum halmaz F szerinti lezártja (X+), azaz minden olyan attribútum, ami X+-ból következik F függőségeit felhasználva. Az algoritmus nem szerepelt, végig kell következtetniük Módszer: 1. X(0) = X (Az attribútum halmaz elemei triviálisan bent lesznek) 2. X(i+1) = X(i) A, ha F-ben van olyan függőség, hogy Y Z, ahol A Z, és Y X(i) 3. Kilépés: X(i+1) = X(i) (Ha nincs változás készen vagyunk) ( Tétel: Ez a módszer helyesen számolja ki X+-t Bizonyítás: Teljes indukcióval… )
5.1. Keressük meg a különböző attribútum halmazok lezártjait! R{A,B,C,D,E} F={A→C, B→C, C→D, DE→C, CE→A} Megoldás: tehát itt le kell vezetniük… {A}+ = {A,C,D}; {B}+ = {B,C,D}; {C}+ = {C,D} … {DE}+ = {D,E,C,A} ... {BE}+ ={ A,B,C,D,E} 5.2. Következménye-e a C A, illetve a D C függőségek az F:={AB C, C D, D A} függőségi halmaznak? (Attribútum halmaz lezárttal) Megoldás: Megoldás: tehát itt le kell vezetniük…
4
C+={C, D, A}, így A C+, tehát C A következik F-ből. D+={ D, A}, így C D+, tehát D C nem következik F-ből.
6. Kulcsok meghatározása a funkcionális függőség segítségével: Szuperkulcs (Super key): α szuperkulcs, ha α R. Vagyis α-ból levezethető a reláció összes attribútuma a funkcionális függőségek segítségével. Kulcsjelölt (Candidate key): α kulcsjelölt, ha α R és nincs olyan β α amire β R. Máshogy: {A} kulcsjelölt, ha {A}+ az összes R attribútum, de A egy valódi részhalmazára sem igaz ez, azaz minimális. Elsődleges kulcs: Tetszőleges kulcsjelölt A funkcionális függések segítségével meg lehet határozni a kulcsokat és az elsődleges kulcsot. Egy attribútum vagy attribútum halmazt akkor nevezünk kulcsnak, ha az attribútum halmaz lezártja tartalmazza az összes attribútumot (Ki lehet fejezni velük az összes többi attribútumot). Tippek kulcs jelöltek keresésére: - Amelyik attribútumok nem szerepelnek a funkcionális függések jobb oldalán, azokat nem határozza meg semmi (csak önmaguk), tehát mindenképpen a kulcsjelölt részét fogják képezni. - Ha a fenti attribútumok, kevesek lennének kulcs jelöltnek, akkor a funkcionális függések bal oldalán álló attribútumok közül esélyes (ezek meghatározhatnak más attribútumokat), hogy valamelyikre még szükség van LEFT( kulcsban lesz) LEFT-RIGHT (lehet a kulcsban) RIGHT(soha nem lesz a kulcsban) 6.1. Példa: Kérem szépen a Left(FD-k csak baloldalán szereplő attr), LeftRight(mindlkét oldalon szerpel), Right(csak jobboldalon szerepel) csoportosításra trenírozni őket!! Határozzuk meg a kulcsjelölteket! R(A,B,C,D) a) F1 = {C D, C A, B C} B LEFT LEFT_RIGHT RIGHT B C A a) F2 = {B C, D A} BD LEFT B D
LEFT_RIGHT
b) F3 = {ABC D, D
LEFT B,C
RIGHT A
A}
LEFT_RIGHT A,D
ABC vagy BCD
RIGHT _
5
b) F4 = {A B, BC D, A C}
LEFT A
LEFT_RIGHT B, C
A
RIGHT D
c) F5 = {AB C, AB D, C A, D B}
LEFT
LEFT_RIGHT A, B, C, D
AB, CD, AD, vagy BC
RIGHT
6.2. Befektetési iroda Séma: Attribútumok: {Bróker, Iroda, Befektető, Részvény, Darab, Osztalék} Függőségi halmaz = {Bróker Iroda; Részvény Osztalék; Befektető, Részvény Darab; Befektető Bróker} Határozzuk meg a reláció kulcsát az előző megoldások mintájára! Megoldás: (Befektető, Részvény) lesz a kulcsjelölt 6.3. Határozzuk meg a reláció kulcsait A reláció sémája: R(A, B, C, D, E) A hozzátartozó függőségi halmaz: F={A B, CA D, C E, D A} LEFT C
LEFT_RIGHT A, D
RIGHT B, E
6
Megoldás: Figyelmesen nézzük meg a funkcionális függőségek bal és jobb oldalait: C mindenképpen benne lesz a kulcsban (jobb oldalt nem szerepel) bal oldalon még az A és D attribútum szerepel Sejtés: CA és CD lehet kulcs jelölt 1. CA+1={C, A} a reflexivitás miatt 2. CA +2={C, A} {B} az A B függőség miatt 3. CA +3={C, A, B} {D} a CA D függőség miatt 4. CA +4={C, A, B, D} {E} a C E függőség miatt 5. CA +5={C, A, B, D, E} 6. CA +5= CA+6
1. CD+1={C, D} a reflexivitás miatt 2. CD +2={C, D} {A} az D A függőség miatt 3. CD +3={C, D, A} {E} a C E függőség miatt 4. CD +4={C, D, A, E} {D} a CA D függőség miatt 5. CD +5={C, D, A, E, D} 6. CD +5= CD+6
Minimalitási feltétel ellenőrzése: C+={C, E}, A+={A, B}, D+={D, A, B} önmagukban nem képesek a teljes R relációt meghatározni CA és CD valóban kulcsjelöltek!
7. Gyakorlás zh-ra: 7.1. Relációs algebra(akár átírást is lehet gyakorolni): Gyümölcsök (Azonosító, Név, Egységár); Termelők (Termelőazonosító, Név, Település, Utca, Összes földterület); Termel (Azonosító, Termelőazonosító, Éves mennyiség); Azonosító
Név
Név
Egységár
Utca T.Azonosító
Gyümölcsök
Termelők Település Termel
Összföld.
Éves mennyiség
Kérdések és válaszok: 1. Mi a legdrágább gyümölcs azonosítója? (π(Egységár, Egységár) (Hallgatók)) \ π(Új.Azonosító, Új. Egységár) (σ (Gyümölcs. Egységár > Új. Egységár) (π(Azonosító, Egységár) (Gyümölcsök) × ρ(Új) (π(Azonosító, Egységár) (Gyümölcsök))))) 2. Mi a legtöbb földdel bíró termelő neve? (π(Név, Föld) (Hallgatók)) \ π(Új.Név, Új. Föld) (σ (Termelő. Föld > Új. Föld) (π(Név, Föld) (Termelő) × ρ(Új) (π(Név, Föld) (Termelő))))) 3. Azon termelők neve akik termelnek dinnyét. π (Termelők.név) (Termelők (σ (gyümölcsök.név> „dinnye”) (Gyümölcsök Termel))) 7
4. Kik azok a termelők (név szerint), akik mindenféle gyümölcsöt termelnek? π (név) (Termelők (π (Termelőazonosító, Azonosító) (Termel) / π (Azonosító) (Gyümölcsök))) 7.2. Relációs algebra <-> SQL: Adott a következő séma. Írjuk át a relációs algebrai kifejezéseket SQL-re, és fordítva! Suppliers (sid int, sname str, address str) Parts (pid int, pname str, color str) Catalogue (sid int, pid int, cost real) Rel. alg. (piros cikkeket forgalmazó szolgáltatók listája): π suppliers.sname (Suppliers (σ parts.color= „piros” (Catalog Parts))) SQL? Megoldás: SELECT sname FROM SUPPLIERS s, CATALOG c, PARTS p WHERE s.sid=c.sid and c.pid=p.pid and p.color=`piros'; SQL (piros és sárga cikkeket is forgalmazók listája): SELECT sname FROM SUPPLIERS s WHERE sid IN ( ( SELECT c.sid FROM CATALOG c, PARTS p WHERE c.pid=p.pid AND p.color='piros' ) INTERSECT ( SELECT c.sid FROM CATALOG c, PARTS p WHERE c.pid=p.pid AND p.color='sarga' ) ); Rel. alg.? Megoldás: π suppliers.sname (Suppliers (σ parts.color= „piros” (Catalog Parts))) ∩ π suppliers.sname (Suppliers (σ parts.color= „sarga” (Catalog Parts))) 7.3. Iskola – határozzuk meg a kulcsot! Séma: Attribútumok: {Diák, Idő, Terem, Kurzus, Jegy} Függőségi halmaz = {Diák, Idő Terem; Diák, Kurzus Jegy} Megoldás: (Diák, Idő, Kurzus) lesz a kulcsjelölt (minimális, mindent meghatároz)
8
7.4. Jármű – határozzuk meg a kulcsot! Séma: Attribútumok: {Autó, Benzin, Megtett út, Rendszám, Sofőr, Utas} Függőségi halmaz = {Autó Benzin, Utas; Benzin Megtett út; Rendszám Autó} Megoldás: (Rendszám, Sofőr) lesz a kulcsjelölt (minimális, mindent meghatároz)
9