Professional Documents
Culture Documents
hu
A DBMS komplex SW-HW rendszer, mely adatok magas szintű kezelését szolgálja. A
"magas szintű" jelző igényes felhasználói felületre utal.
Jellemzői:
• nagy adatmennyiség: ez mega-, újabban pedig már terrabyte-os (1012 byte)
adatmennyiséget jelent. A tárolás eszköze lehet diszk, dob vagy CD.
• gazdag struktúra: ez adatmodell felállítását teszi lehetővé. Pl. a ¶ Newton-közelítése 16
jegyre pontosan nem szolgáltat adatbázist, csupán strukturálatlan bitfolyamot. Adatbázisról
akkor beszélhetünk, amikor a biteknek struktúrája és így jelentése van.
• hosszú életciklus: fontos az adatok permanens megőrzése, mert az együtt lévő
adatmennyiség értéket képvisel.
1
Forrás: http://www.doksi.hu
"lekérdezés"
processzor
tranzakció-
kezelő
tárkezelő
DB
adatok
metaadatok
A puffer felépítése:
blokk1 blokk2
2
Forrás: http://www.doksi.hu
A blokk egy ütemben írható/olvasható terület, mérete leggyakrabban 212-214 byte (ez
egy rendszerfüggő paraméter).
A tárkezelő puffer-blokkjai elkülönülésének oka a fizikai adatfüggetlenség elve: ha
igényeinkben változások állnak be, akkor a továbbiakban is használható legyen az adatbázis,
vagyis logikai vázát ne kelljen átszervezni. Célunk tehát az, hogy a fizikai kérdéseket a
többitől nagyrészt függetlenül tudjuk kezelni.
SELECT név
FROM ügyfél Azokra az nevekre vagyunk kíváncsiak az
WHERE egyenleg < 0 AND ÜGYFÉL táblából, akikhez negatív
nemzetiség = 'DOGON' egyenleg tartozik és nemzetiségük "dogon"
(<- afrikai népcsoport).
Lényeges a tábla elérési mechanizmusa is, ami lehet szekvenciális vagy indexelt, esetleg
B-fával megoldott, stb.
3
Forrás: http://www.doksi.hu
A tranzakció-kezelő alapeszközei:
• zárak: egy tranzakció "lelakatol" egy adatot, adatelemet, és biztosítja, hogy más
tranzakció ne dolgozhasson a használt adattal. A tranzakció végeztével a zár feloldódik. A
zárral ellátható adatelemek mérete rendszerenként változik, a méret meghatározása külön
tervezési szempontokkal rendelkezik.
• naplózás: a naplóból végigkövethetők és "elszállás" esetén rekonstruálhatók a végzett
tranzakciók, azaz a DB konzisztens állapotba hozható.
• érvényesítés: a tranzakciók eredményének érvényességét igazolja. Például a "piszkos
adatok" káros hatásait kiszűrő protokollok tartoznak ide.
kér
Kliens folyamat Szerver folyamat
teljesít
A kliens előfeldolgozott SQL kérdést ad a szervernek és táblát kap vissza. Célszerű tehát,
ha a kliens oldal minél több munkát elvégez, hogy a szervertől gyors válaszidőkkel kaphassa
meg az eredményt. A szerverhez való fordulás e módja trendként is felfogható.
1. Naiv felhasználó
Egyszerű lekérdezéseket intéz a rendszerhez vagy alkalmazói programokat indít.
2. DB-programozó
Összetett kérdéseket állít össze, alkalmazói programokat ír. Lehetősége van arra, hogy
árnyaltabban, összetettebben használja ki a rendszer lehetőségeit.
4
Forrás: http://www.doksi.hu
3. DB-tervező
Tevékenységi körébe tartozik a DB séma kialakítása, az adatok szerkezetének
meghatározása, az adatok kapcsolatainak és a fizikai felépítésnek a tervezése.
(Itt húzhatunk egy képzeletbeli vonalat, mert nagy az ugrás a szakmai felkészültségben:)
4. DBMS-megvalósító
Tudja, hogyan kell DBMS-t készíteni, ami már komoly, specializált tudást igényel.
5. Amivel mi foglalkozunk
5
Forrás: http://www.doksi.hu
1. A kezdetek
Az első DBMS termékek a '60-as évek végén jelentek meg. Ezek a file-kezelőkből alakultak
ki, azok szerves folytatásaként.
Az első rendszerek sajátosságai:
• sok kis adatelemmel dolgoztak
• nagy számú, de egyedenként kevés adatot érintő művelettel dolgoztak.
Pl.: repülőjárat-helyfoglalás,
banki rendszerek, számlázás,
vállalati nyilvántartások.
Az első adatmodellek
• Hierarchikus m odell: kiszorulóban van, ami részint fogalmi gyengeségének
következménye.
• Hálós m odell: szorosan kötődik a COBOL nyelvhez. A modell kezelésére a
CODASYL szabvány tartalmaz ajánlásokat. A hálós modell előfordul magyar banki
rendszerekben is.
2. A közelmúlt és jelen
1
Forrás: http://www.doksi.hu
A szelektor kér dés eredménye a "bivalytej" lesz, vagyis az SQL jelen esetben olyan
sorhalmazt (strukturált adathalmazt) ad vissza, amely egy elemből áll (feltéve, hogy a
tábla első 3 sorát nézzük csak).
3. Egyre nagyobb rendszerek: ezek a tipikusan terra byte-os (1012 byte) alkalmazások, melyek
nagy szervezetek adatait kezelik. Bonyolultabb adatformákat használnak (például digitalizált
filmek tárolhatók egy-egy rekordban).
3. Adatbázisok közeljövője
típusok függvények
(metódusok)
Az objektumok az osztályok konkrét előfordulásai, melyeket az OID - az objektum-
azonosító - különböztet meg egymástól, így rendkívül fontos tényező. Az OID egy
2
Forrás: http://www.doksi.hu
2. Megszorítások és triggerek
Ezek egy DBMS aktív elemei, melyek mindig elérhetőek és ha kell, végre is hajtódnak. A
modern DBMS-ekben igen sok aktív elem található.
a.) megszorítás (kényszer, constraint): olyan, a DB-re vonatkozó állítás, amelynek
igazságát a rendszer megköveteli, kikényszeríti. Ilyen megszorítások a rendszerben
deklarálhatók.
Pl.1.: a Személynél a személyi szám a kulcs, amivel az emberek megkülönböztethetők
egymástól. Megszorítás: két személynek nem lehet azonos személyi száma. Az azonos
személyi szám ellenőrzése minden új rekord felvételénél megtörténik, és egyezés esetén a
rendszer hibajelzéssel válaszol, a rekord ekkor nem felvehető (fel kell kínálni a javítás
lehetőségét).
Pl.2.: megszorítás az is, ha a banki egyenleg nem mehet 0 alá.
Ezek a megszorítások a DB konzisztenciájában fontos szerepet játszanak.
b.) t rigger: kódrészlet, amely bizonyos feltétel(ek) bekövetkezésekor automatikusan
végrehajtódik. Triggerekkel az alkalmazásokhoz kapcsolódó teendők könnyen elvégezhetők.
(A triggerek hasonlítanak az operációs rendszerek - pl. a UNIX - démonjaihoz.)
Pl.: – járat törlésekor automatikusan figyelmeztetni kell az operátort;
– havi zárás adatgyűjtését trigger váltja ki a nap végén vagy a hónap utolsó napján.
3. Multimédia-adatok kezelése
A multimédia tárgykörébe sokféle adatforma - pl. video, audio, radarkép, szöveg - esik.
Jellemzően
• sokkal nagyobb és összetettebb adatokat,
• nehezebb elemi műveleteket kell kezelni (pl. két egész szám összehasonlítása egyszerű,
de két (bit)képé már jóval nehezebb),
3
Forrás: http://www.doksi.hu
4. Adathalmazok egységesítése
A törekvés alapja az, hogy szeretnénk sokféle, sok helyen lévő adatot egységesen látni, ami
nagyon nagy munkát jelent. Tipikusan ez az elv vezeti a WorldWideWeb-et, melynek
böngészői egységes látásmód kialakítására törekszenek.
Másik jó példa egy nemzetközi nagyvállalat, melynek különböző részlegei vannak (pl. az
amerikai Sears cég). Gondot okozhat az, hogy az egyes részlegek eltérően kezelnek adatokat -
így például már mértékegységeket használnak. Egyetlen közös adatbázissal többnyire nem
lehet megoldani a problémát, ehelyett egy egységes felületet kell tenni a részlegek fölé:
ezáltal több DB tartalmát kezelik egy nézetből.
Az egységesítés ötlete az adattárház (repository):
egyirányú
DB1 kapcsolat
DB2
.
.
.
adattárház
DBn
időszakos átalakítás,
egységesítés
4
Forrás: http://www.doksi.hu
Az ODL-modellező nyelv
1. Az adatmodellezésről általában
adatmodellező
eszköz DDL
pl. ODL, E/K
A folyamat tehát felfogható úgy, hogy egy "a valóság egy darabjáról" - pl. egy cég
nyilvántartásáról szeretnénk adatmodellt és arról később egy DB sémát, azaz konkrét
adatbázist készíteni. A DB séma már egy tényleges. értelmezhető kód.
A fázisok közötti átmenetek a következők:
a.) adatmodellező eszközöket használva (pl. ODL, E/K) készítjük el az adatmodell
leírását
b.) DDL segítségével alakítható ki a DB séma.
A folyamat legfontosabb része az a.)-ban zajló tevékenység; b.) ebből már nagyrészt
automatikusan adódik.
Az adatmodellező eszköz többé-kevésbé formális jelölésrendszert biztosít adatok,
kapcsolataik és a rajtuk végzett műveletek kifejezésére.
ODL obj. DB
a valóság egy
darabja
relációk relációs DB
E/K
Az ODL elemei:
1
Forrás: http://www.doksi.hu
Az ODL tulajdonságai
• a világot elsősorban objektumokkal írja le. Pl.: Emberek, Termékek, stb.
• az objektumok tartalmuktól független azonosítóval, OID-vel rendelkeznek. (Az objektumos
világban két azonos példány két különböző elem lehet.)
• az objektumokat osztályokba csoportosítja:
– egy adott osztály objektumai hasonlók
– ábrázolt tulajdonságaik (típusaik, jellegzetességeik) azonosak
– képet róluk a rekordsablon alapján kaphatunk.
Példák
1. filmes példa
interface Film {
attribute string cím;
attribute integer év;
attribute integer hossz;
attribute enum Szalag {színes, feketeFehér} szalagFajta; }
Tapasztalatok:
• az attribútumnak van típusa és neve;
• enum: felsorolás típusú
– típusneve: Szalag
– neve: szalagFajta
2
Forrás: http://www.doksi.hu
2. színészes példa
interface Színész {
attribute string név;
attribute struct Cím { string város
string utca} lakcím}
típus
rekordkonstruktor attribútumnév
mező neve
mező típusa
Kapcsolatok leírása
A kapcsolatok (relationship) osztályszinten más objektumhoz való viszonyokat írnak le. Két
alapvető leírási formájuk van:
1. < osztálynév > < kapcsolatnév >, és
2. < kollekció típus > << osztálynév >> < kapcsolatnév >. A kollekció típusa lehet Set, Bag,
List, vagy Array.
Az 1. leírás azt fejezi ki, hogy az objektum az adott típusú (nevű) kapcsolatban van a
megadott osztállyal, a 2. pedig azt, hogy az objektum kapcsolatban van osztályok egy
kollekciójával.
Példák
1. filmes példa (kapcsolat a Film oldaláról)
3
Forrás: http://www.doksi.hu
Film Színész
Berlin fölött az ég Bruno Ganz
Távol s mégis közel Bruno Ganz
Távol s mégis közel Peter Falk
Columbo Peter Falk
Tanulság: egy színész több filmhez is tartozhat, ill. egy filmhez több színész tartozik.
Kapcsolatok osztályozása
Két osztály - pl. C és D - közötti kapcsolat lehet:
a.) egy-több (sok-sok, N:N) típusú: egy C osztálybeli objektumhoz az adott kapcsolatra nézve
a D-ből több tartozhat, és fordítva.
Pl.: C = Film köztük a "szereplők", "szerepel benne" kapcsolatok N:N típusúak
D= Színész }
Ez a kapcsolat-típus a leggyakoribb (strukturálatlan) eset.
Az N:N kapcsolat árulkodó jele az ODL-leírásban a két kollekció-operátor. (Színészek
halmaza, Filmek halmaza - mindkét oldalon több objektum van megengedve.)
b.) több-egy (sok-egy, N:1) típusú: egy C osztálybeli objektumhoz az adott kapcsolatra nézve
legfeljebb egy D-beli tartozhat, de fordított irányban nincs megkötés (egy D-beli több C-
belihez is tartozhat).
Pl.: C = Film köztük a "gyártó" kapcsolat N:1 típusú
D = Stúdió }
Jó példa a gyermek-anya kapcsolat is (egy gyereknek legfeljebb egy anyja lehet, de egy
anyának lehet több gyereke).
Az N:1 kapcsolat árulkodó jele az ODL-leírásban: egyértékű kapcsolat C-nél és
kollekció D-nél.
d.) egy-egy (1:1) típusú: egy C osztálybeli objektumhoz az adott kapcsolatra nézve legfeljebb
egy D-beli tartozhat, és fordítva.
Pl.: C = Stúdió köztük az "elnök" kapcsolat 1:1 típusú, feltéve, hogy egy stúdiónak
4
Forrás: http://www.doksi.hu
D = Személy legfeljebb egy elnöke lehet, és egy személy nem lehet több stúdió
elnöke.
Figyelem! A "legfeljebb egy" és "pontosan egy" nem ugyanazt jelenti. Az 1:1 kapcsolatban
szerencsésebb a "legfeljebb egy"-et kikötni.
5
Forrás: http://www.doksi.hu
interface Szerződés {
attribute integer Gázsi;
realtionship Stúdió gyártóS;
relationship Színész színész;
relationship Film film;}
Típusok az ODL-ben
Az ODL az alaptípusokra és bizonyos építkezési szabályokra (melyeket a bonyolultabb
adatszerkezetek kialakításához használ fel) támaszkodik. Ezen készlettel (adattípusok +
szabályok) rendkívül sokféle feladat megoldható.
Alaptípusok: ide tartoznak az
1. Atomi típusok: a szokásos számítástechnikai adattípusok tartoznak ide, vagyis az egészek
(integer), lebegőpontos számok (float), karakterek (character), karakterláncok (string), logikai
értékek (boolean), felsorolt adatok (enum).
2. Interface típusok: ezeket az interface kulcsszó vezeti be (ilyen pl. a Film).
Típuskonstruktorok: ezek adják az ODL építkezési szabályait. Tegyük fel, hogy T egy típus.
1. Set < T > típus értéke T típusú elemek véges halmaza.
Pl.: Szereplők halmaza a Filmnél.
2. Bag < T > típus értéke T típusú elemek véges multihalmaza, vagyis a halmazban lévő
elemek multiplicitással rendelkezhetnek (az ismétlődés megengedett). Akkor használják,
amikor a Set nem alkalmazható.
3. L ist <T > típus értéke T típusú elemek véges - esetleg üres - listája. A Set-től annyiban
különbözik, hogy benne fontos az elemek helye, sorszáma.
Pl.: string = List < char >
4. Array < T, i > típus értéke T típusú elemek i-hosszú tömbje.
5. Rekordkonstruktor
Adott a T1, ..., Tn (attribútum) típus-sorozat és az
f1, ...., fn mezőnév-sorozat.
Ekkor a Struct N {T1 f1, T2 f2, ... , T n fn} egy N nevű, n komponensű rekordstruktúra.
Az i. komponens (mező) típusa T1, neve fi.
Pl. A Színésznél a Cím egy kétkomponensű struktúra (rekord).
6
Forrás: http://www.doksi.hu
Alosztályok és öröklődés
Az alosztály egy osztály speciális tulajdonságú objektumaiból jön létre (differenciális
specifikációval). Ehhez a tevékenységhez tartozik a szűkítés és a részképzés.
Alosztály jelölése: feltüntetjük a felettes osztály(oka)t.
Film
Rajzfilm Krimifilm
Krimirajzfilm
7
Forrás: http://www.doksi.hu
1. Kulcsok
• Olyan attribútum-halmazok, melyek egyértelműen azonosítják az objektumot. (Ha
ismerjük a kulcsok értékét, akkor az azonosítás elvégezhető.)
• 0 vagy több attribútum lehet kulcs; ugyanekkor több kulcs is megadható.
8
Forrás: http://www.doksi.hu
Példák
1. filmes példa
interface Film (key (cím, év)) {-};
2. dolgozói nyilvántartás
interface Dolgozó (keys dolgAzon, tbSzám) {-}
2. Egyértékűségi megszorítások
Azt rögzítik, hogy egy érték (-kombináció) az adott helyzetben egyedi. Pl. a termék
meghatározza az árat.
Attribútumoknál a kollekció-operátorok mellőzése szolgál az egyértékűség kifejezésére.
5. Általános megszorítások
Általános követelmények, pl. a kapcsolat fokának korlátozása tartozik ide. Megadhatjuk
például, hogy legfeljebb hány színész szerepelhet egy filmben. Ha ez történetesen 10, akkor ez
így írható le:
relationship Array < Színész, 10 > Szereplők;
3. Adatmodellezési alapelvek
9
Forrás: http://www.doksi.hu
1. Valósághű modellezés
• a fontos adatelemek és
• a fontos kapcsolatok is legyenek benne a modellben!
2. A redundancia elkerülése
Ugyanazt a dolgot két vagy több helyen ne jelenítsük meg az ábrázolt modellben. Ez azért
fontos a következők miatt:
• helygazdálkodás: nem ez a legfontosabb szempont, de mérlegelni kell;
• konzisztencia: a két vagy több helyen lévő azonos adatnak minden előfordulási helyén
mindig ugyanolyan tartalmúnak kell lennie. Ha ez nem teljesül, akkor anomáliák lépnek
fel;
• egyszerűség: a redundancia bonyolítja a modellt.
10
Forrás: http://www.doksi.hu
Az egyed-kapcsolat modell
1. Az adatmodellezésről általában
adatmodellező
eszköz DDL
pl. ODL, E/K
A folyamat tehát felfogható úgy, hogy egy "a valóság egy darabjáról" - pl. egy cég
nyilvántartásáról szeretnénk adatmodellt és arról későnn egy DB sémát, azaz konkrét
adatbázist készíteni. A DB séma már egy tényleges. értelmezhető kód.
A fázisok közötti átmenetek a következők:
a.) adatmodellező eszközöket használva (pl. ODL, E/K) készítkjük el az adatmodell
leírását
b.) DDL segítségével alakítható ki a DB séma.
A folyamat legfontosabb része az a.)-ban zajló tevékenység; b.) ebből már nagyrészt
automatikusan adódik.
Az adatmodellező eszköz többé-kevésbé formális jelölésrendszert biztosít adatok,
kapcsolataik és a rajtuk végzett műveletek kifejezésére.
ODL obj. DB
a valóság egy
darabja
relációk relációs DB
E/K
Az E/K modell nem teljeskörű, mert nem tartalmaz műveleteket. Előnye viszont az, hogy
látható formába önti a DB modelljét, vagyis jobban átlátható, mint az ODL formális
leírásmódja. Elsődleges leírást ad, ami könnyen - jórészt gépiesen - finomítható igazi DB
sémáig.
2. Attribútumok
Ezek az egyedek jellemzésére szolgáló egyszerű - azaz egyszerű típusú - tulajdonságok.
(Egyes nézetek szerint attribútum nem l ehet r ekordtípus - aminek az ODL-ben nem volt
akadálya.) Ha az E egyedhalmaz attribútumai rendre az A1,...,Ak attribútumok, akkor a
formális jelöléssel: E(A1, ... , Ak).
Rajzban:
E Ak
.
.
A1 .
A2
cím év
Film
hossz szalagFajta
3. Kapcsolatok
Az egyedhalmazok közötti viszonyok kifejezésére szolgálnak. Jelentös eltérés az ODL-hez
képest az, hogy az E/K modell megenged sokágú kapcsolatokat - nem úgy, mint az ODL, ami
csak kétszereplős kapcsolatokat ábrázol.
Az E1,...,Em egyedhalmazok közti R nevű kapcsolat jelölése: R(E1,...,Em). (Az
egyedhalmazok sorrendjének nincs lényegi szerepe.)
2
Forrás: http://www.doksi.hu
E1
R
Em
E2
.
.
. E3
Példák
1. a Film-Színész kapcsolat:
hossz szalagFajta
2. Nemzetközi munkamegosztás
Cég
Egy cég termékeit több országban is termelheti / értékesítheti. Ez egy m=3 komponensű
kapcsolat.
gázsi
Stúdió
3
Forrás: http://www.doksi.hu
1:1 kapcsolat
Pl.: Személy -
R Stúdióvezetó
E1 E2 kapcsolat ("elnök")
mindkét végén nyíl
N:1 kapcsolat
Pl.: Gyermek -Anya
R kapcsolat ("anyja")
E1 E2
csak egy nyíl
N:N kapcsolat
R
E1 E2 nincs nyíl
Az N:1 (több-egy) kapcsolat értelmes lehet kettőnél több komponensű kapcsolatnál is.
(Lásd: filmes példa - nyíl a Stúdió felé.)
4
Forrás: http://www.doksi.hu
R
E1 E2 => E1
.
. E1-k
.
R' E2-k E2
.
Ek-k .
.
E2
R' - melyet kapcsoló halmaznak szokás nevezni - elképzelhető úgy, mint egy k mutatót
tartalmazó egyedhalmazt. R'-nek gyakran nincs attribútuma (ekkor gyenge egyedhalmazról
beszélünk).
Színész Film
Sz Szerződés F
gázsi
S
Stúdió
5
Forrás: http://www.doksi.hu
angol magyar
Színész
Film
Hangok
Rajzfilm Krimifilm
6
Forrás: http://www.doksi.hu
Pl. a Filmet a címe és a gyártási éve azonosítja, tehát itt a (cím,év) pár az elsődleges kulcs
(amit aláhúzással jelölünk).
Film
2. Egyértékűség
• ajánlás: használjunk egyértékű attribútumokat!
• a NULL érték alapértelmezésben megengedett, kulcsokban azonban nem (aminek nem is
lenne sok értelme, ha jól belegondolunk)
• a NULL érték tiltását külön leírás tartalmazza
• az N:1 jelleget nyilak fejezik ki.
3. Hivatkozási épség
A "pontosan egy" kapcsolatot lekerekített nyílhegy jelöli.
Példák:
1. Egy filmnek kötelezően van egy (pontosan egy) gyártó stúdiója
2. Minden stúdiónak pontosan egy elnöke van, azaz nem létezhet stúdió elnök nélkül.
Egy elnök legfeljebb egy stúdióhoz tartozhat.
Azt szabályozza, hogy egy egyedhez legfeljebb hány másik kapcsolódhat. A példában:
egy flottához legfeljebb 3 hajóraj tartozhat.
Gyenge egyedhalmazok
Gyenge egyedhalmazról beszélünk, ha egy egyedhalmaz egyedei önmagukban nem, csak
kapcsolataikon keresztül azonosíthatók.
7
Forrás: http://www.doksi.hu
Követelmények:
• ha az F egyedhalmaz hozzájárul az E gyenge egyedhalmaz kulcsához, akkor azt az
megfelelő R (N:1) kapcsolattal együtt így kell ábrázolni (F is lehet gyenge
egyedhalmaz):
E R F
szám
név cím
3. Adatmodellezési alapelvek
1. Valósághű modellezés
• a fontos adatelemek és
• a fontos kapcsolatok is legyenek benne a modellben!
2. A redundancia elkerülése
Ugyanazt a dolgot két vagy több helyen ne jelenítsük meg az ábrázolt modellben. Ez azért
fontos a következők miatt:
• helygazdálkodás: nem ez a legfontosabb szempont, de mérlegelni kell;
8
Forrás: http://www.doksi.hu
• konzisztencia: a két vagy több helyen lévő azonos adatnak minden előfordulási helyén
mindig ugyanolyan tartalmúnak kell lennie. Ha ez nem teljesül, akkor anomáliák lépnek
fel;
• egyszerűség: a redundancia bonyolítja a modellt.
3. Megfelelő típusú elemek kiválasztása
Alapkérdések:
• mit reprezentálunk attribútumként?
• mit reprezentálunk kapcsolatként?
A megfelelő típusú elemek kiválasztásának szempontjai:
• az attribútum: egyszerűbb, mint a kapcsolat (hiszen ez direkt köthető alaptulajdonság)
9
Forrás: http://www.doksi.hu
Az átalakításra van egy teljesen gépies út, ami azonban nem adja mindig a legjobb megoldást.
Egyed: E(A1,...,Ak) → R(A1,...,Ak) Reláció
Az egyed egy az egyben átalakítható relációvá (k-oszlopos táblává).
E → R(A1,...,Ak)
A1 ... Ak
Bonyolultabb átalakítás:
E1
Tétel: minden E/K diagram átalakítható hálós diagrammá, azaz felrajzolható kizárólag
kétkomponensű N:1 kapcsolatok (kapcsoló rekordok) felhasználásával. Ez a
megállapítás már az E/K modellben is szerepelt, amikor a több-több kapcsolatok
számunkra kedvezőbb, több-egy kapcsolatokká való átalakításáról beszéltünk.
1
ez egy innen-onnan összeszedett tétel, a témával kapcsolatban ezt találtam!
1
Forrás: http://www.doksi.hu
2
Forrás: http://www.doksi.hu
E/K Hálós
SZ_Á
Szállító Ár'
TERÁR
Ár egys_ár Termék
TERREND
termék Rendelés
SZEMREND
Személy
Rendelés
szám menny
Megrendelő
Állítás: minden hálós séma átírható hierarchiákká (amely műveletben általában VRT-kre is
szükség van).
Az állítás bizonyítását egy példán keresztül mutatjuk be:
A D A
B C E B C D
vD vB E vE
3 vA
Forrás: http://www.doksi.hu
B A B D
A C vA vA vC
A módszer elvileg jó, de nem ad túl értelmes megoldást. (Hármas lépcsőben nemigen
kérdezünk.)
4
Forrás: http://www.doksi.hu
1. Alapfogalmak
A fizikai szervezés célja, hogy egy rekordokból álló állomány kezelése megoldható legyen a
következő műveletekkel: beszúrás, törlés, keresésé, módosítás. Ez a külső táras (diszkek,
dobok) adatkezelés kérdésköre.
menedzsment maradék
információk fej rek1 ... rekn
• blokk /
rekord
• kötött r ekord / bl okk: mutat(hat) rá mutató. (Ellentéte: szabad rekord / blokk.) Pl. a 2-3
fáknál a csúcsvágás művelete nem végezhető korlátok nélkül, mert "lógó", semmibe mutató
pointerek keletkezhetnek.
• rekord: kétféle lehet
– rögzített formátumú (ez a tipikus eset): a mezők száma és hossza fix. Ekkor a rekord
felépítése:
fej mező1 mező2 ...
menedzsment fix
információk
1
Forrás: http://www.doksi.hu
2
Forrás: http://www.doksi.hu
Film
Cím Év ... Szereplők
Film
Cím Év ... Szereplő1 ...
Film
Cím Év ... Szereplő_mutató
... Szereplő-lista
Film
Cím Év ... Szereplő1 ... SzereplőC
Szereplő-lista
• kulcs: a fizikai szervezés is ismeri a kulcsok fogalmát, de az eddig megismerthez képest más
jelentéssel ruházza azt fel. A kulcs bizonyos kitüntetett mezők összessége, ami a keresés
alapjául szolgál és gyakran - de nem mindig - meghatározza a rekordot.
• elérési módok:
– elsődleges elérés: a rekordok keresése, elérése elsődleges kulcs szerint történik.
– másodlagos elérés: ide tartozik a rekordok elérésének minden más módja.
Az elérési módok tárgyalásánál szokás az állományok "invertálásáról" beszélni. Ha egy
állomány nem csak az elsődleges kulcs (pl. név) adta logikával áll rendelkezésünkre, hanem
valamilyen másodlagos kulcs szerint is, akkor azt mondjuk, hogy az állomány az adott
másodlagos kulcs (pl. telefonszám) szerinti inverzével dolgozhatunk.
Ezek a következők:
1. Kupac (heap) (az alábbi kettőről a következő tételben lesz szó:)
2. Hash
3. Indexelt szervezés.
1. Kupac (heap)
Általában kis állományok fizikai szervezésére szolgál.
Az állomány lapjai így helyezkednek el:
...
új rekord
Új r ekord b eillesztése az utolsó rekord utáni első szabad helyre történik. A módszer a
törlést "törölt" bit használatával oldja meg. A keresés elérés-folytonos, az alkalmazott
operációs rendszertől függetlenül van megoldva a DBMS által. A rendszer a rekordot az
állomány elejétől keresi mindaddig, míg meg nem találja (legrosszabb esetben az sikertelenül
az állomány végére ér).
• A sikeres keresés általánosan a blokkok felét érinti;
• a sikertelen keresés általánosan az összes blokkot megnézi.
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
Ezek a következők:
1. Kupac (heap) (erről az előző rételben már volt szó)
2. Hash
3. Indexelt szervezés.
2. Hash-szervezés
Ábrázolva:
0
.
. vödör
.
i. ...
.
.
.
B1
vödörkatalógus
Ötlete: a szófa és a vödrös hash-elés ötvözete segít. h(k)-t fogjuk fel úgy, mint egy
bitsorozatot.
A szerkezet így épül fel:
vödör1 azon rekordokat tárolja, melyekre h(K) = 00...
0
00...
mindegy
0
1
vödör2
01...
1
vödör3
1...
A vödrök itt is lap-láncok, de méretük fix (bár rendszerenként más és más lehet).
Keresés: h(K) bitjeit olvasva lehet megtalálni a kívánt vödröt és benne a megfelelő lapot.
Kezdőállapot:
vödör1
0
0...
A rendszer fenntart egy-egy vödröt a 0-
1 val és 1-gyel kezdődő hash-függvényű
vödör2 lapoknak.
1...
Ha egy vödör megtelik, akkor szét kell vágni. Például a 01... kezdetű, 2-es számú vödör
telt meg. Ebből csinálunk két vödröt a 010... és 011... -gyel kezdődő lapok számára.
2
Forrás: http://www.doksi.hu
d' a lokális m élység. Pl. d'=3=d => a katalógus elemeit címző háromjegyű cím
mindhárom bitjére szükség van a vödörben; benne minden rekord 000-val kezdődik. Ha d'=2,
akkor az azt jelenti, hogy itt elég 2 bit a rekord eléréséhez, elhelyezéséhez.
A szervezés során mindvégig igaz, hogy d<= d'.
Tehát a globális mélység a használható, a lokális mélység pedig a használt bitek számát
jelenti.
3. Indexelt szervezés
3
Forrás: http://www.doksi.hu
Az indexelés fajtái:
a.) Egyszintes ritka indexelés (ISAM)
• az index rekordok kulcs szerint rendezve vannak az index állományban elhelyezve;
• mutatójuk a fő állományba mutat.
Kapcsolat a mutató és a mutatott rekord között:
K m index rekord
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
index állomány
...
A ritka index szabad és kötött változata között a költség szempontjából drámai különbség
van.
6
Forrás: http://www.doksi.hu
Ezek a következők:
1. Kupac (heap)
2. Hash
3. Indexelt szervezés (ennek további módjairól lesz most szó).
2. Indexelt szervezés
Az indexelés fajtái:
a.) Egyszintes ritka indexelés (ISAM)
b.) Egyszintes ritka indexelés - statikus változat (ezekről már az előző tételben esett szó)
Tulajdonságok:
• minden lap legalább félig telítve van (ez alól csak az egész kicsi szerkezetek jelentenek
kivételt);
• a gyökér-levél utak egyforma hosszúak (ez egy kiegyensúlyozottsági tényező);
• a keresés logaritmikus; a logaritmus alapszáma attól függ, hogy hány index rekord fér
egy lapra (tehát nem az elágazások száma befolyásolja);
• a módszer teljesen dinamikus - elkerüljük ezáltal, hogy egy nagy állomány közepébe
ugorjunk.
fő állomány
2
Forrás: http://www.doksi.hu
A sűrű indexelés tehát önmagában nem egy új elérési technika, hanem csak egy
segédeszköz a fő állomány felszabadítására. Ez "szabadság" a módszer fő előnye, hiszen a
sűrű index állomány rekordjait úgy mozgathatjuk, ahogy csak akarjuk.
Ha fontos számunkra a fő állomány rekordjainak különböző kulcsok szerinti gyors
elérése, akkor a fenti sűrű indexes szervezés egyenesen el sem kerülhető, nem csak praktikus
szempontok miatt van rá szükség.
3
Forrás: http://www.doksi.hu
fő állomány
[név, telefonszám, ...]
A sűrű indexek használatának hátránya, hogy a fő állomány fölé egy plusz szintet iktat,
ami azt jelenti, hogy extra lapelérésekre van szükség. A helyzet azért nem olyan rossz, mert ez
a veszteség nem mindig számottevő. Ez abból ered, hogy az index rekordok gyakran sokkal
kisebbek, mint a fő állomány rekordjai - hiszen csak rekord kulcsokat és mutatókat
tartalmaznak -, és így több fér belőlük egy lapra. Ha például B-fával szervezzük az indexet,
akkor a fa alapja keskeny lesz és a kiegyensúlyozottsági tulajdonságból fakadóan a magassága
sem lehet túl nagy. Mindebből az következik, hogy az extra lapelérések száma sem lesz
jelentősen nagy, vagyis a keresési sebesség döntően nem csökken.
Módszerei:
1. Többszörös (másodlagos) indexek alkalmazása
Többféle szempont szerint férünk hozzá az állományhoz, és ennek megfelelően többszörös
indexeket használunk. (Például egy személy adatainak lekérdezése történhet név, cím, vagy
telefonszám alapján is.) Ez egy célravezető, de nagyon sok extra munkát igénylő módszer
(gondoljunk csak a többszörös indexek követésére és a beillesztések elvégzésére).
K = m1 m2 ...
Ha pl. egy kérdésben m4 és m9 ismert (ezek lehetnek: szemszín és hobby), akkor h4(m4) és
h9(m9) jelentősen leszűkíti a keresést, a szóbajövő rekordok körét.
5
Forrás: http://www.doksi.hu
1. Bevezetés
A DBTG-ajánlás részei:
• hálós DDL
• DML és extra kiegészítések (például egy, a jó hatékonyságú DB-k létrehozásában fontos
szerepet játszó hasznos adatszerkezet.)
I. Adattípusok
• (logikai) r ekord t ípus, mely mezőkkel rendelkezik (ez megfeleltethető az ODL
attribútumokkal rendelkező objektum fogalmának illetve az E/K modell
egyedhalmazainak)
• kapcsolat: a modellben kizárólag bináris - azaz kétkomponensű - több-egy kapcsolatok
engedélyezettek. Ezeket a bináris N:1 kapcsolatokat külön el is nevezték: ezek a (DBTG)
SET-ek.
Ábrázolás:
rekordtípus Lényeges, hogy a rekordtípusok közötti
E
kapcsolatokat névvel el kell látni!
kapcs_név Az attribútumokat - az ajánlás szerint -
rajzban általában nem jelöljük.
E' rekordtípus
A hálós ábra egy irányított gráf.
Tétel: minden E/K diagram átalakítható hálós diagrammá, azaz felrajzolható kizárólag
kétkomponensű N:1 kapcsolatok (kapcsoló rekordok) felhasználásával. Ez a
megállapítás már az E/K modellben is szerepelt, amikor a több-több kapcsolatok
számunkra kedvezőbb, több-egy kapcsolatokká való átalakításáról beszéltünk.
1
Forrás: http://www.doksi.hu
SZ_Á
Szállító Ár'
TERÁR
Ár egys_ár Termék
TERREND
termék Rendelés
SZEMREND
Személy
Rendelés
szám menny
Megrendelő
01 Dátum
03 Év ...
03 Hó ...
03 Nap ...
01 ...
2
Forrás: http://www.doksi.hu
– CALC: egy eljárást adunk meg a ... CALC < fnév > USING < mezőlista >. Az eljárás
lehet például hash-elés, ahol a USING kulcsszó után azt kell megadni, hogy mik alkotják a
hash-elés kulcsait (pl. egy SZCÍM, SZNÉV összetett kulcs). Tényleges kulcs esetén ki kell
kötni, hogy a kulcs-ismétlődés nem megengedett: DUPLICATES NOT ALLOWED.
– VIA SET: az rekordokat kapcsolataikra tekintettel léve kell elhelyezni.
• virtuális mezők: ez a modellben a redundancia-kezelés eszköze.
Pl. az Ár kapcsolat N:1 típusúvá tételéhez mező(ke)t kell kölcsönvennünk a szülőtől,
azaz a TERÁR kapcsolat révén a Termék TNÉV mezőjét az Árba is betesszük. Ezt a mezőt
viszont felesleges lenne külön, redundánsan tárolni, ezért virtuálisnak vesszük fel.
Tehát az általános eljárás szerint a virtuális mezőknél egy N:1 kapcsolat mentén a
szülőtől vesszük át a szükséges mezőt. A mező pontos forrását fel kell tüntetni. A DBTG
terminológiában a szülőt OWNER-nek, a gyermeket MEMBER-nek nevezik:
OWNER (szülő)
MEMBER (gyermek)
Példák:
1. Logikai képe:
Rezeda Kázmér
Szállító Termék
rend1 rend2 ... rendn
átalakítva:
3
Forrás: http://www.doksi.hu
Dolgozó DP Projekt
Mintapélda: az E/K - hálós átalakításnál látott modell DDL-szerű sémája (több részletet
mellőzve):
RECORD SZÁLLÍTÓ.
LOCATION MODE IS CALC HASH1 USING SZCÍM, SZNÉV
DUPLICATES NOT ALLOWED.
01 SZNÉV CHAR(20).
01 SZCÍM CHAR(20).
RECORD ÁR.
LOCATION MODE IS VIA TERÁR SET.
01 ÁR REAL.
01 TNÉV VIRTUAL
4
Forrás: http://www.doksi.hu
RECORD TERMÉK.
LOCATION MODE IS CALC IND1 USING TNÉV.
01 TNÉV CHAR(20).
RECORD RENDELÉS.
LOCATION MODE IS VIA SZEMREND SET.
01 SZÁM INTEGER.
01 MENNYISÉG REAL.
RECORD SZEMÉLY.
LOCATION MODE IS CALC IND2 USING NÉV.
01 NÉV CHAR(20).
01 CÍM CHAR(30).
01 EGYENLEG REAL.
.........................................................................................................................................
(DBTG) SET SZ_Á. (DBTG) SET TERÁR.
ORDER IS SORTED. ORDER IS NEXT.
OWNER IS SZÁLLÍTÓ. OWNER IS TERMÉK.
MEMBER IS ÁR. MEMBER IS ÁR.
SET SELECTION IS MANUAL. SET SELECTION IS AUTOMATIC
ASCENDING KEY IS TNÉV. THRU OWNER USING TNÉV.
RETENTION IS MANDATORY. RETENTION IS MANDATORY.
5
Forrás: http://www.doksi.hu
1. Bevezetés
A DBTG-ajánlás részei:
• hálós DDL
• DML és extra kiegészítések (például egy, a jó hatékonyságú DB-k létrehozásában fontos
szerepet játszó hasznos adatszerkezet.) Most ezekről lesz szó.
2. A hálós DML
A futtatási környezet egy nagyon szigorú interface által van meghatározva. Ez az UWA
(User's Work Area), ami három részből áll:
kurrencia mutatók
rekord sablonok
program változók főleg COBOL változók, mivel a COBOL az ajánlás fő gazdanyelve.
Az UWA részei:
• Kurrencia (a ktualitás) m utatók: mutatók (DBKEY) egy rekordra. Lényegében az
utoljára elért rekord DB-kulcsát jelentik.
Fajtái:
Programkurrens (CRU, Current of Run Unit): az utoljára elért rekord DB-kulcsa
Rekord kurrense: minden T rekordtípushoz mutatót jelent egy T típusú rekordra. Azaz
az utoljára elért rekord DB-kulcsa a T-beliek közül.
Kapcsolat kurrense: minden S set-hez mutatót jelent egy S-ben érintett rekordra (szülő
vagy gyermek). Azaz az utoljára elért rekord DB-kulcsa az S-beliek közül.
Az ORDER I S után álló NEXT kulcsszó a kurrensre vonatkozik, a következő elem a
kurrencia mutató alapján jelölődik ki.
A gyűrű-szerkezet alapján kialakítható gyűrűkből álló gyűrű is, aminek szintén van
kurrens eleme (ami most egy gyűrű lesz).
1
Forrás: http://www.doksi.hu
• Rekord sablonok: minden T rekord típushoz helyet jelent egy rekord leírására.
Pl.: SZEMÉLY(NÉV, FIZETÉS, CÍM)
Személy-keret:
NÉV FIZETÉS CÍM külvilág
DB
Tehát a rekord sablon a rekord kitöltésére szolgáló közbülső hely; a rekord ezen közbülső
helyen keresztül kapcsolódik a DB-hez és a külvilághoz.
Hivatkozás mezőre: Pl. SZEMÉLY.FIZ vagy
FIZ IN SZEMÉLY (egy más dialektus szerint).
2
Forrás: http://www.doksi.hu
3
Forrás: http://www.doksi.hu
1. Bevezetés
Szemben a hálós modellel ez az adatmodell úgymond "szervesen" alakult ki, nem egy
bizottság munkájának eredménye. Például a hierarchikus adatmodellt használja az IMS
(IBM), illetve a SYSTEM 2000 (egyetemi fejlesztés).
Alapötlete az, hogy próbáljuk meg a világ - esetleg vélt - hierarchiái mentén megszervezni
a DB-t. Ilyen hierarchiát követnek az emberi szervezetek, közösségek, vagy a hierarchikus
világmodellek (pl.: állatok).
A hierarchia többé-kevésbé olyan hálós modellnek tekinthető, melynek komponensei
(felfelé) irányított gyökeres fák (azaz nem tartalmaz köröket). Az, hogy csak "többé-kevésbé"
az, abból ered, hogy a kapcsolatok több-egy jellege rekord, és nem típus-szinten igaz.
Például: a film-színész kapcsolatban (több-több jellegű) annyi Marlon Brando-rekordot kell
felvenni, ahány film van. Óhatatlan tehát a redundancia, amit úgy kell megoldani, hogy a
valóságban csak egy igazi rekordot tartunk nyilván, a többi rekord pedig virtuális lesz.
ORSZÁG
rekordtípus
kapcsolat
MEGYE
TELEPÜLÉS
1
Forrás: http://www.doksi.hu
Színész
VRT (virtuális rekordtípus)
Színész
Film
VRT (virtuális rekordtípus)
Általánosan:
E1 e1,e2,... e1 e2
E2 f1,f2,... f1 f2 f2 f4
Állítás: minden hálós séma átírható hierarchiákká (amely műveletben általában VRT-kre is
szükség van).
Az állítás bizonyítását egy példán keresztül mutatjuk be:
2
A D A
Forrás: http://www.doksi.hu
B C E B C D
vA
Az átíráskor minden rekordtípust és nyilat ábrázolunk.
Kijelöljük az első gyökeret - ez általában egy nagy be-fokszámú rekordtípus. (Itt: A)
Az átalakítással gyakran nem kapunk "szép" fát, sokszor nem is lehet a feladatot egyetlen
fával megoldani. Ezért célszerű vagy szükséges is lehet több gyökeret választani.
B A B D
A C vA vA vC
A módszer elvileg jó, de nem ad túl értelmes megoldást. (Hármas lépcsőben nemigen
kérdezünk.)
3. A hierarchikus DDL
3
Forrás: http://www.doksi.hu
4
Forrás: http://www.doksi.hu
1. Bevezetés
Szemben a hálós modellel ez az adatmodell úgymond "szervesen" alakult ki, nem egy
bizottság munkájának eredménye. Például a hierarchikus adatmodellt használja az IMS
(IBM), illetve a SYSTEM 2000 (egyetemi fejlesztés).
Alapötlete az, hogy próbáljuk meg a világ - esetleg vélt - hierarchiái mentén megszervezni
a DB-t. Ilyen hierarchiát követnek az emberi szervezetek, közösségek, vagy a hierarchikus
világmodellek (pl.: állatok).
A hierarchia többé-kevésbé olyan hálós modellnek tekinthető, melynek komponensei
(felfelé) irányított gyökeres fák (azaz nem tartalmaz köröket). Az, hogy csak "többé-kevésbé"
az, abból ered, hogy a kapcsolatok több-egy jellege rekord, és nem típus-szinten igaz.
Például: a film-színész kapcsolatban (több-több jellegű) annyi Marlon Brando-rekordot kell
felvenni, ahány film van. Óhatatlan tehát a redundancia, amit úgy kell megoldani, hogy a
valóságban csak egy igazi rekordot tartunk nyilván, a többi rekord pedig virtuális lesz.
2. Példa
TREE BIZTOSÍTÓ
Fiók a gyökér RECORD FIÓK ROOT.
01 FNÉV.
01 FCÍM.
Ügynök RECORD ÜGYNÖK PARENT=FIÓK.
01 NÉV.
01 KÖTÉS. (* az ügynök által eladott biztosítások
éves díjtételeinek összege *)
Ügyfél
RECORD ÜGYFÉL PARENT=ÜGYNÖK.
01 ÜNÉV.
01 ÜCÍM
Elég hatékonyan működik, viszont bizonyos dolgokat elég nehéz benne kifejezni.
Lekérdezések:
• GET LEFTMOST <T rekordtípus> WHERE <feltétel>
Egy konkrét adatbázis felfogható úgy, mint egy rekordokból álló irányított erdőt. Ebben az
erdőben értelmes a "balról-jobbra" kérdés, de a feltétel nem lehet akármilyen.
Típusfa:
T
• A gyökértől T-hez vezető út van.
1
Forrás: http://www.doksi.hu
• GET NEXT
Egy lépést jobbra lép a fában, ha tud.
Vigyázni kell azonban, mert a jobbra lépés során elhagyhatja a szülőt vagy akár magát a
rekordtípust is.
2
Forrás: http://www.doksi.hu
szükséges, mert elhagyása esetén esetleg más ügynök ügyfeleit is kilistáznánk. Egyszerre egy
rekordot kapunk meg, ezért ezt a DML-t nevezik "egyszerre egy" típusú nyelvnek is.
Ahogyan a hálós modellben láttuk, itt is van rekordsablon, kurrencia, mezőkre való
hivatkozás. A szülő átlépésének elkerülése pedig WHERE-rel lehetséges. Létezik a kurrens
szülő fogalma is: a GET-tel vagy GET NEXT-tel legutoljára elért felmenő típusú rekord.
• GET NEXT WITHIN PARENT
Jobbra lép, megtartva a kurrens szülőt.
Rekord beillesztése:
• A rekordot a sablonjában összerakjuk,
• majd kiadjuk a következő utasítást:
STORE / INSERT <rekordtípus> WHERE <feltétel>
Az utasítás beilleszti a rekordot a legbaloldalibb alkalmas helyre.
4
Forrás: http://www.doksi.hu
Amíg a hálós modellnél a fizikai tárolás alapját a gyűrű jelentette, addig itt a szervezés alapja
a DB rek ord. Az alapötlet az, hogy a DB rekordokat egységként kezeljük. Ezáltal rekord-
szinten tükröződik a séma fa-szerkezete. A gyökértípusra szervezünk elsődleges elérést (pl.
hash-elést, indexelést, stb.) Például az előbbi biztosítási sémánál a gyökér a FIÓK
vödör-
katalógus
DB-rekord
A DB rekord több láncolt lapból áll. Fentről lefele a hash-szervezés gyors mozgást biztosít.
a1 a2 a3
b1 b 2 c1 c2
r a1 0
a2 b 1 a3
• 2 mutató / rekord;
• de gyorsabb a navigáció.
5
Forrás: http://www.doksi.hu
1. Bevezetés
Példa: FILM
Def.: Reláció
A reláció egy síkbeli tábla, ami pedig egy direkt szorzat egy részhalmaza, amelyben a
sorok (rekordok) sorrendje lényegtelen. Felfogható úgy is, mint Attribútum -> É rték
függvények halmaza, ahol az oszlopok (= attribútumok) sorrendje irreleváns.
A fenti példában:
FILM ∈ CÍM × ÉV × SZALAGFAJTA × ...
r(CÍM)="Óz"
Def.: Nézet
1. Szintén egy síkbeli táblázat:
R
A1 A2 ... Ak
R(A1,A2,...Ak)
1
Forrás: http://www.doksi.hu
1. halmazműveletek:
• únió (Jele: ∪)
Adott két reláció: R és S.
R∪S az R és S sorait jelenti.
Példa:
R A B S A D R∪S A ?
a a a a a a
a c a d a c
b c a c b c
b b a d
b b
• különbség (Jele: \)
Adott két reláció: R és S.
R\S elemei R azon sorai lesznek, amelyek nem szerepelnek S-ben.
R\S örökli az R oszlopszámát, attribútumait, típusait.
R\S A B
b c
2
Forrás: http://www.doksi.hu
R×S A B A' D
a a a a
... ...
b b
a c a a
... ...
2. relációs műveletek :
• szelekció (Jele: σF(R) 1)
A szelekció egy adott R relációra és F formulára vonatkozik.
σF(R) az R reláció azon sorait jelenti, amelyekre F formula igaz. Örökli a típusokat és
attribútumokat.
F alakja (Codd eredeti javaslata szerint): AΘB, AΘc, cΘA, ahol:
• A és B attribútumnevek,
• c egy konkrét érték,
• Θ pedig elemi összehasonlító operátorok halmaza: Θ ∈ {=,≠, <, >,≤,≥}.
Ezeket az F formulákat atomoknak nevezzük. Az atomok kombinálhatók a ¬∧∨ jelekkel.
A szelekció eredménye sosem egy elemi objektum, hanem általános esetben egy
reláció, azaz sorok kollekciója.
1
σ, azaz szigma
3
Forrás: http://www.doksi.hu
Példa: ΠA(R)
A
a
b
• metszet (Jele: ∩)
Adott két reláció: R és S.
R∩S sorai azok a sorok lesznek, melyek R-nek és S-nek is sorai.
Formálisan: R∩S=R\(R\S)=S\(S\R)
R∩S A B
a a
a c
D C x 2 a b 2 a
a 2 a b 2 x
b 3 A B C D a c 3 b
• félillesztés (Jele: )
Technikai szerepe van a lekérdezési optimalizátorokban (elosztott rendszerekben).
R S = ΠR(R S).
Példa: R S
R.C<S.C
A B R.C D S.C
a b 2 b 3
Def.: Aggregáció
Az összesítő műveleteket, melyek egy relációból elemi értéket állítanak elő,
aggregációknak nevezzük. Például.: AVG (átlag), MIN (minimum), MAX (maximum), CNT
(számlálás), SUM (összegzés).
– létezik ugyan az attribútum-érték, de nem ismerjük (ez a megengedő álláspont), vagy hogy
– az érték nem létezik (ez a nem megengedő álláspont).
Példa:
R S R S
A B B C A B C
a b b d a b d
a c e e a c NULL
Példa:
R S A B C
a b d
a c NULL
NULL e e
Példa: DIÁK(Név,Témavezető,Tanszék)
TANÁR(Név,Tanszék,Beosztás)
6
Forrás: http://www.doksi.hu
Az átalakításra van egy teljesen gépies út, ami azonban nem adja mindig a legjobb megoldást.
Egyed: E(A1,...,Ak) → R(A1,...,Ak) Reláció
Az egyed egy az egyben átalakítható relációvá (k-oszlopos táblává).
E → R(A1,...,Ak)
A1 ... Ak
Bonyolultabb átalakítás:
E1
7
Forrás: http://www.doksi.hu
Sor- és oszlopkalkulus
1. Sorkalkulus
A sorkalkulus egy logikai jellegű lekérdező formalizmus. Alapja a QUEL-nek, és használatos
belső reprezentáns lekérdező nyelvként.
A sorkalkulus sorváltozókat használ. Ezek tipikus jelölése: t vagy t(k), ahol k jelöli az
oszlopok vagy mezők számát. Ezek a reláció egy sorát jelölik, azaz oda helyettesítődnek be.
t[i]-vel a t sorváltozó i-edik komponensét jelöljük.
Példa:
R t=t(2)=(Rezeda K.,Fő u.)
Név Cím t[1]=Rezeda K.
Rezeda K. Fő u. t[2]=Fő u.
... ...
x kötött: ∫f(t)
1
Forrás: http://www.doksi.hu
Def.: A sorkalkulus által kifejezett reláció: azon t-k tartoznak bele, amelyekre ϕ(t) teljesül.
Vagyis a sorkalkulus által kifejezett reláció: {t; ϕ(t)}, ahol t egy sorváltozó, ϕ pedig egy
megengedett formula, melynek t az egyetlen szabad változója.
Példa: a relációs adatmodell műveleteinek leírása a sorkalkulussal
Legyen R (k-oszlopos) és S (s-oszlopos) egy-egy alapreláció.
1. R={t(k), R(t)}
S={u(s), S(u)}
2. R és S úniója kifejezhető sorkalkulussal, ha k=s:
R∪S={t(k); R(t)∨S(t)}.
3. R és S metszete kifejezhető sorkalkulussal, ha k=s:
R∩S={t(k); R(t)∧S(t)}.
4. R és S különbsége (nem kell a k=s-et feltételezni!):
R\S={t(k); R(t)∧¬∃u(s)(S(u)∧u[1]=t[1]∧...∧u[k]=t[k])}.
5. R és S direkt szorzata (k≠s):
R×S={t(k+s); ∃u(k) ∃v(s)(R(u)∧S(v)∧t[1]=u[1]∧...∧t[k]=u[k]∧
t[k+1]=v[1]∧...∧t[k+s]=v[s])}.
6. Szűrés, szelekció (σF):
σA1<3∧A2=c(R) ={t(k); R(t)∧t[1]<3∧t[2]=c}.
7. Vetítés (Π):
ΠA1,...,Am(R) ={t ; ∃v (R(v)∧v[1]=t[1]∧...∧v[m]=t[m])}.
(m) (k)
Megj.: Az, hogy egy reláció véges inputtal rendelkezik, öröklődő tulajdonság. Ennek
megfelelően a relációs algebra véges bemenethez véges kimenetet szolgáltat. A
sorkalkulusra ez nem mindig igaz. Pl. gondot okoznak a {t(k); ¬R(t)}típusú relációk
(ahol R alapreláció), mert nagyon nagy méretű lehet az eredményük.
2
Forrás: http://www.doksi.hu
2. Oszlopkalkulus
reláció A B ... D
sorváltozó
oszlopváltozó
Alapformulák
• R(u1u2...uk) egy k-oszlopos alapreláció, amelyben az ui oszlopváltozók szerepelnek.
• uΘv,uΘc,cΘu, ahol u és v oszlopváltozók, c egy érték, és Θ elemi összehasonlító operátor.
Az építkezés ezekkel az alapformulákkal és a ¬∧∨∀∃ jelekkel történik, ugyanúgy, ahogy a
sorkalkulusnál.
3
Forrás: http://www.doksi.hu
1
az ekvivalencia jele: ↔
4
Forrás: http://www.doksi.hu
Legyen {t(m), ϕ}egy biztonságos sorkalkulus reláció. Relációs algebrai kifejezést kell
találni DOM(ϕ)m∩R'-re. De a biztonságosság miatt ez R'-vel egyezik meg, és ezzel
állításunkat igazoltuk.
5
Forrás: http://www.doksi.hu
2
Forrás: http://www.doksi.hu
Példa:
Rendelés Szám Név Termék Mennyiség
Kiss zab _x
P. zab ≥x
A QBE további eszköze a feltétel-doboz (cond. box), amibe olyan feltételek kerülnek,
amelyek a táblázatba nem írhatók be.
Pl.:
Rendelés Szám Név Termék Mennyiség
P.UN brokkoli
... ...
P.ALL P.ALL
Azok nevét kapjuk meg - egyszeresen -, akik brokkolit rendeltek. Minden (Termék,
Mennyiség) párt megkapunk.
Ügyfél Egyenleg
P.AVG.ALL
3
Forrás: http://www.doksi.hu
– KEY: "Y" (yes) és "N" (no) bejegyzésekkel kijelöltük, hogy a (Tnév, Terméknév) pár
legyen a kulcs.
– TYPE: megadtuk az attribútumok típusát
– DOMAIN: a megadott bejegyzés korlátozza a változókat, azaz a változóknak saját
értékkészletükön belül kell mozogniuk (a Tnév a NEVEK halmazából veheti fel
értékét).
– INVERSION: általában specifikálhatunk másodlagos elérési kulcsokat is (most nem
éltünk ezzel a lehetőségünkkel).
4
Forrás: http://www.doksi.hu
A fentiek alapján kimondhatjuk, hogy a QBE relációsan teljes nyelv. (Azaz megvalósítható
benne az únió, direkt szozás, vetítés, szelekció (F-et cond. box-ban kell felírni) és különbség
(törléssel kell megoldani).)
5
Forrás: http://www.doksi.hu
1
Forrás: http://www.doksi.hu
Típusok:
– I1, I4, I8: egészek 1,4,8 byte-on ábrázolva
– F4, F8: lebegőpontos számok 4 ill. 8 byte-on
– Cn: n (fix) hosszúságú karaktersorozat
– Varchar(n) és Text(n): legfeljebb n-hosszú string
– Date: dátum típus
– Money: 16 jegyű szám, az utolsó 2 jegy tizedesjegy (pénzösszegek tárolására).
Tárolási szerkezetek:
– ISAM, CISAM: index-szekvenciális (ritka index) [C: compact, azaz kompaktabb,
tömörebb, és ezért lassabb változat]
– HASH, CHASH
– BTREE, CBTREE
– HEAP: ez az alapértelmezett szerkezet.
• Új indexehozása:
INDEX ON <relációnév> IS <indexnév> (<mezőnév>);
2
Forrás: http://www.doksi.hu
Aggregációk
Ezek már a korábban megismert AVG, CNT, SUM, MIN, MAX.
A különbség csak annyi, hogy a feltételvizsgálat aggregáción belülre tehető, sőt:
csoportosításra is alkalmas.
Pl.: RETRIEVE MAX(E.FIZETÉS);
RETRIEVE MAX(E.FIZETÉS WHERE E.CÍM='Fő u.');
RETRIEVE MAX(E.FIZETÉS BY NEM); [→GROUP BY]
RETRIEVE MAX(E.FIZETÉS BY NEM WHERE E.CÍM='Fő u.');
Az aggregációk egymásba ágyazhatók és szerepelhetnek a ϕ formulában is.
c.) feltétel(ek) (ez felel meg az SQL-ben a WHERE-nek - itt is így használják)
WHERE után a ϕ formulában fogalmazzuk meg a feltételt. ϕ tartalmazhatja az AND
(∧), OR (∨), NOT (¬) kulcsszavakat.
Továbbá a ϕ-be tehető explicit kvantor is - ilyen például az ANY. Ennek szintaktikája:
• Törlés: DELETE
Szerkezete:
RANGE OF E IS ...
3
Forrás: http://www.doksi.hu
...
DELETE E;
WHERE ϕ [kiválasztjuk, hogy mit akarunk törölni]
• Beillesztés: APPEND TO
Szerkezete:
APPEND TO SZEMÉLY(Kif1, ...);
–
4
Forrás: http://www.doksi.hu
Létezik az SQL-nek beágyazott formája is, ami tetszőleges alkalmazásból elérhetővé teszi az
adatbázist. (Speciális fogalmak: kurzor, SQLCODE. 1)
Az SQL
• szabvány, amelyet jelenleg csaknem minden relációs adatbáziskezelő
alkalmaz kisebb-nagyobb módosításokkal;
• tömör, felhasználó közeli nyelv, alkalmas hálózatokon adatbáziskezelő
szerver és kliensek közötti kommunikációra;
• nem procedurális programozási nyelv (legalábbis a lekérdezéseknél). 2
1
Lásd: Adatbázisok Laboratórium jegyzet, 1998. 33. oldal: a Pro*C előfordító
2
Forrás: Adatbázisok Laboratórium jegyzet, 1998. (19.oldaltól)
1
Forrás: http://www.doksi.hu
• Új nézetek létrehozása:
CREATE VIEW <nézetnév> [(<oszlopnév> [,<oszlopnév> , ... ])] AS <lekérdezés 3>;
A nézetek olyan virtuális táblák, amelyek a fizikai táblákat felhasználva
a tárolt adatok más és más logikai modelljét, csoportosítását tükrözik.
Felhasználhatók a tárolt információ részeinek elrejtésére, pl. különböző
felhasználók más-más nézeteken keresztül szemlélhetik az adatokat. A nézet
általában csak olvasható, az adatmódosító műveletekben csak akkor
szerepelhet, ha egyetlen táblából keletkezett és nem tartalmaz számított
értékeket.
A lekérdezésre az egyetlen megkötés, hogy rendezést nem tartalmazhat. Ha
nem adunk meg oszlopneveket, akkor a nézetek oszlopai a SELECT után
felsorolt oszlopok neveivel azonosak. Meg kell viszont adni az
oszlopneveket, ha a SELECT számított értékeket is előállít.
• Tábla törlése:
DROP TABLE <táblanév>;
• Nézet törlése:
DROP VIEW <nézetnév>;
• Tábladefiníciók módosítása:
ALTER TABLE <táblanév> [ADD | MODIFY] <oszlopnév> <típus>;
– Az ADD egy új, NULL értékű oszlopot illeszt a táblához,
– a MODIFY paranccsal pedig egy létező oszlop szélessége növelhető.
• Indexek létrehozása:
CREATE [UNIQUE] INDEX <indexnév>
ON <táblanév> (<oszlopnév> [,<oszlopnév>, ... ]);
Tulajdonságok:
– Az indexek a táblákban való keresést gyorsítják meg.
– Az indexeket az adatbáziskezelő a táblák minden módosításánál
felfrissíti.
– Ha egy indexet a UNIQUE kulcsszóval definiáltunk, akkor a rendszer
biztosítja, hogy az adott oszlopban minden mező egyedi értéket
tartalmazzon.
– Lehetséges több oszlopot egybefogó, kombinált indexek létrehozása is.
3
Lásd később (Queries)
2
Forrás: http://www.doksi.hu
• Index törlése:
DROP INDEX <indexnév>;
Tulajdonságok:
• A lekérdezésekben felhasznált Θ operátor többféle lehet; például különböző
halmazoperátorok is alkalmazhatók (EXISTS, IN, NOT IN, CONTAINS [ez utóbbi
másodrendű operátor, nagyon erős!]).
• A lekérdezésekben használhatók aggregációk is, más néven oszlopfüggvények és
eredményeik. Ilyenek: AVG, COUNT, SUM, MIN, MAX. A "szokásos" programozási
nyelveken ezen oszlopfüggvények eredményét ciklussal kaphatjuk meg.
• A lekérdezésekben NULL értékek is felhasználhatók. Pl.: WHERE Cim IS NULL ...
• A SELECT-ek egymásba ágyazhatók. A beágyazott lekérdezés vagy egyetlen, vagy több
értéket állít elő. Több érték egy halmazt jelent, tehát a halmazműveleteket használhatjuk.
• Algebra-műveletek: UNION(∪), INTERSECT(∩), MINUS (/).
• Adatok bevitele
INSERT INTO <táblanév> [(<oszlopnév> [,<oszlopnév>, ... ])]
VALUES (<kif1>[, <kif2>, ...]);
Tulajdonságok:
– Ha nem adjuk meg az oszlopok nevét, akkor a tábla deklarálásánál
megadott sorrendben minden mezőnek értéket kell adni.
– Ha viszont megadtuk az egyes oszlopok neveit, akkor csak azoknak adunk
értéket, mégpedig felsorolásuk sorrendjében. A többi mező NULL értékű
lesz.
– Az egyes mezőknek NULL értéket is adhatunk, ha a deklaráció alapján az
adott mezőnek lehet NULL értéke.
3
Forrás: http://www.doksi.hu
– Ha olyan oszlopnak akarunk NULL értéket adni, amelynek nem lehet NULL
értéke, akkor a parancsvégrehajtás hibával le fog állni.
– Egy ilyen INSERT paranccsal egyszerre csak egy sort tudunk felvenni a
táblába.
• Adatok törlése
DELETE FROM <táblanév> [WHERE <logikai kifejezés>];
Ha a WHERE hiányzik, akkor a tábla valamennyi sorát, ellenkező esetben csak a logikai
kifejezés által kiválasztott sorokat töröljük.
• Adatok módosítása
UPDATE <táblanév> SET <oszlopnév> = <kifejezés> [, <oszlopnév> = <kifejezés>, ...]
[WHERE <logikai kifejezés>];
Ha a WHERE hiányzik, akkor a parancs a tábla valamennyi sorában módosít, egyébként
csak a logikai kifejezés által kiválasztott sorokat töröljük.
• Jogosultságok definiálása
GRANT [DBA | CONNECT | RESOURCES]
TO <felhasználó> [, <felhasználó>, ...]
IDENTIFIED BY <jelszó> [, <jelszó>, ...];
Ezzel a paranccsal az egyes felhasználóknak az adatbázishozvaló
hozzáférési jogát szabályozzuk.
A DBA jogosultság az adatbázis adminisztrátorokat definiálja, akiknek
korlátlan joguk van az összes adatbázis objektum felett, nem csak
létrehozhatják, módosíthatják, illetve törölhetik őket, de befolyásolhatják
az objektumok tárolásával, hozzáférésével kapcsolatos paramétereket is.
A RESOURCES jogosultsággal rendelkező felhasználók létrehozhatnak,
módosíthatnak, illetve törölhetnek új objektumokat.
A CONNECT jogosultság csak az adatbáziskezelőbe való belépésre jogosít.
• Tranzakciókezelés
A tranzakció az adatbázis módosításának olyan sorozata, amelyet vagy
teljes egészében kell végrehajtani, vagy egyáltalán nem. Az
adatbáziskezelők biztosítják, hogy mindig vissza lehessen térni az utolsó
teljes egészében végrehajtott tranzakció utáni állapothoz.
Egy folyamatban lévő tranzakciót vagy a COMMIT utasítással zárhatunk le,
amely a korábbi COMMIT óta végrehajtott összes módosítást véglegesíti, vagy
a ROLLBACK utasítással törölhetjük hatásukat, visszatérve a megelőző COMMIT
kiadásakor érvényes állapotba.
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
Funkcionális függések
1. Bevezetés
Alapkérdés: melyek a "jó" relációk, amelyeket a tényleges séma szintjén érdemes tárolni?
Azaz: mik legyenek az igazi alaprelációk? Hogyan kaphatunk tetszőleges relációkból "jó"
relációkat? Ezekre a kérdésekre válaszol a relációs sémák tervezésének elmélete.
2. A funkcionális függés
Jelölés: Adott az R(A1,...,Ak) relációs séma, ahol R a reláció neve, Ai pedig az i-edik
attribútum.
Az attribútumoknak fix részhalmazai vannak: X⊆{A1,...,Ak}, ami rövidebben: X⊆R.
Példák
1. Adott a TERMELŐ(Név,Cím,Termék,Ár) rekord, amit a (Név,Termék) pár egyértelműen
meghatároz. Egy termelőnek pedig egy, vagy annál több címe lehet.
Funkcionális függések:
a.) Név→Cím
1
Forrás: http://www.doksi.hu
2
Forrás: http://www.doksi.hu
A B C = r rek.
a b c
a c c
r-ben az
• AB→C függés "üresen" teljesül, az
• A→C függés nem "üresen" igaz, és a
• C→B függés nem teljesül.
Nem→Szemszín: ez nem igazi függés, ezzel szemben a Szsz→Nem már igazi függést
jelez. Ez már számunkra is fontos!
Általánosan: adott az (R,F) pár, ahol R egy reláció és F függések egy halmaza.
Csak olyan R-hez illeszkedő r relációkkal foglalkozunk, melyekben F függései
teljesülnek.
Ezek a függések azért ilyen kiemelten fontosak számunkra, mert anomáliákat okozhatnak.
Pl.: a TERMELŐ relációban adott Név→Cím és Név, Termék→R függések mellett
előfordulhat, hogy ha valaki nem termel terméket, akkor nem lesz felvéve a címe sem.
Felmerül a kérdés, hogy mért nem használható egy másik függőleges felbontás, például a
következő: (Név,Cím,Ár) és (Név, Termék)
Ez rossz, mert elvész a Termék és Ár közötti kapcsolat! A révén az összes ár szerepelni
fog az összes termék mellett adott nevű termelő esetén. Azaz: RR' R".
3
Forrás: http://www.doksi.hu
Látható tehát, hogy miben áll a természetes illesztés "mágikus" szerepe: az eredeti reláció
visszaállítása vagy vele történik, vagy sehogy. Az elkövetkezendőkben ezt tételként is meg
fogjuk fogalmazni.
Def.: Levezethetőség
F-ből az U→V levezethető, ha az U→V függés megkapható F-ből az A1-A3
alkalmazásával. Jele: F | U→V.
Tétel: Igazság-tétel
F | X→Y esetén F |= X→Y is teljesül.
Biz.: ha r-ben igaz A1-A3 "baloldala", akkor a "jobboldala" is igaz lesz.
A1:
X Y
r: ( ( )) t1 sor
( ( )) t2 sor
Nagy X halmazon megegyeznek ⇒ kis Y-on is!
A2: X Z Y
r: ( )( )( ) t1 sor
( )( )( ) t2 sor
Ha az X és Z halmazai megegyeznek ⇒ az Y-ok is!
A3: X Z Y
r: ( )( )( ) t1 sor
( )( )( ) t2 sor
Ha az X-ek megegyeznek ⇒ az Y-ok is ⇒ a Z-k is!
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
Azt állítjuk, hogy: F | Irsz, Utca→Irsz, Utca,Város=R, azaz (Irsz, Utca) kulcs.
Levezetése:
Irsz →Város F alapján
Irsz, Utca →Város, Utca A2 alapján (Z=Utca)
Irsz, Utca →Város, Utca, Irsz A2 alapján (Z=Irsz)
[Irsz-t nem kell még egyszer beírni!]
2. Felbontási szabály
Az előbbi szabály komplementere.
Formálisan:{X→Y}| X→Z, ahol Z⊆Y.
3. Áltranzitív szabály
Formálisan:{X→Y, WY→Z}| WX→Z.
6
Forrás: http://www.doksi.hu
7
Forrás: http://www.doksi.hu
számolható.
F+ tartalmazza az összes olyan X→Y függést, ahol:
• 0≠X⊆{A1,...,An}
• 0≠Y⊆{B1,...,Bn}.
⇐ irány
Be kell látni, hogy ha Y⊆X+(F), akkor F | X→Y.
Legyen Y=A1,...,Ak attribútumok együttese.
Felt.: F | X→Ai, ahol i=1,...,k.
Alkalmazzuk többször az únió-szabályt!
X→A1
X→A2 } X→A1 A2 } X→A1 A2 A3
1
Forrás: http://www.doksi.hu
X→A3
...
Végül: X→A1,A2,...,Ak √
X+(F)
X biztosan eleme X+(F)-nek (lehet,
X hogy nem valódi).
11 ... 1 11 ... 1 r első sora csupa 1-es
11 ... 1 00 ... 0 második sora csak X+(F)-ben 1-es,
másutt csupa 0.
Nem lényeges az attribútumok alaphalmaza, csak az. hogy az oszlopokban azonos vagy
különböző értékek szerepelnek-e.
Tehát két sor megegyezik W-n is, azaz r-ben V→W tényleg fennáll.
Ezután nézzük a Teljességi tétel érdemi bizonyítását:
2. állítás: F | X→Y
Biz.: Feltétel szerint F|=X→Y, azaz az X→Y függés igaz mindenütt, ahol F
érvényes.
Az 1. állítás szerint r-ben igaz az X→Y függés.
2
Forrás: http://www.doksi.hu
X-en két sor egyenlő ⇒ a két sor Y-on is egyenlő, azaz Y⊆ X+(F), abból "nem
lóghat ki".
Az Állítás* ⇐ iránya szerint pedig F | X→Y, ezzel állításunkat igazoltuk. √
Következmény: |= és | egyenértékű.
Ezért X+(F):={A⊆R; F | = X →A} is írható, amit ki is használnak automatikus séma-
elemzőkben.
3
Forrás: http://www.doksi.hu
A módszer iteratív:
X0:=X
Xi+1:= Xi ∪ {azon A attribútumok, melyekhez van olyan U→V∈F függés,
hogy U∈ Xi és A∈V}
Az iteratív lépések nem csökkentik az X halmazok méretét, ezért:
X0⊆X1⊆X2⊆ ... ⊆ Xutolsó
Xutolsó-t akkor kapjuk meg, amikor X már nem nő tovább.
1. X→Xi igaz
2. Xi→U A1 miatt
3. U→V ∈F
4. V→A A1 miatt
5. U→A A3 miatt (3. és 4. reflexivitása)
6. X→U A3 miatt (1. és 2. reflexivitása)
7. X→A A3 miatt (6. és 5. reflexivitása) √
2. Xutolsó⊇X+(F)
Ennek belátásához - a Teljességi tétel bizonyításához hasonlóan - definiálunk egy
r relációt:
Xutolsó
X
11 ... 1 11 ... 1 r első sora csupa 1-es
11 ... 1 00 ... 0 második sora csak X+(F)-ben 1-es,
másutt csupa 0.
a.) r-ben F igaz.
U→V∈F
• ha U¬⊆Xutolsó, akkor az állítás igaz. √
• ha U⊆Xutolsó, akkor V⊆Xutolsó, mert ellenkező esetben V' elemeivel növelhető
Xutolsó lenne. √
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
Tehát
• r-ben is igaz az X→A függés
• X-en két sor egyezik ⇒ A-n is egyezik ⇒ A∈Xutolsó. √
Megj.: a fent vázolt algoritmus implementálható a bemenet, azaz (R,F) hosszában lineáris
lépésszámmal.
Megoldás:
Xö=X=AB
X1=AB∪CD=ABCD
X2=ABCD∪E=ABCDE=R, azaz definíció szerint R szuperkulcsa és kulcs is (R,F).
Ez utóbbi (kulcs) tulajdonsághoz meg kell mutatni: valódi része nem szuperkulcs.
• Ki kell számolnunk A+(F)-et, ez: A+(F)=A≠R
• és B+(F)-et is, ez pedig: B+(F)=BD≠R.
Tehát a minimalitási tulajdonság valóban teljesül.
Példánk tapasztalatai általánosíthatók:
Például: R = TERMEL(Név,Cím,Termék,Ár)
R1= (Név,Cím)
R2= (Név,Termék,Ár)
ρ = (R1,R2) egy lehetséges függőleges felbontás, ahol k=2
1
a ZH anyaga idáig tart. Ez a témakör persze még folytatódik... :)
2
Jele ρ, azaz ró, ha nem látszana tisztán
6
Forrás: http://www.doksi.hu
Jelölés:
ri:=ΠRi(r) az r reláció függőleges vetülete
r
mρ(r):= ri, ahol a sorrend közömbös, mert a természetes illesztés lényegében
i=1
asszociatív művelet.
Pl.: (r1
~
r2) r3 = r1 ( r2 r3 )
7
Forrás: http://www.doksi.hu
Biz.:
1. Legyen t∈r, az r reláció egy sora.
Ekkor ti = t[Ri] ∈ ri, ahol t[Ri] t-nek az Ri oszlopok alá eső része.
A ti sorok túlélik az illesztés szűréseit és eredményül t-t adják: t ∈ mρ(r). ./
i=1 i=1
Biz.: ⇐
Tfh. pl. F |= R1 ∩ R2 → R1\ R2 igaz.
t ∈ r1 r2 ⇒ t ∈ r
R1 R2
=r
^ ^
R1 \ R2 R1 ∩ R2
8
Forrás: http://www.doksi.hu
⇒ (vázlat)
H a két függés egyike sem áll fenn, akkor a felbontás nem mindig hűséges.
R1 R2
^ ^ =r
v
R1 ∩ R2
(R1 ∩ R2)+(F)
A csupa 1-es sor ∉ r, de ∈ mρ(r), tehát mρ(r) ⊃≠ r.
Ezen felül bizonyítani kell még azt is, hogy r megőrzi F-et. (Ezt a teljességi tételhez
hasonlóan kell belátni.)
Példa: R = TERMELŐ(Név,Cím,Termék,Ár)
F = (Név→Cím, NévTermék→Ár)
Név+(F) ⊇ R1 \ R2 vagy
?
?
Név (F) ⊇ R2 \ R1 ?
+
9
Forrás: http://www.doksi.hu
Biz.: konstruktív
F-ből indulunk ki, majd fokozatosan biztosítjuk a definíció pontjait.
Kezdetben: G=F.
1. A módosított G egyenértékű a korábbival
2. X→Y ∈G, Y=A1,A2,...,Ak helyett
X→A1, ahol i =1,...,k (a felbontási és únió szabály értelmében)
3. Veszünk egy X→A ∈G függést.
Ha X→A ∈ (G\{X→A})+, akkor X→A-t eldobjuk,
ellenkező esetben megtartjuk.
Praktikusan ez a teszt a következőképp oldható meg:
• A ∈X+(G\{X→A}) esetén lehet a függést eldobni, és
• A ∉X+(G\{X→A}) esetén pedig meg kell tartani.
Elég tehát a lezárás helyett az attribútum-halmaz lezárására tesztelni.
4. Ha X→A ∈G és Y⊂≠X, akkor Y→A∉G.
Megj.: ha Y→A∈G és Y⊂X, akkor X→A ∈G teljesül a reflexivitás miatt.
Z: átmenet az X és az Y között
Y Z X
10
Forrás: http://www.doksi.hu
Az algoritmus lépései:
2. rendben van.
3. szintén rendben van: nincs elhagyható függés.
Pl. AB→C nem elhagyható, mert AB+({A→B,B→A}) = AB és C∉AB.
4. A→B, B→A ./
AB→C nem minimális baloldalú
A+(F) = ABC, és C ∈ ABC, ezért AB→C helyett vehetjük az A→C-t.
11
Forrás: http://www.doksi.hu
Def.: BCNF
Az (R,F) relációs séma BCNF, ha minden nem triviális X→A∈F+ függés esetén X
szuperkulcs, ahol A egy attribútum, A∉X (vagyis A egy, az X attribútum-halmazon kívüli
attribútum).
Megjegyzések:
• a BCNF-ben nincsenek a szuperkulcson kívülről induló függések; a normálforma a
kötelezően meglévő minimális mennyiségű függéssel rendelkezik;
• BCNF-nek számít a jó, értelmes, redundancia-mentes reláció;
• a legutóbbi példában bemutatott Név→Cím függés felrúgja a BCNF feltételét, és pont ez
okoz anomáliákat. A TERMELŐ reláció tehát nem BCNF, mert Név nem szuperkulcs;
• egy kétoszlopos reláció mindig BCNF. Ha ez a két oszlop A és B, akkor két nem triviális
függés lehetséges:
1. A→B ⇒ A szuperkulcs
2. B→A ⇒ B szuperkulcs.
Így a reláció mindenképpen BCNF:
Biz.: konstruktív
1. Ha R BCNF, akkor az állítás egyből igaz. ./
2. Ha R nem BCNF, akkor van nem triviális X→A függés, ahol X nem szuperkulcs.
ρ = (R1=XA, R2=R\A) egy felbontás; R helyett ezzel megyünk tovább.
3. Ha R1,R2 nem BCNF, akkor az előbbi módon folytassuk a felbontásukat.
Ezt az eljárást rekurzívan alkalmazva hűséges felbontáshoz jutunk.
Példák.: BCNF-re
1. Vegyük kedvenc TERMELŐ(Név,Cím,Termék,Ár) relációnkat!
F = (NévTermék→CímÁr,Név→Cím)
Ennek a Név→Cím függés egy rossz függése: ez sérti a BCNF tulajdonságot, mert
a Név nem kulcs, és a függés nem triviális.
Bontsuk fel a nem B CNF formájú R-t ezen kulcs szerint! (A BCNF
tulajdonság megsértése olyan függéseknél látható, ahol nincs kulcs a
baloldalon.)
Az X → A függés szereposztása:
TanárDiák → Jegy
(folyt.köv.)
2
Forrás: http://www.doksi.hu
ez nem BCNF,
fel kell bontani!
R
ez nem BCNF,
TanárDiákJegy TanárTárgyTeremDiákIdő fel kell bontani!
kulcs: TanárDiák a Tárgy→Tanár rossz
függés
ez már BCNF,
nem bomlik tovább
TanárTárgy TárgyTeremDiákIdő
kulcs: Tárgy
Megjegyzések:
• A felbontás eredményei a levelekben található komponensek.
• A felbontás hűséges, mert mindvégig a két részre bontás technikáját
alkalmaztuk.
• A felbontásban segít, ha mindig a megfelelő rossz függéseket választjuk.
Biz.:(R,F) nem BCNF ⇒ van olyan U→B ∈ F+ nem triviális függés, ahol U nem
szuperkulcs. Ezért B ∈ U+(F).
Ez a lezárási algoritmus természetéből adódik:
van olyan X→Y ∈ F függés úgy, hogy X⊆U és
Y¬⊆U.
3
Forrás: http://www.doksi.hu
Következmény: Ha F-ben minden függés baloldala szuperkulcs, akkor (R,F) BCNF alakú.
Def.: 3NF
Az (R,F) séma harmadik normálformájú - röviden 3NF -, ha minden X→A ∈ F+ nem
triviális függésnél X vagy szuperkulcs vagy A prím attribútum.
4
Forrás: http://www.doksi.hu
Észrevételek:
1. Ha (R,F) BCNF, akkor egyben 3NF is (nem érdekes, hogy A milyen attribútum).
2. Van 3NF alakú (R,F) séma, ami nem BCNF. (Pl. a bevezető példa, ahol a Város prím
attribútum.)
5
Forrás: http://www.doksi.hu
3NF
A 3NF a tágabb, engedékenyebb NF.
BCNF
Az algoritmus:
Z0 = D
Z1 = D ∪ (Z ∩ CD)+(F) ∩ CD = CD
Z2 = CD ∪ (CD ∩ BC)+(F) ∩ BC = BCD
Z3 = ABCD
Biz.: konstruktív
F-ből indulunk ki, majd fokozatosan biztosítjuk a definíció pontjait.
Kezdetben: G=F.
1. A módosított G egyenértékű a korábbival
2. X→Y ∈G, Y=A1,A2,...,Ak helyett
X→A1, ahol i =1,...,k (a felbontási és únió szabály értelmében)
3. Veszünk egy X→A ∈G függést.
Ha X→A ∈ (G\{X→A})+, akkor X→A-t eldobjuk,
ellenkező esetben megtartjuk.
Praktikusan ez a teszt a következőképp oldható meg:
• A ∈X+(G\{X→A}) esetén lehet a függést eldobni, és
• A ∉X+(G\{X→A}) esetén pedig meg kell tartani.
Elég tehát a lezárás helyett az attribútum-halmaz lezárására tesztelni.
4. Ha X→A ∈G és Y⊂≠X, akkor Y→A∉G.
Megj.: ha Y→A∈G és Y⊂X, akkor X→A ∈G teljesül a reflexivitás miatt.
Z: átmenet az X és az Y között
Y Z X
Az algoritmus lépései:
2. rendben van.
3. szintén rendben van: nincs elhagyható függés.
Pl. AB→C nem elhagyható, mert AB+({A→B,B→A}) = AB és C∉AB.
4. A→B, B→A ./
AB→C nem minimális baloldalú
A+(F) = ABC, és C ∈ ABC, ezért AB→C helyett vehetjük az A→C-t.
Biz.: konstruktív
Legyen G az F minimális fedése.
Tfh. G = {X1→A1,...,Xk→Ak}alakú.
Ekkor legyen ρ = (X1A1,...,XkAk,X) egy k+1 komponensű felbontás, ahol X az (R,F)
séma egy kulcsa.
8
Forrás: http://www.doksi.hu
3. ρ hűséges felbontás
Be kell látni, hogy s = mρ(r) = r minden r-re.
Def.: 1NF
Az attribútum-értékek egyszerűek (elemiek, nem oszthatóak). Atrribútum-érték nem
lehet halmaz, így egy másik reláció sora sem.
Megj.: Újabban - az elmúlt 6-7 évben - megjelentek 1NF-et tagadó intelligens
alkalmazások, melyek nem az adatok tömegével, hanem a struktúrájával manipulálnak.
Példa: 1NF-re
Épület Padlás
Alap Padlás ... Cserép Forma ...
A1 P1 Alpesi Dór
Új típusú műveletek:
• ZOOM, UNNEST: P1 "kibontása"
9
Forrás: http://www.doksi.hu
10
Forrás: http://www.doksi.hu
Jelölés: X > Y
Ábrázolva:
X Y R\XY
t1
t2
t3
t4
1
ezeket az ... érdekes neveket nem én találtam ki! (B.J.)
1
Forrás: http://www.doksi.hu
X Y R\XY
t1
t2
t3
t4
Következmények:
1. Ha (R,F) 4NF, akkor BCNF is.
2. Kétoszlopos reláció biztosan 4NF (azaz nincs benne nem triviális > ).
2
Forrás: http://www.doksi.hu
Megj.: Mivel R1∩R2 > R1\R2 ∈F+ is igaz, ezért nem kell a "vagy" ág.
A bizonyítás hasonló a már ismertetetthez, de most mellőzzük.
Legyen R1 = XY és
R2 = R\(X\Y). (Megjegyzés: > -ra nincs únió és felbontási szabály!
Valamint ha Y=A∈X, akkor R2=X\A.)
R1 valódi, mert XY≠R.
R2 is valódi, mert Y≠⊂X.
R1∩R2 = XY∩(R\(X\Y)) X Y R
R1\R2 = R\XY
3
Forrás: http://www.doksi.hu
A tranzakciókezelés alapfogalmai:
zárak, pattok, sorosíthatóság, egyszerű tranzakció modell
1. Alapfogalmak
Def.: Tranzakció
Ebben a környezetben alapfogalom a tranzakció (processz, folyamat), ami egy program
futását jelenti. A tranzakció atomi, azaz oszthatatlan tevékenységet jelöl.
Atomi, mert a tranzakciónak:
• vagy teljes a hatása az adatokon,
• vagy semmilyen hatással nincs rájuk.
Def.: Abort
Akkor jut szerephez, ha néhány - önmagában helyes - tranzakció (a továbbiakban: T)
"összeakad", holtpontra jut. Hogy befejezhessék a munkájukat, egyiküket le k ell á llítani,
abortálni kell.
idő →
T1: READ A A++ WRITE A
T2: READ A A++ WRITE A
1
Forrás: http://www.doksi.hu
Amíg T1 zárat tart A-n, addig más T-k csak korlátozottan (esetleg egyáltalán nem)
férhetnek A-hoz, várakozniuk kell a zár felszabadulásáig.
Def.: Protokoll
Szabályrendszer, melyet ha a résztvevő T-k betartanak, akkor bizonyos kedvező
jelenségek érhetők, illetve bajok kerülhetők el.
A pattok felismerése várakozási gráffal lehetséges, ami egy dinamikus - időben változó -
objektum. Az irányított gráf
• csúcsai: T1,...,Tn az aktív tranzakciók;
• élei: Ti→ Tj, ha van olyan Ai adategység, amin Ti épp zárat tart, Tj pedig dolgozni
szeretne rajta (vagyis Tj LOCK-ot kér A-ra).
2
Forrás: http://www.doksi.hu
Biz.:
• Ha a gráf DAG, akkor ∃ topologikus rendezése: Ti1,...,Tin, és ez egy lefutási
sorrendet biztosít a T-k számára. (Ti1 léphet, mert nem vezet bele él.)
• Ha a gráf nem DAG, akkor van benne irányított kör, amelyben a T-k
patthelyzetben vannak.
Def.: Ütemezések
Az (egyetlen) ütemezőhöz aktív T-k utasításai érkeznek.
Pl.: T1,T2,T3
T2: READ B, T3: LOCK C, T1: WRITE D, T2: ... az utasítások egymásutánja.
3
Forrás: http://www.doksi.hu
2. Tranzakciós modellek
Pl.: idő→
T1: LOCK A, UNLOCK A
T2: LOCK A, UNLOCK A
Ez nem ugyanaz, mintha T1-et és T2-t felcserélnénk. Egy ezzel ekvivalens soros
ütemezésben a T1-nek meg kell előznie T2-t. (A zárak között egyedi események
zajlanak.)
4
Forrás: http://www.doksi.hu
Def.: T zárpontja
Az első olyan időpillanat, amikor T már minden zárát megkapta. Jele: z(T).
5
Forrás: http://www.doksi.hu
Tn T1 T2 T3
... ...
z(Tn) < z(T1) < z(T2) < z(T3) Az összes egyenlőtlenség együtt nem teljesülhet.
További állítások:
1. A következő zárpont szerinti növő soros ütemezés S-sel ekvivalens.
2. Tfh. T1 nem kétfázisú. Ekkor megadható egy kétfázisú T2 és a két T-nek egy olyan S
ütemezése, ami nem sorosítható.
6
Forrás: http://www.doksi.hu
1
Forrás: http://www.doksi.hu
2
Forrás: http://www.doksi.hu
Pl.1.:
meglévő zár az adategységen
RLOCK WLOCK
zárkérés RLOCK Igen Nem
WLOCK Nem Nem
Egy (i,j) mátrixelem "Igen", ha egy, az adatelemen lévő adott típusú zár mellett az új
zárkérés is elfogadható, és "Nem" akkor, ha az új zárkérés nem teljesíthető.
Bevezetés
3
Forrás: http://www.doksi.hu
Def.: Fa protokoll
Az egyszerű tranzakció modellt követjük (LOCK, UNLOCK); az adategységek egy
gyökeres, irányított fa csúcsai. Egy csomópont zárolása nem jelenti a gyerekek zárolását is. A
fa protokoll nem kétfázisú.
Szabályai: (egy T követi a fa protokollt, ha)
1. egy tranzakció az első LOCK-ot akárhova teheti;
2. további LOCK-ok csak akkor helyezhetők el, ha az adategység szülőjére ugyanaz a
tranzakció már rakott zárat;
3. egyazon tranzakció kétszer ugyanazt az adategységet nem zárolhatja.
A
LOCK A
LOCK B B C
UNLOCK A
LOCK E D E
F G
4
Forrás: http://www.doksi.hu
Ez utóbbi feltételezés azonban azt is eredményezheti, hogy két tranzakció tart fenn
egyidejűleg zárat ugyanazon az adategységen. A jelenség neve zárkonfliktus, amit alkalmaz
szabályok megtartásával el kell kerülni.
A figyelmeztető protokoll zárműveletei:
• LOCK A: zárolja A-t és valamennyi leszármazottját. Két különböző T nem tarthat
fenn egyidejűleg zárat ugyanazon az adategységen.
• WARN A: A-ra figyelmeztetést (warning) rak. Ekkor A-t más T nem zárolhatja.
• UNLOCK A: eltávolítja a zárat és figyelmeztetést A-ról.
A protokoll szabályai ugyanazok, mint az egyszerű tranzakció modellben, továbbá:
1. egy T első művelete kötelezően a "LOCK gyökér" vagy "WARN gyökér".
2. LOCK A vagy WARN A akkor helyezhető el, ha A szülőjén már van WARN.
3. UNLOCK A akkor lehetséges, ha az A gyerekein már nincs LOCK vagy WARN.
4. kétfázisú: az első UNLOCK után már nem következhet LOCK vagy WARN.
5
Forrás: http://www.doksi.hu
1. Bevezetés
Def.: Időbélyeg
Az időbélyeg olyan érték, amelyet minden tranzakcióhoz szigorú egyediséget biztosítva
rendelünk hozzá és mely arányos (legegyszerűbb esetben azonos) a tranzakció kezdőidejével.
Jele: t(T).
Tulajdonságok:
1. Az időbélyegek a tranzakcióknak egy egyértelmű sorrendjét határozzák meg. (Fontos,
hogy T'≠T-re t(T')≠t(T).)
2. Képzelhetjük úgy, mintha a tranzakciók a kezdőidejükben (csaknem) zérus idő alatt
futnának le.
3. Fontos, hogy a kb. egyszerre induló T-k közül senkinek se legyen nagyon kicsi t-je a
többiekhez képest.
Ezek miatt a kezdőidők növekvő sorrendjébe állítva a tranzakciókat ez lehet egy soros
ekvivalens ütemezés. Ha tehát az időbélyeges ütemező gondoskodik arról, hogy csak olyan
műveleteket engedélyezzen, amely a tranzakciók növekvő időbélyegével ekvivalens soros
ütemezés hatásaival egyezik meg, akkor a tranzakciók indulási sorrendje valóban egy soros
ekvivalens ütemezés lesz.
2. A módszer működése
1
Forrás: http://www.doksi.hu
Ez egyelőre jogos akciónak látszik. De elképzelhető, hogy a tényleges írás előtt valaki
már w(A) = 110-zel ír. Ez egy abort-helyzet lenne T-re, amit későn, csak a COMMIT után
fedeznénk fel. Az ellenőrzés elvégzéséig zárat kell tartani A-n!
Kétféle megoldás adódik:
1. Tfh. T az A-t írja vagy olvassa.
Akkor végezzük az ellenőrzést, amikor T ténylegesen A-hoz fordul, vagy
2. közvetlenül a COMMIT - a befejező lépés - előtt.
Mindkét esetben az ellenőrzés kezdetétől az esetleges tényleges írásig zárat kell tenni A-
ra.
Def.: Verziókezelés
Szoros rokonságot mutat az időbélyeg-kezeléssel, de attól függetlenül is létezik.
Számos alkalmazásnál fontos a régi változatok megőrzése (pl. kórházak
betegnyilvántartása). Az adatbázisok "történelme" sok mindenre felhasználható; pl.
kereskedelmi adatbázisoknál a szakemberek adatbányászattal szereznek információt a
fogyasztói szokásokról. De lehet, hogy maga az alkalmazás követeli meg a verziók tárolását.
Más ok az, hogy a régi változatok tárolásával sokszor (időben) hatékonyabb
megoldások kaphatók. Ez tulajdonképpen egy tár→idő motivációjú ötlet.
A verziókezelés gyakran nagyon helyigényes; gyakran említik együtt az optikai táras
tárolással, mert olyan méretű a tárolandó adatmennyiség.
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
1. Bevezetés
Eddig nem foglalkoztunk azokkal a problémákkal, amelyek akkor lépnek fel, ha egy
tranzakció nem fut le teljesen, valamely ok miatt idő előtt befejeződik. Ezek a lehetséges okok
a következők:
1. a tranzakció félbeszakad (programhiba T-ben);
2. az ütemező pattot lát és "kilövi" T-t;
3. az ütemező sorosíthatatlanság miatt kilövi T-t, ezáltal biztosítja a sorosíthatóságot (ez
agresszív ütemezőknél gyakoribb, a tranzakciós teljesítményt az abortok révén növelik);
4. rendszerhiba lép fel (az illékony tár: belső memória, cache, stb. sérül);
5. a háttértár tartalma (is) megsérül (a stabil tár sérül: média hiba).
Mi a 2. és 3. esetekkel foglalkozunk; célunk a DB visszaállítása valamilyen konzisztens
állapotba.
T1 T2
LOCK A
READ A
A:=A+100
WRITE A
LOCK B
UNLOCK A
LOCK A
READ A
A:=A*A
READ B
WRITE A
COMMIT
UNLOCK A
B:=B/A
2. Megoldások
2
Forrás: http://www.doksi.hu
3
Forrás: http://www.doksi.hu
Bevezetés
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
6
Forrás: http://www.doksi.hu
1. Alapfogalmak
Def.: Elosztott DB
Az elosztott adatbázis (DB) csomópontok (node, site) összessége, amelyekben egy-egy
számítógép üzemel saját CPU-val és háttértárral. A csomópontok egymással össze vannak
kötve adatcserére alkalmas módon. Az elosztott DB egy több helyen (gépen) lévő egységes
felszínű DB.
Modellje egy gráf, amelyben a csúcsok a helyeket (processzorokat és táraikat) jelentik,
az élek pedig az összeköttetéseket (linkeket). Egy ilyen gráfot kijelölhet egy helyi (LAN) vagy
egy nagyobb kiterjedésű hálózat (WAN). Fontos tényező a hálózat megbízhatósága, mert a
megbízható működés fenntartása elemien fontos. Ennek módszerei:
1. adatok multiplikált tárolása különböző fizikai helyeken;
2. a linkek hibái ellen többszörös elérési utak biztosítása a hálózatban;
3. nagy megbízhatóságú komponensek alkalmazása.
Példák:
1. ugyanazon adat több helyen (a megbízhatóság és sebesség miatt multiplikálva)
2. összetett egység gyakran bomlik fel különböző helyeken tárolt kisebb részekre.
Például egy biztosító ügyfél adatbázisa fiókonként van tárolva (ez a vízszintes darabolás).
3. az előbbi két eset kombinációja. Például az ügyfél-adatok fiókonként tárolódnak, de a
területi központban is megtalálhatóak, hogy az összesítéseket könnyebben el lehessen végezni
az adatokon.
Beszélhetünk tehát globális (logikai) adategységekről, ami azt mutatja meg, hogy az
adategység "kifelé", a felhasználó számára hogyan látszik. Ezzel szemben áll a lokális (fizikai)
adategység fogalma, ami a modellező gráf csúcspontjaiban ténylegesen tárolt adategységet
jelenti.
1
ezt egybe vagy külön kell írni? valaki elárulhatná nekem! Én inkább egyprocesszorost írnék.
1
Forrás: http://www.doksi.hu
Gond: egy művelet a logikai adategységen esetleg több lokális egységet érint. (Pl.
Rezeda Kázmér számlája módosulását több helyen kell vezetni, követni.) Vagyis a globális
tranzakció lokálisakra bomlik fel.
Példa az elosztott tranzakciókezelés problémáira
A számlájáról B számlására 50 egységet utalnak:
2. Elosztott zárképzés
RLOCK WLOCK
RLOCK Igen Nem
WLOCK Nem Nem
2
Forrás: http://www.doksi.hu
3
Forrás: http://www.doksi.hu
4
Forrás: http://www.doksi.hu
5
Forrás: http://www.doksi.hu
Résztranzakciók:
x1-re x2-re
T1-re: T11 T12
T2-re: T21 T22
T11 T21 T12 T22 Mind a négy rész külön kétfázisú, de az egész
wA wB együtt mégsem sorosítható.
uA uB
wA wB
uA uB
1
Forrás: http://www.doksi.hu
A megoldás ötlete: T részeinek legyen közös z árpontja, ami előtt lezajlik az összes
zár-kérés és ami után az összes feloldás megtörténik. (A résztranzakciók üzenetváltásokkal
informálják egymást, hogy elérték a zárpontjukat, több zárra nincs szükségük.) Így már igaz
lesz a kétfázisú tranzakciók sorosítási tétele.
2. Elosztott "Kész"-protokoll
"abortra szavazok"
küldése "abort" jött a
főnöktől
abort 2
valaki abortra
szavazott
abort
kell
abortot
küld
abort
A főnök állapotai
Megjegyzések:
• a főnök is résztvevő egyben, ő is küld magának üzeneteket, csak éppen ezek nem
költséges üzenetek;
• ha nincs főnök csak résztvevők, akkor mindenki mindenkinek kell, hogy küldjön
üzenetet. Ilyenkor az üzenetek száma n2-tel lesz arányos.
• hálózati hibák esetén a protokoll nem használható. Ha ugyanis Ti zárat tart fenn
valamely adategységen és commit-képes állapotban van, akkor itt is marad, ha nem
jön üzenet a főnöktől (pl. hálózati hiba miatt), mert:
– commit állapotba nem léphet, mert jöhet "abort" üzenet;
– abort állapotba sem léphet, mert jöhet "commit" üzenet és
– a zárait sem engedheti el, mert sérülhet a globális kétfázisúság.
A jelenség neve blokkolás, és kiküszöbölése a hálózati hibák esetén is működőképes
protokollok alapproblémája.
3
Forrás: http://www.doksi.hu
"abort" jött a
abort főnöktől helyreállítás
"segítsetek"
küldése
blokkolt
timeout vagy
valaki abortra
szavazott
abort
kell
abortot
küld
abort
A főnök állapotai
A helyreállítás folyamata:
Ha a résztvevő belép a "helyreállítás" ál lapotba, akkor "segítsetek" üzenetet küld
valamennyi résztvevőnek (amihez ismernie kell őket). Erre válaszul jöhet:
• commit üzenet, mert ha a résztvevő már commit állapotban van, akkor ezt az
üzenetet kell küldenie, vagy
• abort üzenet, abort állapotban lévő résztvevőtől vagy olyantól, aki még kezdő
állapotban van.
Ha a résztvevő commit-képes állapotban van, akkor nem tud hasznos üzenetet küldeni,
így nem is küld semmit.
A "blokkolt" ál lapotban lévő tranzakció ezután annak megfelelően jár el, amilyen
üzenetet kapott. Ez a döntése helyes, mert
• nem kaphat commit és abort választ is a "segítsetek" üzenetére;
• nem kaphat abortot, ha a főnök commitot küldött;
• nem kaphat commitot, ha a főnök abortot küldött.
Ha semmilyen üzenet nem jön a segítségkérésre (mert pl. a többi résztvevőtől el van
vágva vagy a többiek commit-képes állapotban vannak), akkor a blokkolás bekövetkezik.
4
Forrás: http://www.doksi.hu
Megj.: egy résztranzakció kész vagy abortált állapotában is jöhetnek kérdések, ha más
résztranzakció segítséget kér. Ilyenkor egy napló alapján van lehetőség korrekt választ adni.
5
Forrás: http://www.doksi.hu
2. A fizikai optimalizálás
nA nC n n nC
⋅ + A = A 1 +
b A bC (m − 1) b A b A bC (m − 1) egy blokk (m-1) blokk CD-ből
AB-ből
CD olvasások + AB olvasása
nC n A
Ha < , akkor érdemesebb a CD-ből venni egyesével az elemeket (blokkokat),
bC b A
majd ehhez betölteni (m-1) számú blokkot AB-ből.
1
Forrás: http://www.doksi.hu
3. Az algebrai optimalizálás
Kiinduló lépésként a szóban forgó (magas szintű) kérdést átírjuk relációs algebrai kifejezéssé.
A relációs algebra kifejezései egyszerű és erős átalakításokat tesznek lehetővé, és az
ekvivalens átalakítások során kialakul a végrehajtási terv.
Itt a D=99 feltételt rögtön a CD relációra is elvégezhetjük, így kisebb lesz a szorzat.
Sőt:
ΠA (σB=C (AB × σ D=99(CD))).
σ, Π, Πσ σ, Π, Πσ