You are on page 1of 18

Adatbázisok Gyakorlat Elmélet

1.Gyakorlat: Adatbázis-kezelők felépítése


● Réteg modell (layered model):
eredeti problémát több részre kell bontani úgy, hogy az egyes részek egymásra épüljenek, de egymással csak minél
kisebb felületen érintkezzenek
o Fizikai adatbázis (physical database):
▪ adatbázis adatainak a fizikai tárolókon való
elhelyezése.
▪ adatstruktúrák, amelyekben a (fizikai)
adattárolás megvalósul
▪ Fogalmak: kötet, állomány, blokk, track,
szektor, vödrös hashing

o Fogalmi (logikai) adatbázis (conceptual (logical) databa):


▪ való világ egy darabjának leképezése, egy sajátos modell, ahogyan az adatbázis tükrözi a valóság egy
részét
▪ (logikai) séma (conceptual (logical) schema)

o Nézet (view):
▪ az, amit és ahogy a felhasználó az adatbázisból lát
▪ minden felhasználóhoz tartozhat külön nézet
▪ külső sémának (external schema)

● Adatfüggetlenség elve (data independence):


a rétegek egymástól függetlenül megváltoztathatók, kicserélhetők legyenek, amennyiben a rétegek közötti interfészek
változatlanok maradnak
o fizikai adatfüggetlenség (physical data independence):
fizikai szinten, a fizikai működés sémáiban véghezvitt változások nem érintik a fogalmi (logikai) adatbázist (kb
mindig teljesül)

o Logikai adatfüggetlenség (logical data independence):


a logikai adatbázis megváltozása nem jár az egyes felhasználásokhoz-felhasználókhoz tartozó nézetek
megváltozásával

A fizikai adatbázis
● Adat:​​A valóságnak egy értelmezhető, de nem értelmezett része
● Információ:​​Az értelmezett adat
● Tudás:​​Az információ elemek kontextusba helyezése, az információból nyerhető ki. (Az információ elemek között
milyen kapcsolat van)

● ADAT-> INFORMÁCIÓ -> TUDÁS

Adatmodellek, modellezés
o Adatmodell:
▪ Formális jelölőrendszer adatok és kapcsolatok leírására
▪ Milyen műveleteket lehet végezni az adatokon, milyen kapcsolatok kialakítását támogassuk az
adataink között
▪ aszerint osztályozzuk, hogy a rekordtípusok között milyen kapcsolatok definiálása megengedett

1
Egyed-kapcsolat modell (entity-relationship, ER)
o modell az adatokról, de nem adatmodell (nincsenek benne adatműveletek definiálva)
o Elemei:
▪ egyedtípusok
▪ attribútumtípusok
▪ kapcsolattípusok
o Entitások:
▪ egyed, entitás (entity):
A valós világban létező, logikai vagy fizikai szempontból saját léttel rendelkező dolog, amelyről
adatokat tárolunk. (valóságban jelenik meg)
● megkülönböztethetőnek kell lenni (megfelelő attribútumokat kell választani)
● ~főnevek

▪ tulajdonság (property):
Az entitásokat jellemzi, amelyen vagy amelyeken keresztül az entitások megkülönböztethetők
● Tulajdonságok halmaza: közös jelentés alapján teszem egy halmazba
● ~melléknevek

▪ egyedhalmaz (entity set):


Az azonos attribútumtípusokkal jellemzett egyedek összessége.

o Kapcsolatok (relationship):
Entitások névvel ellátott viszonya (nem lehet kulcsa!!)

o Kapcsolatok funkcionalitása (kardinalitása)


hogy egy entitáshalmaz egy eleméhez egy másik entitáshalmaznak hány elemét rendelik hozzá
▪ egy-egy kapcsolat (one-to-one relationship):
Olyan (bináris) kapcsolat, amelyben a résztvevő
entitáshalmazok példányaival egy másik
entitáshalmaznak legfeljebb egy példánya van
kapcsolatban
▪ több-egy kapcsolat (many-to-one relationship):
Egy K: E1, E2 kapcsolat több-egy, ha E1 példányaihoz
legfeljebb egy E2-beli példány tartozik, míg E2
példányai tetszőleges számú E1-beli példányhoz
tartoznak

▪ több-több kapcsolat (many-to-many relationship):


Egy kapcsolat több-több funkcionalitású, ha nem több-egy egyik irányban sem

o Kulcs (key):
Az ER-modellezésnél az attribútumoknak azt a halmazát, amely az entitás példányait egyértelműen azonosítja,
kulcsnak nevezzük.
▪ minden egyedhalmaznak legalább egy kulcsa van!
▪ aláhúzással jelöljük

o ER-diagram

2
● ER modell:
o Entitáshalmaz
▪ KIRENDELTSÉG(k_kód,
hely)
▪ ALKALMAZOTT(a_kód,
név, beosztás, fizetés)
o Kapcsolattípus:
▪ DOLGOZIK: KIRENDELTSÉG, ALKALMAZOTT; dátum

