Adatbázis rendszerek I Relációs adatmodell műveleti rész (relációs algebra) ME- GEIAL Dr. Kovács László
Relációs adatmodell strukturális rész tárolási struktúra séma R(m1,m2, ) adatmodell integritási rész érték korlátozás PK, REF, NN, C, UN műveleti rész igényelt adatelem kinyerése relációs algebra művelet orientált relációs kalkulus tulajdonság orientált
A relációs algebra alaptulajdonságai Nyersanyag kod 1253 4433 nev Dió Mogyi ar 783 lejarat 01.I.8 97.II.11 6233 Bab 79 75.X.2 Zárt a relációk halmazára Relációkat relációba képez A műveletek láncolhatók Eredmény kod nev 1253 Dió Imperatív szemléletű A relációk egyes részeit emeli ki Egy vagy kétoperandusú operátorai vannak 4433 Mogyi Az SQL nyelv alapját képezi
A relációs modell elemei A reláció formális felírása lista Reláció értelmezései halmaz Descartes szorzat függvények halmaza U: attribútumok halmaza, A U : attribútum dom(a) : az A attribútum értékeinek halmaza, domain R U : reláció séma r(r) : reláció az R sémához t r(r) : egy rekord t dom(a 1 ) dom(a 2 ) dom(a n ) : A i R r(r) dom(a 1 ) dom(a 2 ) dom(a n )
A relációs modell elemei A reláció formális felírása lista Reláció értelmezései halmaz Descartes szorzat függvények halmaza t : R dom(a i R ) : A i : t(a i ) dom(a i ) r(r) = {t : R dom(a i R ) : A i : t(a i ) dom(a i )} r(r + ) = {r r (R) b B: : b(r) = 1 } bk(r( (r(r)) = 1, ha K R t1,t2 t1,t2 r(r): t1 t2 t2 t1(k) t2(k) = 0 különben
Adatkezelő, adatdefiníciós műveletek Reláció létrehozatala r = new R + rekord felvitele s (r) => r = r s rekord törlése \ f (r) => r = r \ σ f (r)
A relációs algebrai műveletek áttekintése szelekció egy operandusú { projekció kiterjesztés aggregáció csoportképzés két operandusú { join metszet unió osztás különbség
A szelekció művelete Szelekció: a megadott feltételnek eleget tévő rekordok kerülnek át az eredmény relációba jele: σ felt (r) σ X ΘY (r) = { t r t(x) Θ t(y)} AUTÓ rsz tipus szín r1 Fiat zöld r2 Opel kék r6 Mazda piros r4 Skoda kék r9 Suzuki piros szelekció rsz tipus szín r2 Opel kék r4 Skoda kék r6 Mazda piros σ szin= kék OR tipus= Mazda (AUTO) feltétel: szín = 'piros' VAGY tipus = 'Mazda'
A projekció művelete Projekció: a kijelölt mezők kerülnek csak át az eredmény relációba jele: Π mlista (r) Π X (r) = {t(x) r t r} AUTÓ rsz tipus szín r1 Fiat zöld r2 Opel kék r6 Mazda piros r4 Skoda kék r9 Suzuki piros projekció Π kijelölt tipus, mezõk rsz (AUTO) = tipus, rsz tipus Fiat Opel Mazda Skoda Suzuki szín zöld kék piros kék piros
A műveletek kombinálása Az eredmény reláció bemenete lehet egy újabb műveletnek AUTÓ rsz tipus szín r1 Fiat zöld r2 Opel kék r6 Mazda piros r4 Skoda kék r9 Suzuki piros szelekció feltétel: szín='piros' VAGY szín='kék' projekció kijelölt mezõk = rsz rsz r2 r6 r4 r9 Π rsz (σ szin= kék OR szin= piros szin= kék OR szin= piros (AUTO) )
A join művelet Alap Join: két reláció rekordjainak párosai jele: r 1 >< r 2 Descartes-szorzat szorzat r 1 >< r 2 = {(t,s) t r 1, s r 2 } AUTÓ rsz tulaj r1 3 r4 1 r6 4 EMBER id név 1 Laci 2 Ágota 3 János 4 Zoltán összekapcsolás AUTO >< EMBER rsz tulaj id név r1 3 1 Laci r4 1 1 Laci r6 4 1 Laci r1 3 2 Ágota r4 1 2 Ágota r6 4 2 Ágota r1 3 3 János r4 1 3 János r6 4 3 János r1 3 4 Zoltán r4 1 4 Zoltán r6 4 4 Zoltán
A join művelet Szelekciós Join: a két reláció rekordpárosaiból a feltételnek eleget tévő párosokat adja eredményként r 1 >< >< felt jele: r 1 >< felt r 2 felt r 2 = σ felt (r 1 >< r 2 ) felt Natural Join: olyan szelekciós join, mely az azonos elnevezésű mezők értékegyezőségén alapszik jele: r 1 >< = r 2 r 1 >< = r 2 = Π (R1 U R2) R1 U R2) (σ r1.x = r2.x (r (r 1 >< r 2 ))
A join művelet Outer Join: olyan szelekciós join, melyben az illeszkedő pár nélküli rekodok is bekerülnek az eredmény halmazba (üres étékekkel kiegészítve) tipusai: - left outer join - right outer join - full outer join jele: r 1 +>< felt r 2 jele: r 1 ><+ felt r 2 jele: r 1 +><+ felt r 2 Az üres érték szimbóluma: NULL
A join művelet Righr outer join végrehajtása Könyv Könyv >< ><+ kiado=id Kiadó kod cim kiadó 32 c1 1253 46 c2 4463 kod cim kiadó ID nev Kiadó 32 c1 1253 1253 K1 ID nev 46 c2 4463 4463 K3 1253 4433 K1 K2 NULL NULL NULL 4433 K2 4463 K3
A join művelet Semi Join: olyan szelekciós join, melyben az illeszkedő párokból csak a megadott oldal mezői szerepelnek jele: r 1 >< felt r 2 r 1 >< felt r 2 = Π R2 (r 1 >< felt r 2 ) felt R2 tipusai: - left semi join - right semi join felt Az illeszkedő párral rendelkező rekordokat adja vissza
A kiterjesztés művelet Kiterjesztés: a reláció kibővítése származtatott mezőkkel jele: ε mlista (r) Az mező értékének a többi mező értékéből kell meghatározódnia AUTÓ rsz tipus ár kiterjesztés rsz tipus ár r1 Fiat 1200 r2 Opel 930 r6 Mazda 870 r4 Skoda 1500 r9 Suzuki 1400 új mezõ: ár/100 r1 Fiat 1200 r2 Opel 930 r6 Mazda 870 ε ar/100 (AUTO) r4 Skoda 1500 r9 Suzuki 1400 ár/100 12 9.3 8.7 15 14
A halmaz műveletek Unió: azonos sémájú relációk rekordhalmazának egyesítése jele: r 1 r 2 Metszet: azonos sémájú relációk rekordhalmazának metszete jele: r 1 r 2 Különbség: azonos sémájú relációk rekordhalmazának különbsége VERSENYZÕK id név 21 Erika 2 Tibor 4 Zoltán 3 Éva jele: r 1 \ r 2 FIÚK id név 1 2 3 Laci Tibor János különbség 4 Zoltán id név FIUK \ VERSENYZOK 1 Laci 3 János
Az osztás művelete Osztás: a Descartes szorzat inverze, azon legnagyobb reláció, melynek Descartes szorzata r2-vel benne van r1-ben jele: r 1 r 2 HOBBY hobby név foci Laci tenisz Tibor foci János futás Zoltán futás Laci foci Zoltán tenisz Gábor SPORTÁG hobby foci futás HOBBY SPORTAG osztás név Laci Zoltán
Az osztás művelete Osztás levezetése az alapműveletekből: r 1 r 2 = {t t Π R1 R1\R2 R2 R2(r 1 ), t >< r 2 r 1 } a minden kvantorhoz kapcsolódik a jelentése Az eredmény levezetése: Jelöltek: Π R1 r 1 r 2 = Π R1 R1\R2 R2 (r R1\R2 R2 (r (r 1 ) A jó jelöltek szorzata benne van r1-ben: Π R1 A rossz jelöltek: Π R1 R1\R2 R2( ( ( (r 1 ) \ Π R1 ( (Π R1 R1\R2 R2 ( (Π R1 R1\R2 R2( ( ( R2(r 1 ) >< r 2 )\r 1 R1\R2 R2 R1\R2 R2 R2(r 1 ) >< r 2 )\r1) R2(r 1 ) >< r 2
Az aggregáció művelete Aggregáció: a relációból összesítő rekordot állít elő jele: Γ aggregációs-lista (r) aggregációs függvények: SUM(mez.kif) COUNT(mez.kif) MIN(mez.kif) AVG(mez.kif) MAX(mez.kif) AUTÓ rsz tipus ár r1 Fiat 1200 r2 Opel 930 r6 Mazda 870 r4 Skoda 1500 r9 Suzuki 1400 r7 Opel 2570 r11 Fiat 850 r8 Opel 1000 csoportképzés kifejezés: kiírandó: COUNT() Γ count(*) (AUTO) (AUTO) Count() 8
A csoportképzéses aggregáció művelete Csoportképzés és aggregáció: a reláció rekodjait csoportokba rendezi, s minden csoportra egy összesítő rekordot állít elő jele: Γ csoport képzési kifejezés aggregációs-lista (r) Azon rekordok kerülnek egy csoportba, melyekre a csoport képzési kifejezés azonos értékű AUTÓ rsz tipus ár r1 Fiat 1200 r2 Opel 930 r6 Mazda 870 r4 Skoda 1500 r9 Suzuki 1400 r7 Opel 2570 r11 Fiat 850 r8 Opel 1000 csoportképzés kifejezés: tipus tipus Fiat AVG(ár) 1025 Opel 1500 kiírandó: tipus, AVG(ár) Mazda 870 Skoda 1500 Suzuki 1400 Γ tipus, count(*) tipos (AUTO)
Speciális szelekciós operátorok Halmaz és logikai operátorok is élnek: : tartalmaz : nem tartalmaz : minden kvantor : létezik kvantor Al-szelekciók: A szelekciós feltételben is szerepelhet relációs algebrai kifejezés Γ count(*) (σ fiz> (Γ avg(fiz) (DOLG)) (DOLG))
Kifejezés felépítésének lépései 1. Mely relációkból emelhetők ki az igényel információk? 2. Milyen az illesztési feltétel a join esetén? 3. Milyen szűkítések vannak az alaprelációkon? 4. Szükség van-e al-szelekciókra? 5. Szükség van-e csoportképzésre és ha igen, mi alapján? 6. Milyen aggregációs kifejezést kell szerepeltetni? 7. Milyen mezők szerepeljenek az eredmény relációban?
Mintapélda Séma: BOROK(kod, nev, gyarto, fajta, ar) VEVO(vkod, nev, cim) RENDELES(vevo, bor, mennyiseg,datum) 1. Az 5000-nél drágább borok nevei Π mev (σ ar>5000 (BOROK)) 2. A vevők neve és rendelésének összmennyisége Γ nev nev, sum(mennyiseg) (RENDELES >< rendeles.vevo = vevo.vkod VEVO)
Mintapélda 1. azon vevők, akik rendeltek Bikavért Π nev (σ borok.kod = rendeles.bor AND rendeles.vevo = vevo.vkod AND borok.fajta = Bikaver (BOROK >< RENDELES >< VEVO)) 2. Melyik gyártó termel 5-nél több vörös bort Π gyarto (σ count(*)>5 (Γ gyarto gyarto,count(*) (σ fajta= voros (BOROK)))) 3. Az átlagnál drágább borok darabszáma Γ count(*) (σ ar> (BOROK)) (Γ avg(ar) (BOROK))