● ISA kapcsolat:
egy entitáshalmaz minden eleme rendelkezik egy másik
(általánosabb) entitáshalmaz attribútumaival, de azokon kívül
még továbbiakkal is (specializáció)
● Gyenge egyedhalmaz (weak entity set):
modellezés során egy entitáshalmaznak nem tudunk kulcsot
meghatározni, hanem az egyedek azonosításához valamely
kapcsolódó egyed(ek)re is szükség van
o determináló kapcsolat (identifying relationship):
A gyenge egyedhalmaz identitását egy (vagy ritkán több) ún. tulajdonos egyedhalmaz (owner
entity set) biztosítja, amely a gyenge egyedhalmazzal több-egy kapcsolatban áll.

Tervezés ER-diagramból (9.1 fejezet)


1. Az egyedhalmazokat olyan relációs sémával ábrázoljuk,
amely tartalmazza az entitáshalmaz összes attribútumát.
A reláció minden egyes n-ese az entitáshalmaznak
pontosan egy példányát fogja azonosítani
2. A kapcsolattípusokat olyan relációs sémákká alakítjuk,
amelyek attribútumai között szerepel a kapcsolatban
résztvevő összes entitáshalmaz kulcsa is
3. (kulcs-egyaláhúzás, idegen kulcs-duplaaláhúzás)

2.Gyakorlat: A relációs adatmodell


Az adatok strukturálása
● Reláció (relation):​​Halmazok Descartes-szorzatának részhalmaza. (részhalmaz is lehet, nevet adunk neki, kisbetű )
o a reláció nem tartalmazhat két azonos sort,
o az n-esek (sorok) sorrendje nem számít,
o az oszlopoknak egyértelmű nevük van (sorrendjük nem számít, ha a nevük alapján hivatkozunk rá)
o Descartes-szorozat:
▪ n-valódi, azaz azonos elemeket nem tartalmazó halmaz
▪ értékek egy-egy ún. tartományból (domain) kerülnek ki (D​1​D​2​, … ,D​n​)
▪ A tartományok D​1​x D​2​x ... x D​n​Descartes-szorzatában megtalálhatók mindazok a (v​1​,v​2​,... ,v​
n​) n-esek
(tuple, n-tuple, elem, rekord, ennes), amelyekre igaz, hogy v​i​є D​i​, i = 1,2,..., n-re.
● oszlopok-attribútumok
● sorok-a reláció elemei
● Kardinalitás:​​Az egyes attribútumok különböző értékeinek száma
● Relációs séma(relational schema) :​​melyik relációban milyen attribútumok találhatók (nagybetű)
● Adatbázis séma:​​egy adatbázis több relációs sémát is tartalmaz, akkor a relációs sémák összességének neve
● Reláció foka (arity, aritás) :​​A relációban lévő oszlopok (attribútumok, tartományok, tulajdonságok) száma
● Reláció számossága:​​A relációban lévő sorok száma (a konkrét előfordulások száma)

3
Műveletek relációkon
Relációs algebra:​​a relációkon megengedett műveletek épül fel a relációs algebra

űveletek:​​(zártak a relációk halmazára, tehát relációból relációkat állítanak elő)


Alapmű

● Egyesítés, unió (set union):


o ugyanannyi oszlop az egyesítendő relációknál!!!
o ha van kettő ugyanolyan, csak egyszer veszem őket

● K​
ülönbségképzés (set difference)
o megkötések, mint az egyesítenél
o metszetet(set intersection) képezhetünk belőle :
A B = A \ (A\B)

● Descartes szorzat
o az r​1​x r​2​Descartes-szorzat eredménye az összes olyan
(n​1​+ n​2​)-esekből áll, amelyeknek első n​i​attribútuma az
első operandusból, második n​2​attribútuma a második
operandusból származik, ebben a rögzített
sorrendben
o nincs semmilyen megkötés

● Vetítés (projection)
o reláció összes rekordjának egyes attribútumait megtartjuk, a többit pedig töröljük (oszlopok között
válogatunk)
o Ha az attribútum elemei megegyeznek, csak egyet veszek fel, mert egyedinek kell lennie!
o Jelölése: π​MELYIK ATTRIBÚTUMOKAT AKAROM​(Melyik relációból)
o Példa: ​GÉPKOCSI(ÁR, RENDSZÁM, ÉVJÁRAT, ELSŐ_TULAJDONOS, VIZSGA_ÉRVÉNYESSÉGE,
TÍPUS, FOGYASZTÁS) ​→​ πTÍPUS,ÉVJÁRAT,FOGYASZTÁS
​ ​(gépkocsi)​Ekkor a vetítés a gépkocsi reláció n-
eseiből csak a TÍPUS, ÉVJÁRAT, FOGYASZTÁS azonosítójú attribútumoknak megfelelő hármasokat tartja meg.

● Kiválasztás (selection)
o egy részhalmaz képzése az r reláción, amelynek vezérlésére egy logikai formula szolgál. Az r reláció minden
elemére kiértékeljük a formulát, és azokat az elemeket vesszük be az új relációba, amelyekre a formula igaz
értéket vesz fel (sorok között válogatunk)
o Jelölése: σ​F​(r), ahol F a logikai formula (szelekciós feltétel)
o A logikai formula a következő elemeket tartalmazhatja:
▪ konstansokat vagy R attribútumainak azonosítóit,
▪ aritmetikai összehasonlító operátorokat (< = > ≤ ≥) és
▪ logikai operátorokat ( ⌐ V)
o Példa: A σ​KOR<23 NÉV =’Kovács’​(névsor) kifejezés a névsor reláció azon elemeinek halmazát jelenti, amelyeknek KOR
azonosítójú attribútuma kisebb huszonháromnál, NÉV azonosítójú attribútuma pedig Kovács

Származtatott műűveletek

● Természetes illesztés (natural join)


o Adott két reláció, amelyeknek tipikusan van legalább egy - de akár több - megegyező nevű attribútuma
1. válasszuk ki azokat, ahol a megegyező nevű attribútumok értékei szerint is megegyeznek
2. fűzzük össze, hogy az azonos nevű és értékű attribútumok, csak egyszer vesszük figyelembe
o Descartes-szorzat, szelekció és projekció egymás utáni alkalmazása
o alapműveletekkel leírva:

o Példa lépésenként:

4
o Példa (relációs sémákkal):
▪ OSZTÁLY (NÉV, OSZT_NÉV)
▪ SZEMÉLY (NÉV, LAKCÍM, SZÜL_DÁTUM)

● θ-illesztés (θ
θ-join, theta join)
o r és s két reláció, θ pedig egy kvantormentes
feltétel, melyet az r és s relációk egy-egy
attribútuma között definiálunk.
o Jelölése:

● Hányados (division)
o az s-sel alkotott Descartes-szorzata a lehető
legbővebb részhalmaza r-nek
o (r÷s) x s részhalmaza r

Relációs lekérdező nyelvek (relational query languages)


A ​relációs algebra(interaktív szemléletűű, hogyan akarom elérni)​​segítségével megfogalmazott adatbázis lekérdezéseknél
explicit módon​​elő kell írnunk, hogy mely reláción vagy relációkon milyen műveleteket milyen sorrendben kell elvégeznünk
ahhoz, hogy a kívánt eredményt megkapjuk. ​A logikai, kalkulus alapú nyelvek(deklaratív szemléletűű, mit akarok elérni) ​
csak
azt igénylik, hogy az ​eredményhalmaz elemeinek tulajdonságaira​​vonatkozóan megfogalmazzuk az elvárásunkat.

Pontosan akkor teljes, ha a segítségével az 5 alapművelet kifejezhető.

Relációs sorkalkulus:
elsőrendű nyelv, amely tehát kvantorokat (quantifier) is tartalmazhat és a kvantorok sorvektor változókat kvantifikálhatnak.

● Felépítése:​​szimbólumból -> atomok (alapformulák) -> formulákká építhető össze -> kifejezésbe építve relációkat
írhatunk le
o Szimbólumai:
▪ zárójelek: ( , )
▪ aritmetikai rclációjclek: <, >, =, ≥, ≤, ≠
▪ logikai műveleti jelek: ⌐ V
▪ sorváltozók: s​(n)​[i] változós
▪ sorváltozók komponensei: s​(n)​[i], ahol 1 ≤ i ≤ n

5
▪ (konstans) relációk: R​(m)​, m változós
▪ konstansok: c
▪ kvantorok: ,
o atomok (atomic formulae)
felépítése:

o formulák (formulae) felépítése:

o Kifejezések (expressions) felépítése:

● Interpretációs halmaz (domain of discourse):​​az interpretációban (értelmezésben) rögzített változók és konstansok


felvehető értékeinek halmaza

● Igazságértékek (truth valuse) meghatározása:

● TÉTEL:

6
o Kifejezőereje legalább olyan erős mint a relációs algebráé
o Megfordítása semmiképpen nem igaz
● Biztonságos (sorkalkulus) kifejezés (safe tuple relational calculus):
o sorkalkulus kifejezés kiértékelhető legyen számítógépben kezelhető méretű relációk/véges idő mellett is
o

o Módszerek a biztonságosság eldöntésére:

o Formula doménje (domain):


▪ le kell szűkíteni azon változóértékek halmazát, amelyek a sorkalkulus kifejezés formuláját igazzá
tehetik egy olyan halmazra, amely magából a bemeneti relációkból és esetleges egyéb konstansokból
áll. Ez a halmaz a formula doménje, DOM(ψ) lesz.
▪ DOM(ψ) = { ψ -beli alaprelációk összes attribútumának értékei} U { ψ -ben előforduló konstansok}
o A relációs algebra és a biztonságos sorkalkulus kifejezőereje ekvivalens

Relációs oszlopkalkulus (domain relation calculus)


Abban különbözik a sorkalkulustól, hogy sor- (vektor-)változók helyett egyszerű változók szerepelnek benne.

Felépítése, interpretációja a sorkalkuluséhoz igen hasonló, ezért csak a különbségek vannak felsorolva

● Szimbólumai:
o …
o oszlopváltozók: u​i
o …
● Az atomok felépítése:
o

● Formulák felépítése ugyanaz teljesen


● Kifejezés felépítése:

● TÉTEL:

3.Gyakorlat: A fizikai adatbázis

● Diszkrezidens adatbázis(DRDB) -> mágneslemezes tárolás


● Memóriarezisztens adatbázis (IMDB) -> teljes adatbázist a memóriában tárolják
● fájlok: ​az adatbázis az adatait itt tárolja (állomány)
● blokk:​​operatív tár és háttértár közötti adatmozgás elemi egysége. A fájlok azonos méretű blokkokból épülnek fel.
o oprendzser tartja nyílván , mely állományhoz mely blokkok tartoznak
7
o logikai cím:​​bármi, ami egyértelműen alkalmas az adategység azonosítására
o fizikai cím:​​konkrétan megmondja, hol kezdődik a blokk + megmondhatom, hányadik rekord kell
o egyetlen fejmozgatással és be-/kimeneti (input/output, I/O) művelettel a blokk elérhető, adatai az operatív
tárba (memory) juttathatók
● CÉL:​​keresés, beszúrás, törlés és a módosítás műveletek
minél gyorsabban való elvégzése
● Időigény: alapvetően az fogja meghatározni, hogy egy
blokk tartalmáért hányszor kell a háttértárhoz fordulni
(blokkműveletek száma a lehető legkisebb legyen)
● Egy blokk felépítése: kép fenn
● EGY BLOKKBAN EGÉSZSZÁMÚ REKORD FÉR EL!!!!!
● Egy rekord felépítése: kép
o Kötött (Pinned) rekord:​​ha mutató (pointer)
mutat rá
o Szabad (Unpinned) rekord​​: ha nem mutat rá mutató
o rögzített vagy változó hosszúságú is lehet
o headerben van egy törlőbit, ami megmondja, hogy élő vagy sem a rekordom
● Rövidítések:
o b​​– blokk méret (fejléc nélkül)
o n​​r​– hány rekord van az állományban (number of records)
o s​​r​​– rekord mérete (size of record
o f​r​​​– egy blokkban elhelyezhető rekordok száma (blocking factor)
o b​​r​​​– fájl által elfoglalt blokkok száma

Heap szervezés (heap file organization)


Az adatokat (legalább) annyi blokkban tároljuk, amennyit a rekordok száma és mérete megkövetel/igényel, de nem rendelünk
hozzá semmilyen kiegészítő/segéd-struktúrát.

● Keresés:
A keresési kulcs alapján egyetlen rekordot tudunk azonosítani (egyediek), egymás után beolvassuk a háttértárból a
blokkokat, majd végig olvassuk. Addig folytatjuk, amíg, nincs meg amit keresünk (lineáris keresés)
o Időigénye: (Blokkok száma +1)/2

● Törlés:
1. keresés az előbb leírt szerint
2. fejlécben jelezzük, hogy a terület felszabadult (törlés bit = 1)
3. megváltozott blokkot visszaírni háttértárra
4. (időnként, a felszabadult és szétszórt lemezterületeket szükséges összegyűjteni)
o időigénye: (Blokkok száma +1)/2

● Beszúrás:
o Ügyelni, hogy beszúrás után is egyediek maradjanak a rekordok

8
o keresés
1. először a törlés által felszabadított területeken, ha nincs hely akkor állomány végében
2. ha ott sincs kérni, hogy bővítsék az állományt (komplex)
3. +1 blokkművelet

● Módosítás:
o Ha az egyediség nem sérül
1. keresés
2. felülírás
3. visszaírás

Hash-állományok
Legegyszerűbb:

● Minden rekordhoz egy egyértelmű címet rendelünk az ún. hash-függvény segítségével.


o rekord K (keresési) kulcsát egyértelműen képezi le egy intervallumra (legalább akkora, mint a rekordok max
száma)
o rekord kulcsával egy számítás segítségével megkaphatjuk a tárolási helyét
o így elég rosszul használja ki a háttértárat

Vödrös hash-eslés (bucking hashing):

● Adatállomány osszuk fel B (bucket) részre, minden rész


legalább egy blokkból álljon
● B számú mutató létrehozás, vödörkatalógus (hash
table) , ahol minden mutató az állomány egy-egy
blokkcsoportjának (vödörnek) a címét tartalmazza
● Hash-függvény definiálása
● lényege az, hogy azt a rekordot, amelyiknek a kulcsa K
értékű, mindig a h(K)-adik vödörben kell tárolni
● hatékonysága a hash-fv megalkotásán múlik (gyakran
használt: h (K) = (c * K) mod D)

● Keresés
1. Meghatározzuk a rekord kulcsát : K
2. kiszámítjuk h(K)-t
3. Kiolvassuk a vödör katalógus h(K )-adik bejegyzését, ezen a címen kezdődő vödörben kell a rekordnak
lennie, ha egyáltalán benne van,
4. A vödrökön belül tulajdonképpen lineárisan kereüsnk
o Időigény: 1/(2B) , (1+(N/B)) /2

● Beszúrás:
o Egyediség megőrzése!
1. Kiszámoljuk h(K)
2. kiolvassuk h(K)-adik elemet a katalógusból
a) végig keressük az így meghatározott vödröt a K kulcsú rekord után -> ha van -> hibaüzenet
b) ha nincs-> első szabad vagy törölt helyre beírjuk, beállítjuk a törölt bitet
c) ha minden hely foglalt -> új blokk hozzáfűzése a vödörhöz
● Törlés:
1. Keresés
2. Törölt bit beállítása
3. Visszaírás

9
● Módosítás:
o Ha nem érinti a kulcsmezőt
1. keresés
2. művelet elvégzése
3. visszaírás
4. (ha nem találtuk a rekordot -> hibaüzenet)
o Ha érinti a kulcsmezőt
1. Törlés
2. Módosítás

● gyors, ha a vödrök hossza kicsi


● intervallumkeresést nem támogatja

Indexelt állományok
Keresés kulcsát egy ún. indexállományban (kb. katalógus)
megismételjük, és a kulcshoz egy mutatót rendelünk, amely a
tárolt adatrekord helyére mutat

● k-kulcs, key
● p-mutató, pointer
● Blocking factor:
● RENDEZETT AZ INDEXÁLLOMÁNY
● indexállomány rekordjai szabadok, könnyen
mozgathatók, jól karbantarthatók

Ritka index (sparse indices)


● ~szótárak
● ISAM spaciális eset (egyszintes ritka indexelés)
● indexrekordot rendelünk adatrekordok egy
csoportjához, tipikusan az egy blokkban
levőkhöz (n​ri​= b​r​)
● egy blokkon belül az adatrekordok szabad
rekordoknak tekinthetők
● ADATÁLLOMÁNY IS RENDEZETT (egy blokkban
kell, hogy legyen minden olyan adatrekord,
amelyeknek a kulcsa egy meghatározott
intervallumba esik)
● Az adott blokkra mutató indexrekord a blokk címét, valamint a legkisebb (vagy a legnagyobb) értékű kulcsot fogja
tartalmazni
● Blokkok száma :

● Keresés:​​intervallumfelezgetéssel (bináris keresés -> logN )


o k​1​kulcsú rekordra van szükségünk. Az indexállományban megkeressük azt a rekordot, amelyiknek k​
2​kulcsa a
legnagyobb azok közül, amelyek még kisebbek k​1​-nél (vagy éppen egyenlő vele)
o k​2 ​kulcsú indexrekord mutatója megcímzi azt a blokkot, amelyet végig kell keresni

10
● Beszúrás:
o Egyedileg tudjuk azonosítani, minden rendezett tehát meg van a helye
o Megkeressük a blokkot
1. Ha van hely: a rekordot beírjuk a helyére
2. Nincs hely, helyet kell csinálni
a) B​i​blokk rekordjainak számát (beleértve a k​i​kulcsút is)
megfelezzük B​i​és B​n​között
b) Meghatározzuk mindkét blokkban a legkisebb kulcsú rekordot
c) B​i​-hez tartozó indexrekordban szükség esetén korrigáljuk a
kulcsmező értékét
d) B​n​-hez tartozó legkisebb kulccsal és B​n​címével új indexrekordot képezünk (esetleg
indexállományt is újra rendezni) (+2 blokkművelet)
● Törlés
1. Keresés
2. Ha nem a legkisebb a keresett kulcs: egyszerűen törüljük
3. Ha a legkisebb, akkor az indexállományt is korrigálni
4. Ha az egyetlen volt, akkor a rá mutató indexrekordot is törölni kell, az üres adatblokkot pedig fel kell
szabadítani
o Időigény: keresés + 1blokkművelet

● Módosítás
o Nem érinti a kulcsot:
1. keresés
2. elvégezni a műveletet
3. visszaírás
o Érinti a kulcsot
1. keresés
2. törlés
3. beszúrás

B*-fák, mint többszintes ritka indexek


● keresést gyorsítani az indexben-> index az indexre
● Időigény: log​k​b​i (k-ágú
​ fa, i indexállomány blokkjainak száma)
● Addig építjük az indexet, amíg csak 1 blokk nem lesz
● /Mi most csak a balanced fáról beszélünk/
● indexblokkok első kulcsérték bejegyzése nB*em hordoz információt
● Blocking factor:

● Height of Tree:

● Keresés:​​mint az egyszintűnél, csak az


indexállományban több lépés

● Beszúrás:​​mint az egyszintes, csak ügyelni kell a fa


kiegyensúlyozottságára!!

● Törlés:
1. Keresés
2. Törlés
3. Összevonás lehetőség szerint
4. Ha utolsó rekord -> kulcsot is ki kell venni

11
● Módosítás:​​azonos kb mint az egyszintes

Sűrű index (dense indices)


● Ugyanannyi adatrekord, mint indexrekord
● blokkok száma:
● Hátrányok:
o a sűrű indexnek plusz helyigénye van,
o eggyel több indirekció kell egy rekord kiolvasásához,
o plusz adminisztrációval jár a sűrű index karbantartása.
● Viszont:
o az adatállományt nem kell rendezetten tárolni, így helyet takaríthatunk meg,
o meggyorsíthatja a rekordelérést, mert a ritka index mérete jóval kisebb is lehet, mint sűrű index nélkül,
o támogatja a több kulcs szerinti keresést,
o az adatállomány rekordjai (csaknem) szabadokká tehetők, ha minden további rekordhivatkozás a sűrű indexen
keresztül történik (egyetlen mutatót kell megváltoztatni)
● Keresés:
o indexállományban megkeressük a kulcsot
o hozzátartozó mutatóval elérhetjük a tárolt rekordot

● Törlés:
1. keresés
2. törlés bit beállítása
3. kulcsot kivesszük az indexállományból (időnként tömörítjük)

● Beszúrás:
o üres hely keresése
1. ha nincs:
a) állomány végére,
b) foglalási jelzést beállítjuk
c) beírjuk az adatot
d) berendezzük az indexállományba

● Módosítás:
o keresés az adatblokkot
o módosítás
o visszaírás
o (ha módosítás kulcsmezőt is érintett, akkor az indexállományt újrarendezzük)

Invertálás
● Szélsőséges esetben akár minden mező lehet ún. keresési kulcs
● invertált állomány (inverted file): Az az indexállományt, amely nem kulcsmezőre tartalmaz indexeket
o mutatói:
▪ fizikai, amelyek mutathatnak:
● közvetlenül az adatállomány megfelelő blokkjára (esetleg közvetlenül a rekordra)
o adatállomány rekordjai kötöttek és ráadásul csak egyetlen invertált állomány esetén
használható.
● az adatállomány elsődleges kulcsa szerinti
(sűrű) indexállomány megfelelő rekordjára
o eggyel több indirekción keresztül
érjük el a keresett rekordot

12
▪ logikai mutatók, amelyek az adatállomány valamely
kulcsának értékét tartalmazzák

//itt kimaradt a változó hosszúságú rekordok kezelése és a részleges info alapján történő keresés (jegyzet 37-38.oldal)

4.Gyakorlat: Relációs lekérdezések optimalizálása


A lekérdezés feldolgozás tipikus lépései:

Összefoglalva: optimalizációs stratégiák alapján végrehajtási terveket kell készíteni, amelyeket előbb értékelni kell, majd
közülük a legjobbat kiválasztva azt végrehajtani

● Az automatikus optimalizáló előőnyei:


o Szélesebb ismeret a letárolt adatértékekről.
o Gyorsabb numerikus kiértékelési mechanizmus.
o Szisztematikus értékelés.
o Algoritmusa több szakember együttes tudását hordozza.
o Dinamikusan, minden művelet előtt, az aktuális feltételeket figyelembe véve értékelődik ki.
● Az emberi optimalizálás előőnyei:
o Szélesebb általános ismeret, a probléma szemantikai tartalmának felhasználása lehetséges.
o Nagyobb szabadság a felhasználható módszerek, eszközök tekintetében.
o Váratlan helyzetekre jobban felkészült.

Relációs algebrai fa (relational algebra tree):​​primitív műveletek a relációs algebra műveletei, akkor a primitív műveletek
szekvenciája

Végrehajtási terv (execution plan): ​milyen algoritmusokat alkalmazunk, milyen fizikai segédstruktúrákat használunk, és hogy
az egymásra épülő műveletek párhuzamossága hogyan alakul. A relációs algebrai fa az előbbi információkkal kiegészítve

Katalógus költségbecslés
A becslés elvégzéséhez az adatbázis-kezelő rendszernek a relációkról különböző statisztikákat, mérőszámokat kell
karbantartania. Mindig frissíteni kéne ->terhelés -> csak akkor ha „van rá idő”-> nem mindig konzisztens. A katalógusban
tároljuk.

13
Katalógusban tárolt egyes relációkra vonatkozó információk
● n​ ​
r​:​ az r relációban levő rekordok (elemek) száma (number)
● b​ ​
r​:​ az r relációban levő rekordokat tartalmazó blokkok (blocks) száma
● s​​ ​​az r reláció egy rekordjának nagysága (size) bájtokban
r​:​
● f​​ ​​mennyi rekord fér az r reláció egy blokkjába (blocking factor)
r​:​
● V(A,r):​​hány különböző értéke (Values) fordul elő az A attribútumnak az r relációban. V(A,r) = |π​A​(r)|. Speciálisan, ha
az A kulcs, akkor V(A,r) = n​r​.
● SC(A,r):​​azon rekordok átlagos száma, amelyek kielégítenek egy egyenlőségi, feltételt az A attribútumra (Selection
Cardinality), feltéve, hogy legalább egy rekord kielégíti ezt az egyenlőségi feltételt.
Például, ha az A egyediséget biztosít, akkor SC(A,r) = 1. Ha az A nem biztosít egyediséget, és feltesszük, hogy a V(A,r)
különböző érték egyenletesen oszlik el a rekordok között, akkor SC(A,r) = .

Katalógus információk az indexekről


● f​​​:​
i​ ​az átlagos pointer-szám a fa struktúrájú indexek csomópontjaiban, mint pl. a B* fáknál, azaz a csomópontokból
induló ágak átlagos száma.
● HT​ ​​:​​az i index szintjeinek a száma, azaz az index magassága (Height of Tree). Az r relációt tartalmazó heap-szervezésü
i​
állományra épített B* fa esetén ill- hash-állománynál Ht​i​= 1.
● LB​ ​ ​​az i index legalsó szintű
i​:​ blokkjainak a száma, azaz a levélszintű indexblokkok száma (Lowest
level index Block).

Költség meghatározása

Költség​
: háttértár blokkolvasások és írások száma a válasz kiírásának költsége nélkül
E​ : az algoritmus becsült költsége (Estimate)
alg​

● Meghatározása:
o igényelt és felhasznált erőforrások alapján?
o válaszidő alapján?
o kommunikációra fordított idő alapján?

Műveletek költsége
Szelekció:
Egy reláció végigolvasása a legalacsonyabb szintű művelet

Alap szelekciós algoritmusok:

● Lineáris keresés​​(„full table scan”): Minden rekordot beolvasunk, és megvizsgáljuk, hogy kielégíti-e a szelekció
feltételét. E = b​r
● Bináris keresés:
o Feltétele:
▪ Blokkok folyamatosan a diszken
▪ Az ​𝐴​attribútum szerint rendezettek
▪ Szelekció feltétele az egyenlőség az ​𝐴​attribútumon
o Költsége:

Indexelt szelekciós algoritmusok

● ődleges index: ​a rekordok olyan sorrendben való olvasását teszi lehetővé, amely megfelel a rekordok fizikai tárolási
Első
sorrendjének
● Másodlagos index: ​minden egyéb
● ődleges index használatával, egyenlőőségi feltételt a kulcson vizsgálva:
Első
o Költsége:

14
● ődleges index használatával, egyenlőőségi feltétel nem kulcson
Első
o (a nemkulcs attribútumon van az elsődleges index)
o költsége:

● Másodlagos index használatával


o költsége:

Összehasonlítás alapú szelekció – σ​A ≤v​(R)


Eredményrekordok számának becslése:

● Ha v-t nem ismerjük:

● Ha v-t ismerjük, egyenletes eloszlás esetén:


● ődleges index használatával:
Első
o Ha v-t nem ismerjük:

o Ha v-t ismerjük: ahol c azon rekordok száma, ahol A≤v

● Másodlagos index használatával:


o Költség:

Join operáció
Típusai:

● Természetes illesztés (natural join):


● Theta join
● Külső illesztés
o Bal oldali külső illesztés​: t​1​* (+)t​2​. Azt jelenti, hogy az eredmény- táblában t​1​azon sorai is szerepelnek, amelyek
t​2​egyetlen sorával sem párosíthatók. Ezen sorokban a i​2​-beli attribútumok értéke NULL.
o Jobb oldali külső illesztés:​t​1​(+) * t​2​. Hasonlóan a t​2​táblára,
o Teljes külső illesztés​: t​1​(+) * (+)t​2​. Itt mindkét tábla nem párosított rekordjai megőrződnek.

Egymásba ágyazott ciklikus illesztés (nested loop Join)

● egy általános algoritmus két reláció (r és s) theta-join


műveletének implementálására
● „worst case” költség: ​𝑛​𝑟​⋅𝑏​𝑠​+​𝑏​𝑟
● ha legalább az egyik befér a memóriába, akkor a költség: ​𝑏​𝑟​+​𝑏​𝑠

Blokkalapú egymásba ágyazott ciklikus illesztés (block nested loop


join)

● blokkalapú rekord-összehasonlítást végez: a belső két ciklus


összehasonlítja a két reláció egy-egy beolvasott blokkjának
minden rekordját, a külső kettő pedig végigmegy a két reláció
összes blokkján
● „worst-case” költsége: ​𝑏​𝑟​⋅𝑏​𝑠​+​𝑏​𝑟
● sok memóriával: ​𝑏𝑟​
​+​𝑏𝑠​

Indexalapú egymásba ágyazott ciklikus illesztés (indexed nested loop join)

15
● Egyik relációhoz van indexünk
● Tegyük az első algoritmus belső ciklusába az indexelt relációt ​⟹​A keresés index alapján kisebb költséggel is
elvégezhető
● Költség : ​𝑏​𝑟​+​𝑛​𝑟​⋅𝑐, ahol 𝑐 a szelekció költsége 𝑠-en.

Összefésülés alapú illesztés (merge join)

● mindkét relációt először rendezzük az illesztési feltételnek megfelelő attribútum


● Ezután már elég csak (szinkronban) végigolvasni mindkét relációt, hiszen az illeszkedő elemek a rendezés
következtében egymás után kerültek
● Költsége: ​𝑏​𝑟​⋅𝑏​𝑠​+​a

Hash illesztés (hash join)

az egyik relációt hash-táblán keresztül érjük el, miközben a másik reláció egy adott rekordjához illeszkedő rekordokat keressük

űveletek
Egyéb mű

● Ismétlődés kiszűrése
o rendezés, majd törlés
o Költség: a rendezés költsége
● Projekció
o projekció, majd ismétlődés kiszűrés
o b​r​+ rendezés költsége
● Unió
o mindkét relációt rendezzük, majd összefésülésnél kiszűrjük a duplikációkat
● Metszet
o mindkét relációt rendezzük, fésülésnél csak a másodpéldányokat hagyjuk meg
● Különbség
o mindkét relációt​​rendezzük, fésülésnél csak első relációbeli rekordokat hagyunk

Kifejezés kiértékelés
Materializáció: ​összetett kifejezésnek egyszerre egy műveletét értékeljük ki valamilyen rögzített sorrend szerint

● Kanonikus alak:
● Eredő költség: a végrehajtott műveletek költsége + részeredmények tárolásának költsége
● Előnye:
o egyszerű implementálhatóság
● Hátrány:
o sok háttértár-művelet

Pipelining:

● egyszerre több elemi művelet szimultán kiértékelése folyik


● egy operáció eredményét azonnal megkapja a sorban következő operáció operandusként
● nem számítja ki előre az egész relációt
● Előnye:
o kiküszöböli az ideiglenes tárolás szükségességét
o kis memóriaigény
● Hátránya:
o szűkíti a felhasználható algoritmusok körét

Kiértékelési terv kiválasztása:

● milyen műveletek
● milyen sorrendben

16
● milyen algoritmus szerint
● milyen workflow-ban

Költség alapú optimalizálás:

● Mohó és egyben rossz


o Minden ekvivalens kifejezés felsorolása
o Minden forma kiértékelése
o Az optimális kiválasztása

Heurisztikus költség alapú optimalizálás:

1. Kanonikus alakból kiindulás (Descartes-szorzatokat, szelekciókat és projekciókat tartalmaz ilyen sorrendben)


2. Szelekciók süllyesztése
a. Bontsuk szét a szelekciók konjunkcióját szelekciók szorzatára, hogy minden szelekciónak csak egy tényezője
legyen.
b. Vándoroltassuk lefelé a szelekciókat
3. Levelek átrendezése
4. Mely szelekció és jóin eredményezi a legkisebb (= legkevesebb rekordot tartalmazó) relációkat
5. join megegyezik a Descartes-szorzattal, ha ezt egy szelekció követi, akkor vonjuk össze a kettőt egy jóin műveletté, így
kevesebb rekordot kell generálni.
6. Projekciók süllyesztése
7. Keressük meg azokat a részfákat, ahol csővezetéket lehet alkalmazni.

Relációs kifejezések transzformációi


Relációs algebrai transzformációk, ekvivalencia szabályok

1. Szelekció kaszkádosítása

2. A szelekció kommutativitása

3. Projekció kaszkádosítása:

4. A θ -illesztés és a Descartes-szorzat kapcsolata

5. A θ -illesztés kommutativitása

6. A természetes illesztés asszociativitása

17
7. A szelekció művelet disztributivitása a θ -illesztés felett, ha a θ​0​csak E​i​-beli attribútumokat tartalmaz:

8. A projekció disztributív a θ -illesztés felett, ha L​i ​és L​2​E​i​, illetve E​2​- beli attribútumokat tartalmaz, és az illesztés
feltételében csak L​i​U L​2​-beli attribútumok vannak:

9. A metszet és az unió kommutativitása:

10. Az unió és a metszet asszociativitása

11. A szelekció disztributív az unió, a metszet és a különbség műveletek felett:

12. A projekció disztributív az unió művelet felett

18

You might also like