1010 lines
49 KiB
Org Mode
1010 lines
49 KiB
Org Mode
#+TITLE: Adatbázisok tételek
|
|
#+AUTHOR: Toldi Balázs Ádám
|
|
#+OPTIONS: H:5
|
|
#+LaTeX_HEADER: \setcounter{secnumdepth}{5}
|
|
|
|
* Adat, információ, tudás. Metaadatok. Strukturált, szemistrukturált és nem strukturált adatok
|
|
** Adat
|
|
A körülöttünk lévő világ egy része,ami értelmezhető ugyan,de nem értelmezzük.
|
|
** Információ
|
|
Az adathoz redelünk egy értelmet,egy jelentést.
|
|
** Tudás
|
|
Kontextusba helyezett információ.
|
|
** Metaadat
|
|
Adat, az adatról. Segéd adatok.
|
|
*** Szerkezeti(Strukturális) metaadat
|
|
pl. Hol található egy file fizikailag
|
|
*** Szemantikus(Üzleti információs) metaadat
|
|
Hogyan kell értelmezni egy adatot.
|
|
*** Üzemeltetési metaadat
|
|
Mi történt az adatokkal.
|
|
pl. mikor lett módosítva.
|
|
** Struktúrált adat
|
|
Olyan adat,amire struktúrális $\text{metaadat} << \text{adat}$ .
|
|
*** Semi-struktúrált adat
|
|
Olyan adat,amire struktúrális $\text{metaadat} \approx \text{adat}$ .
|
|
*** Nem struktúrált adat
|
|
Olyan adat,amihez egyáltalán nem értelmezünk.
|
|
* Adatbázis-kezelő fogalma, feladatai, felépítése, használói
|
|
** Adatbázis kezelő fogalma
|
|
Az adatbáziskezelő, olyan hardware- softwarerendszer, amelyet 3 fő tulajdonság
|
|
jellemez:
|
|
- nagy adatmennyiség
|
|
- gazdag struktúra
|
|
- hosszú életciklus
|
|
** Feladatai
|
|
*** Adatok sémájának meghatározása
|
|
A felhasználónak meg kell tudnia határoznia az adatbázis sémáját,azaz az adatok
|
|
logikai rendjét. Ezt tipikusan egy adatdeviníciós nyelven teheti meg(data
|
|
definition language,DDL). Ezeket az ún. technikai metaadatokat egy speciális
|
|
védett helyen kerülnek eltárolásra
|
|
*** Adatok tárolása
|
|
A séma meghatározása után felvehetünk adatadokat az adatbázisba.
|
|
*** Hozzáférés az adatokhoz
|
|
A felhasználónak lehetősége lehet az egyes adatok megkeresésére, módosítására,
|
|
valamint törléásére. Ezt tipikusan egy adatlekérdező és -manipulációs nyelven
|
|
teheti meg(data manipulation language,DML).
|
|
*** Adatbázis-menedzser
|
|
A DBMS központi része az adatbázis-menedzser (database manager), amely a
|
|
lefordított séma alapján kezeli a felhasználói lekérdezéseket
|
|
*** Adatvédelem(privacy)
|
|
Nem minden felhasználó férhet hozzá minden adathoz. A kölönböző felhasználókhoz
|
|
külön jogokat rendelünk. Lehet olyan felhasználó,aki csak a olvasni tudja a
|
|
tárolt adatokat, lehet olyan felhasználó, aki olvasni és módosítani is tudja az
|
|
adatokat,de lehet olyan is,aki egyáltalán nem fér hozzá az adatokhoz.
|
|
*** Adatbiztonság(security)
|
|
Bizonyos adatok, igen nyagy értéket képviselhetnek, és ezért semmi képpen nem
|
|
toleráljuk elvesztésüket,vagy részleges elvesztésüket. Ezért különböző
|
|
eszközöket alkalmazunk az adatok biztonsága érdekében. Pl. naplózás,rednszeres
|
|
mentés,kettőzött állományok elosztott működés, stb.
|
|
*** Integritás
|
|
Fontos,hogy az adabázisban tárolt adatok helyesek legyenek, ne legyenek
|
|
ellentmondások. Ezért ezeket ellenőrizni kell.
|
|
**** Formai ellenőrzés
|
|
Ez viszonyla egyszerú elvégezni. Csak meg kell nézni hogy az adat megfelel-e egy
|
|
elvárt formának. Pl. egy keresztnév nem tartalmaz számokat vagy testmagasság nem
|
|
lehet három és fél méter (domain sértés).
|
|
**** Referenciális integritás
|
|
Számos esetben kell annak a feltételnek teljesülnie, hogy az adatbázisból az egyik
|
|
helyről kiolvasott adatelemnek meg kell egyeznie valamely más helyről kiolvasott
|
|
másik adatelemmel
|
|
**** Strukturális integritás
|
|
Ellenőriznünk kell, hogy nem sérült-e meg valamely feltételezés, amelyre az
|
|
adatbázis szerkezetének megtervezésekor építettünk. Gyakori hiba, az
|
|
egyértelműség megszűnése(pl több feleség). Ide tartoznak az adatbáziskényszerek
|
|
ellenőrzése is.
|
|
*** Szinkronitás
|
|
Fontos,hogy a különböző felhasználók által, egyidőben végzett műveleteknek ne
|
|
legyenek nemkívánatos mellékhatásai. Ezt tanzakciókezeléssel módszereivel oldjuk
|
|
meg. pl. zárak.
|
|
** Felépítése
|
|
A felépítésének leírásához egy rétegmodellt alkalmazunk. A legegyszerűbb
|
|
adatbázis kezelő modelle 3 rétegből áll:
|
|
*** Fizikai adatbázis
|
|
Itt valósul meg az adatok,valamint az adat struktúrák fizikai tárolása.
|
|
*** Fogalmi(logikai) adatbázis
|
|
Ez a való világ egy részének leképezése,egy sajátos modell,ahogyan az adabázis
|
|
tükrözi a valóság egy részét.
|
|
*** Nézetek
|
|
Ez az amit a felhasználók látnak. Az adatbázisban szereplő adatok és metaadatok
|
|
egyes megjelenítései.A nézetekhez tartozó sémákat gyakran külső sémának
|
|
(external schema) is nevezik.
|
|
** Felhasználói
|
|
*** Képzetlen felhasználó (naive user)
|
|
A felhasználók legszélesebb rétege, akik csak bizonyos betanult ismeretekkel
|
|
rendelkeznek a rendszerről.
|
|
*** Alkalmazás programozó
|
|
Az a szakember, aki a (képzetlen) felhasználó által használt programot készíti
|
|
és karbantartja. Ez olyan feladat, amely programozót igényel, de megoldásához
|
|
nem feltétlenül szükséges, hogy az illető belelásson az adatbázis belső
|
|
szerkezetébe is.
|
|
*** Adatbázis adminisztrátor
|
|
Hagyományosan így nevezzük azt a személyt, aki az adatbázis felett
|
|
gyakorlatilag korlátlan jogokkal bír. Kizárólag ő végezhet egyes
|
|
feladatokat,mint pl:
|
|
**** Generélás
|
|
Adatbázisok létrehozása, szerkezetének kialalítása.
|
|
**** Jogosultságok karbantartása
|
|
A hozzáférések jogának naprakészen tartása, módosítása.
|
|
**** Szerkezetmódosítás
|
|
Az adatbázis eredeti szerkezetének
|
|
**** Mentés-visszaállítás.
|
|
Célszerű lehet adatbiztonsági okokból időnként vagy bizonyos időközönként
|
|
másolatot készíteni az adatbázisról. Ha az adatbázis megsérül, ez a másolat
|
|
teszi lehetővé a visszaállítást a mentés időpontjának állapotába.
|
|
**** DBMS tervező/programozó (DBMS designer/programmer)
|
|
Tudja, hogyan kell DBMS-t készíteni, ami különösen specializált tudást igényel.
|
|
* Heap szervezés
|
|
** Általános jellemzői
|
|
Jelentése halmaz, kupac. Ez a legegyszerűbb tárolási megoldás. Legalább annyi
|
|
blokkot használ fel,amennyit a rekordok száma és mérete megkövetel,de nem
|
|
rendelünk hozzás semmilyen segédstruktúrát.
|
|
** Műveletek heap szervezésben
|
|
*** Keresés
|
|
Mivel nem rendelkezik semmilyen segéd struktúrával ezért lineáris keresést
|
|
alkalmazunk. Ez általánosan $\frac{\text{blokkok száma}+1}{2}$ blokkműveletet
|
|
igényel. (Mivel egy keresés nem végezhető el 0 blokkműveletből,ezért kell a $+1$
|
|
)
|
|
|
|
*** Törlés
|
|
Először meg kell keresni a törlendő rekodot,majd a felécben jelezni,hogy a
|
|
rekord felszabadult. Ezek után a megváltoztatott blokkot vissza kell írni.
|
|
|
|
*Következményei*:
|
|
Az előbb felvázolt metódus egy gyakori következménye a szétszódódott
|
|
lemezterület. Erre megoldást jelenthet a lemezterületek összegyűjtése és
|
|
egyesítése.
|
|
*** Beszúrás
|
|
Először mindenképpen ellenőrizni kell a rekod egyedidégét,majd szabad
|
|
tárolóhelyet kell találni. Ha nincs, állománybővítés szükséges(adminisztrátor
|
|
feladata).
|
|
*** Módosítás
|
|
Először meg kell keresnünk a blokkot,amiben a keresett rekord található. Majd a
|
|
rekord módosítása után a blokkot vissza kell írni a háttértárra.
|
|
* Hash-állományok
|
|
|
|
A hash-címzés során a kesesés kulcsának bitmintájából csonkolás segítségével is
|
|
kinyerhető egy cím, amely alapján a keresett rekord megtalálható.
|
|
|
|
A legegyserűbb változatában egy ún. hash függvényt használunk,ami egy egyértelmű
|
|
címet ad.Ezzel ugyan sokkal gyorsabb a keresés,mint hagyományos módszerekkel,de
|
|
a háttértárakat ebben a formában igen rosszul használja ki.
|
|
|
|
Egy gyakori megoldás erre a vödrös hash-elés,ahol az egyes blokkok vödrökbe
|
|
vannak elhelyezve. Keresés során a hash függvénnyel megkaphatjuk,hogy a keresett
|
|
rekord melyik vödörben található.
|
|
** Műveletek vödrös hash szervezésben
|
|
*** Keresés
|
|
Először lefutattjuk a kulcson a hash függvényt. Ez alapján tudjuk,hogy melyik
|
|
vödörben található a keresett rekord. Ezek után a vödörben lényegében lineáris
|
|
keresést alkalmazunk.
|
|
*** Beszúrás
|
|
Előszür a hash függvény alapján megkeressük,hogy melyik vödörbe tartozik a
|
|
rekord,majd megkeressük a rekord kulcsát a vödörben. Ha megtalátuk akkor,
|
|
hibaüzenetet küldünk. Ha nem találtuk meg,akkor az első szabad vagy törölt
|
|
helyre beírjuk. Végül a módosított blokkot visszaírjuk a háttértárra.
|
|
*** Törlés
|
|
Megkeresés utá a felécben jelezni,hogy a rekord felszabadult. Ezek után a
|
|
megváltoztatott blokkot vissza kell írni.
|
|
*** Módosítás
|
|
Ha nem a kulcs mezőt módosítjuk,akkor az a módosítás a szokott módon történik.
|
|
Ha kulcs mező is módosul akkor a törlés és a beszurás műveletet kell alkalmazni
|
|
egymás után.
|
|
|
|
* Indexelt állományok
|
|
|
|
Az indexelt szervezés alapgondolata: a 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.
|
|
|
|
Az indexállományt mindig rendezve tartjuk. Ha a kulcs numerikus, akkor a
|
|
rendezés triviális. Ha szöveges, akkor lexikografikus rendezést
|
|
alkalmazhatunk. Összetett kulcs (composite key) esetén, vagyis amikor a kulcs
|
|
több mezőből áll, definiálnunk kell a rendezés módját. Általában nincs akadálya,
|
|
hogy több indexállományt is létrehozzunk ugyanazon adatállományhoz,különböző
|
|
(vagy különbözően rendezett) kulcsmezőkkel.Ezért ebben a kontextusban a (keresési) kulcs
|
|
lesz minden, ami szerint egy indexet felépítünk, illetve a keresést végezzük.
|
|
|
|
Két alapvetően különböző megvalósítás lehetséges:
|
|
1. indexrekordot rendelünk minden egyes adatrekordhoz (sűrű index)
|
|
2. indexrekordot rendelünk adatrekordok egy csoportjához, tipikusan az egy
|
|
blokkban levőkhöz. (ritka index)
|
|
|
|
* Ritka index, B*-fák
|
|
** Ritka index
|
|
Ebben az esetben indexrekordot redot az adatrekordok egy csoportjához
|
|
rendeljül. Ez hasonlít a szótárban található első és utolsó szó megjelölése az
|
|
egyes oldalak tetején.
|
|
|
|
*** Keresés
|
|
Keresés során először az index állományon bináris keresést alkalmazunk a
|
|
keresett kulcsra. Ha megtaláljuk, akkor megkapjuk,hogy a keresett rekord melyik
|
|
blokkban található. Ezek után a blokkon belül lineáris keresést alkalmazunk
|
|
(vagy ha rendezett akkor bináris keresést).
|
|
|
|
*** Beszúrás
|
|
Először meg kell keressük azt a blokkot, amelyben a rekodnak lennie kellene, ha
|
|
az állományban lenne. Ha ebben a blokkban van elég hely, akkor a rekordot
|
|
beírjuk a blokkba. Ha nincs , akkor helyet kell csinálnuk neki. Erre egy
|
|
lehetőség lehet az, ha létrehozunk egy új blokkot és a korbábban megtalát blokk
|
|
rekorjait megfelezzük az új blokkal. Ez után frissítenünk kell az index
|
|
struktúrát is az blokkokban található kulcsoknak megfelelően.
|
|
|
|
*** Törlés
|
|
Először megkeressük azt a blokkot,amelyik a rekordot tartalmazza. Ha ebben a
|
|
blokkban nem a legkisebb kulcsot akarjuk törölni,akkor ezt egyszerűen
|
|
elvégezhetjük, a keletkező lyukat pedig mozgatással megszüntethetjük. Ha a
|
|
legkisebb kulcsot töröltük a blokkban akkor az indexállományt is firssíteni
|
|
kell.
|
|
*** Módosítás
|
|
A módosítás egyszerű, ha nem érint kulcsot. Ekkor meg kell keresni a szóban
|
|
forgó rekordot, elvégezni a módosítást, majd az érintett adatblokkot visszaírni a
|
|
háttértárra.
|
|
Ha a módosítás kulcsmezőt is érint, akkor egy törlést követő beszúrás valósíthatja
|
|
meg egy rekord módosítását.
|
|
** B*-fák
|
|
Az alapgondolat az, hogy az indexállományban való keresést meggyorsíthatjuk, ha
|
|
az indexállományhoz is (ritka) indexet készítünk hasonló szabályok szerint.Az
|
|
eljárás mindaddig folytatható, ameddig az utolsó index egyetlen blokkba be nem
|
|
fér.A legalsó szint mutatói az adatállomány egy-egy blokkjára mutatnak, a
|
|
fölötte levő szintek mutatói pedig az indexállomány egy-egy részfáját
|
|
azonosítják.
|
|
*** Keresés
|
|
Hasonló az egyszintű ritka indexek esetéhez,azomban ebben az esetben több
|
|
lépésben kell elvégeznünk a keresést:
|
|
|
|
A fa (azaz az indexállomány) gyökeréből indulunk. Ebben a blokkban megkeressük
|
|
azt a rekordot.amely kulcsa a legnagyobb azok közül,amelyek kisebbek még a
|
|
keresett kulcsnál(vagy egyenlő). Ez a rekord a mutatója a fa egy alsóbb
|
|
szintjére vezet. Ha az előző lépéseket addig ismételjük, amíg meg nem találjuk a
|
|
keresett rekordot.
|
|
*** Beszúrás
|
|
Az eljárás nagy mértékben megyegyezik a ritka indexbe beszúrással, viszont
|
|
ügyelni kell arra is, hogy a fa kiegyenlítettsége ne károsodjon. Ez azt is
|
|
igényelhetni, hogy az index állomány minden szintjén néhány blokk megváltozzon.
|
|
|
|
*** Törlés
|
|
Megkeressük a kívánt adatot és töröljük. Az adatblokkokat lehetőség szerint
|
|
összevonjuk. Összevonáskor, vagy ha egy adatblokk utolsó rekordját is töröltük,
|
|
a megszűnt blokkhoz tartozó kulcsot is ki kell venni az indexállomány érintett
|
|
részfájából. Ehhez adott esetben a fa minden szintjén szükség lehet néhány blokk
|
|
módosítására.
|
|
*** Módósítás
|
|
Megegyezik a ritka index beli módosítás elvével.
|
|
|
|
* Sűrű indexek, előnyök és hátrányok
|
|
|
|
Minden adatrekordhoz tartozik egy index rekord. Ez általában még mindig a
|
|
rekodot tartalamzó blokkra mutat,de elképzelhető az is, hogy közvetlenül az
|
|
adatrekordra mutat. Emiatt az adatokat nem kell rendezni. Ez nagy előny a ritka
|
|
indexel szemben, hiszen ez nagyban megnehezítette a beillesztést.
|
|
|
|
Fontos megjegyezni azomban, hogy a sűrű indexelés önmagában nem
|
|
állományszervezési módszer. Hash vagy ritka indexre építhet.
|
|
|
|
A sűrű indexnek hátrányai is vannak. Ezek közé tartozik a nagyobb hely igény (a
|
|
plusz indexelés miatt), az egyel több indirekció a rekord eléréséhez és több
|
|
adminisztrációval is jár.
|
|
|
|
Viszont támogatja a több kulcs szerinti keresést és az adatállomány rekordjai
|
|
szabadokká tehetők, ha minden további rekordhivatkozást a sűrű indexen keresztül
|
|
történik.
|
|
** Műveletek sűrűindexel
|
|
*** Keresés
|
|
Az indexállományban megkeressük a kulcsot, pl. bináris kereséssel. A hozzá
|
|
tartozó mutatóval elérhetjük a tárolt rekordot.
|
|
*** Törkés
|
|
Először megkeressük a törlendő rekordot. A hozzátartozó törölt bitet szabadra
|
|
állítjuk,majd a kulcsot kivesszük az indexállományból, és az indexállományt
|
|
időnként tömörítjük.
|
|
*** Beszúrás
|
|
Keresünk egy szabad helyet a tárolandó rekordnak. Ha nem találunk akkor az
|
|
állomány végére vesszük föl. A kulcsot és a tárolásm helyére hivetkozó mutatót a
|
|
kulcs szerint berendezzük az indexállományba.
|
|
*** Módosítás
|
|
Sűrű indexelés esetén a módosítás viszonylag egyszerű: megkeressük a módosítandó
|
|
rekordot tartalmazó adatblokkot, majd a módosított tartalommal visszaírjuk a
|
|
háttértárra. Ha a módosítás kulcsmezőt is érintett, akkor az indexállományt
|
|
újrarendezzük.
|
|
* Változó hosszúságú rekordok kezelése
|
|
** Változó hosszú ságú rekordok oka
|
|
- Egy mező hossza változó
|
|
- Ismétlődő mező(csoport) van a rekordban
|
|
** Megoldások
|
|
*** Általános megoldás
|
|
Egy rekord változó hosszúságú részeit a rekord mezőlistájának a végén helyezzük
|
|
el. Így a rekord eleje fix hosszúságú marad.
|
|
*** Megoldás változó hosszúságú mezőre
|
|
Gyakrori megoldás az,hogy a mező helyére egy fix hosszúságú mutatót rakunk,ahol
|
|
a mező tényleges tartalma van. Így egy állomány csak egy féle rekordot tartalmaz.
|
|
*** Megoldás ismétlődő mezőkre
|
|
Erre több megoldás is létezik:
|
|
- A maximális számú ismétlődésnek elegendő helyet foglalunk le minden rekordnak
|
|
- Mutatók használata
|
|
* Részleges információ alapján történő keresés
|
|
Gyakran megesik, hogy egy rekord több mezéjét is ismerjük és meg akarjuk keresni
|
|
azokat a rekordokat, amelyek ugyanezen értékeket tárolják. A továbbiakban úgy
|
|
vesszük, hogy egyik ismert mező sem kulcs.
|
|
|
|
** Index felépítése
|
|
Egy lehetőség lehet több (esetleg minden) mezőre egy index felépítése. Ezek után
|
|
minden megadott értékre alapján előállíthatunk rekord halmazokat, majd ezek
|
|
metszetét képezve megkapjuk a kívánt eredményt. Ez nem túl praktikus.
|
|
|
|
** Particionált(feldarabolt) hash-függvény
|
|
|
|
Veszünk egy hash függvényt, amely
|
|
\begin{align}
|
|
h(m_1,m_2,\ldots,m_k)=h_1(m_1)*h_2(m_2)*\ldots*h_k(m_k)
|
|
\end{align}
|
|
alakú, ahol az
|
|
$m_i\text{-k}$ a rekord összes $k$ darab, releváns mezőjének az értékeit
|
|
jelentik, $h_i$ az $i\text{-edik}$ mezőre alkalamazott hash függvény komponens,
|
|
a $*$ pedig a konkatonáció (összefűzés) jele.
|
|
|
|
Az ismert mezők értékei alapján meghatározhatjuk az $N$ hosszúságú bitmintának az
|
|
ismert darabjait. Mindenazon vödröket kell megnézni amelyeknek a sorszáma
|
|
illeszkedik a kapott bitmintára.
|
|
* Több kulcs szerinti keresés támogatása
|
|
Fontos, hogy egy adatbáziskezelő ne csak elsődleges kulcs szerint tudjon
|
|
keresni, hanem egyéb mezők alapján is. Ezeket a mezőket keresési kulcsoknak
|
|
nevezzük.
|
|
|
|
** Indexelt megoldás
|
|
*** Invertált állomány fogalma
|
|
Azt az indexállományt, amely nem kulcsmezőrea tartalmaz indexeket, invertált
|
|
állománynak nevezzük.
|
|
*** Invertált állomány mutatói
|
|
Az invertált állomány mutatói lehetnek:
|
|
1. <<elso>>Fizikai mutatók, amelyek pl. mutathatnak
|
|
1) <<elso.a>>közvetlenül az adatállomány megfelelő blokkja (esetleg rekordja)
|
|
2) <<elso.b>>az adatállomány elsődleges kulcsa szerinti (sűrű) indexállomány
|
|
megfelelő rekorjára
|
|
2. <<masodik>> Logikai mutatók, amelyek az adatállomány valamely kulcsának értékét
|
|
tartalmazzák
|
|
Az [[elso.a]] esetben az adatállomány rekordjai kötöttek és ráadásul csak egyetlen
|
|
inverált állomány esetén használható.
|
|
|
|
Az [[elso.b]] esetben egyel több indirekción keresztül elrejtjük a keresett
|
|
rekordot, de az adatrekord megváltoztatásakor csak az érintett mezőhöz (vagy
|
|
mezőkhöz) tartozó invertált állományt kell frissíteni.
|
|
|
|
A [[masodik]]. lehetőségben az adatállomány rekordjai szabadok lehetnek, viszont nem
|
|
ismerjük a keresett rekord címét.
|
|
* Adatmodellek, modellezés
|
|
Amikor egy adatbázist létrehozunk a cél az, hogy egy kiválasztott valós dologról
|
|
úgy tároljunk adatokat, hogy utána később ugyanarról a dologról információt
|
|
tudjuknk kinyerni. A legtöbb esetben nem tudunk minden adatot eltárlni egy adott
|
|
témakörrel kapcsolatban, ezért csak az adatok egy részét tároljuk. Az eltárolni
|
|
kívánt adatokat klasszikus modellezési eszközökkel választjuk ki: a fontos
|
|
információkat megtartjuk, a kevésbé fontosakat elhanyagoljuk.
|
|
|
|
** Adatmodell két része
|
|
1. formalizált jelölésrendszer adatok, adatkapcsolatok leírására
|
|
2. műveletek az adatokon
|
|
** Adatmodellek osztályozása
|
|
A felhasználó számára az adatbázis egyik legfontosabb jellemzője az a forma,
|
|
amelyben a tárolt adatok közötti összefüggések ábrázolva vannak. Mivel egy
|
|
adatbázis struktúráját jelentős részben a rekordtípusok közötti kapcsolatok
|
|
határozzák meg, ezért az adatmodelleket aszerint osztályozzuk, hogy a
|
|
felhasználó szempontjából miként valósul meg az adatok közötti kapcsolatok
|
|
ábrázolása.
|
|
|
|
** Adatmodellek
|
|
- Hálos adatmodell
|
|
- Relációs adatmodell
|
|
- Objektumorientált adatmodell
|
|
* Az E-R modell és elemei
|
|
Az egyed kapcsolat (entity-relationship; ER) modell nem tekinthető
|
|
adatmodellnek, hiszen nem definiál műveleteket az adatokon.
|
|
** ER modell elemei
|
|
- egyedtípusok
|
|
- attribútumtípusok
|
|
- kapcsolattípusok
|
|
*** Entitások(egyedek)
|
|
A valós világban létező, logikai vagy fizikai szempontból saját léttel
|
|
rendelkező dolog, amelyről adatokat tárolunk.
|
|
*** Tulajdonságok(property)
|
|
Az etitásokat jellemzi; ezeken keresztül különböztethetőek meg az entitások.
|
|
*** Egyedhalmaz
|
|
Azonos attribútumokkal rendelkező egyedek összessége.
|
|
*** Kapcsolatok
|
|
Entitások névvel ellátott viszonya.
|
|
**** Egy-egy kapcsolat
|
|
Olyan (bináris) kapcsolat, amelyben a résztvevő entitáshalmazok példányaival egy
|
|
másik entitáshalmaznak legfeljebb egy példánya lehet kapcsolatban.
|
|
**** Több-egy kapcsolat
|
|
Egy =K : E1, E2= kapcsolat több-egy, ha =E1= példányaihoz legfeljebb egy =E2=-beli példány tartozhat,
|
|
viszont =E2= példányai tetszőleges számú =E1=-beli példányhoz tartoznak.
|
|
**** Több-több kapcsolat
|
|
Egy =K : E1, E2= kapcsolat több-több, ha =E1= példányaihoz is tetszőleges számú =E2=-beli példány
|
|
tartozhat, és =E2= példányaihoz is tetszőleges számú =E1=-beli példány
|
|
tartozhat.
|
|
*** Kulcs
|
|
Az ER-modellezésben az attribútumok azt a halmazát, amely egyértelműen azonosít
|
|
egy entitás példányait, kulcsnak nevezzük.
|
|
* Az E-R diagram, ISA kapcsolatok, gyenge egyedhalmazok
|
|
** ER-diagram
|
|
Az ER modell egy grafikus megjelenítése az ER diagram.
|
|
*** ER-diagram elemei
|
|
| ER modell elem | Alakzat |
|
|
|----------------+----------|
|
|
| Egyedhalmaz | Téglalap |
|
|
| Attribútum | Elipszis |
|
|
| Kapcsolat | Rombusz |
|
|
|
|
Az aláhúzott attribútumok az adott eygedhalmaz kulcsait jelenti.
|
|
** ISA kapcsolat
|
|
Gyakori az a modellezési szituáció, amikor 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ó). Ez a viszony a kapcsolatok egy
|
|
sajátos típusával, az ún. „isa” kapcsolattal írható le. Az objektumorientált
|
|
modelleknél kitüntetett szerepe van.
|
|
|
|
** Gyenge egyedhalmaz
|
|
Gyakran előfordul, hogy egy entitáshalmaznak nem tudunk kulcsot kijelölni,
|
|
ehelyett az egyedek azonosításához valamely kapcsolódó egyed(ek)re is szükség
|
|
van. Ebben az esetben gyenge egyedhalmazokról beszélünk. Az identitását egy
|
|
tulajdonos egyedhalmaz (owner entity set) biztosítja,amely a gyenge
|
|
egyedhalmazzaltöbb-egy kapcsolatban áll. Az ilyen kapcsolat neve: determináló
|
|
kapcsolat.
|
|
|
|
* A relációs adatmodell: adatok strukturálása és műveletek
|
|
|
|
** Struktúrája
|
|
A relációs adatmodell alapját, ahogyan a neve is árulkodik róla, relációk
|
|
alkotják.
|
|
|
|
*** Reláció
|
|
Halamzok Decartes szorzatának részhalmaza.
|
|
|
|
A halmazokban található értékek egy-egy ún. tartományból (domain) kerülnek ki.
|
|
|
|
Fontos megjegyezni, hogy alapvetően a relációban tárolt elemek sorrendjének
|
|
nincs jelentősége.Sőt az attribútumok nevének sincs jelentősége a modelre
|
|
nézve, de egy adatbázis akkor jó, ha információt tudunk kinyerni belőle. Ehhez
|
|
viszont szükséges az, hogy az egyes relációk, attribútumok valamilyen, a modell
|
|
szempontjából értelmezhető információval rendelkezzen.
|
|
*** Relációs séma
|
|
A relációban tárolható attribútumok halmaza.
|
|
|
|
Ha 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 adatbázis séma.
|
|
*** A relációk további jellemzői
|
|
**** A releciók foka
|
|
A relecióban lévő oszlopok (attribútumok) száma.
|
|
**** A releciók számossága
|
|
A relációban található sorok száma
|
|
|
|
** Műveletek
|
|
A relációs adatmodell a relációkon megengedett műveletek meghatározásával válik
|
|
teljessé. Ezen műveletekből épül fel az ún. relációs algebra (relational algebra).
|
|
|
|
* Relációalgebra
|
|
** Egyesítés, Unió
|
|
Az attribútumok száma mindkét relációban ugyanannyinak kell lennie, de az egyes
|
|
attribútumok nevének és értelmezésének nem feltétlenül kell megegyeznie.
|
|
** Különbség
|
|
Ugyanazok a feltételek szükségesek,mint az [[Egyesítés, Unió][egyesítés]] műveleténél.
|
|
*** Metszetképzés
|
|
Nem szükséges külön műveletként felvennünk, hiszen képezhető két különbség
|
|
művelet segítségével:
|
|
\begin{align}
|
|
A\cap B &= A\setminus(A\setminus B)
|
|
\end{align}
|
|
** Descartes szorzat
|
|
Két halmaz dékártszorzatának attribútúmainak száma a két reláció attribútúmainak
|
|
összege, a benne található adatok pedig a relációk összes sorának összes
|
|
kombinációja.
|
|
|
|
*Jelölése:* $r_1\times r_2$
|
|
** Vetítés, projekció
|
|
Vetítés során a reláció egyes kiválasztott attribútumait megtarjuk, a többit
|
|
pedig töröljük.
|
|
|
|
*Jelölése:* $\pi_{A,B}(r_1)$
|
|
** Kiválasztás, szelekció
|
|
A kiválasztás művelete alatt, azt értjük, amikor egy részhalmazt képezünk egy
|
|
$r$ relációból, egy meghatározott logikai formula alapján. A formulát a reláció
|
|
összes során kiértékeljük, és csak azokat tesszük bele a részhalmazba, amelyre a
|
|
formula igaz értéket kap.
|
|
|
|
*Jelölés:* $\sigma_{F}(r)$, ahol az $F$ a kiértékelendő logikai formulát jelöli,
|
|
vagy másnéven a szelekcós feltételt.
|
|
|
|
*** A formula elemei
|
|
- Konstansok
|
|
- Reláció attribútumainak azonosítója
|
|
- Aritmetikai összehasonlítók (pl. $<,>,=,\neq,\ldots$)
|
|
- logikai operátorok ($\wedge$ $\vee$ $\neg$)
|
|
** Természetes illesztés (natural join)
|
|
Vegyük két olyan relációt, amelyeknek van legalább egy azonos nevű
|
|
attribútumok. Ekkor természetes illesztés alatt azt a műveletet érjük, amikor a
|
|
két reláció összes elemét összefűzzük (Descartes szorzat), majd azokat a sorokat választjuk
|
|
ki, amelyekben a megegyező nevű attribútumok megegyező értéket tartalmaznak.
|
|
|
|
*Jelölés:*
|
|
\begin{align}
|
|
r\Join s &= \pi_{R\cup S}\sigma_{(r.X_1=s.X_1)\wedge\ldots\wedge(r.X_n=s.X_n)}(r\times s)
|
|
\end{align}
|
|
|
|
** $\Theta\text{-illesztés}$
|
|
Legyen $r$ és $s$ két reláció, $\Theta$ pedig egy kvantormentes feltétel, melyet az $r$ és $s$
|
|
relációk egy-egy attribútuma között definiálunk. A táblák Descartes-szorzatából
|
|
a rekordpáron értelmezett $\Theta$ feltétel szerint választunk ki sorokat: $t =
|
|
\sigma_\Theta(r\times s)$.
|
|
|
|
*Jelölése:* $r \underset{\Theta}{\Join} s$
|
|
** Hányados
|
|
Jelölje $r \div s$ azt a relációt, amelyre igaz az, hogy az $s\text{-sel}$ alkotott Descartes-szorzata
|
|
a lehető legbővebb részhalmaza $r\text{-nek}$ : $(r \div s) \setminus s \subseteq r$
|
|
* Sorkalkulus, oszlopkalkulus
|
|
** Sorkalkulus
|
|
*** Fogalma
|
|
A relációs sorkalkulus egy elsőrendű nyelv, amely kvantorokat is tartalmazhat és
|
|
a kvantorok sorvektor változókat kvantifikálhatnak.
|
|
*** Felépítése
|
|
A nyelv szimbólumból atomokat épít fel, amelyek formulákká rakhatók össze, a
|
|
formulák pedig egy kifejezéssé építhetők, amelyek segítségével relációk írhatók le.
|
|
*** Szimbolumai
|
|
- Zárójelek: (,)
|
|
- Aritmetikai relációk $<,>,=,\neq,m,\leq,\geq$
|
|
- logikai műveletek $\vee,\wedge,\neg$
|
|
- Sorváltozók: $s^{(n)}$, $n$ változós
|
|
- sorváltozók komponensei: $s^{(n)}[i]$,ahol $1\leq i \leq n$
|
|
- (konstans) relációk: $R^{(m)}$, $m$ változós
|
|
- konstansok
|
|
- kantorok: $\exists,\nexists,\forall$
|
|
*** Atomok felépítése
|
|
- $R^{(m)}(s^{(m)})$
|
|
- $s^{(n)}[i]\Theta u^{(k)}[j]$, ahol $1\leq i \leq n$, $1\leq j \leq k$ és
|
|
$\Theta$ aritmetikai relációsjel
|
|
- $s^{(n)}[i]\Theta c$
|
|
- $R^{(m)}(c_1,c_2,\ldots,c_n)$
|
|
*** Formulák felépítése
|
|
- minden atom formula
|
|
- Ha $\Psi_1$ és $\Psi_2$ formuál, akkor $\Psi_1\vee\Psi_2$,
|
|
$\Psi_1\wedge\Psi_2$ és $\neg\Psi_1$ is formulák
|
|
- Ha $\Psi$ formula és $s^{(n)}$ egy szabad sorváltozója, akkor $(\exists
|
|
s^{(n)})\Psi$ és $(\forall s^{(n)})\Psi$ is formulák, amelyben $s^{(n)})$ már
|
|
kötött sorváltozó
|
|
*** Kifejezések felépítése
|
|
\begin{align*}
|
|
\big\{s^{(m)}\big|\Psi(s^{(m)}\big\}
|
|
\end{align*}
|
|
ahol $\Psi$ olyan formula, amelynek $s^{(m)}$ az egyetlen szabad sorváltozója.
|
|
*** Tétel
|
|
Minden, az $R_k^{(f_k)}\subseteq A^{f_k}$, ($k=1,2,\ldots,r$) relációból
|
|
felépített relációs algebrai kifejezéshez van olyan $\Psi(s^{(m)})$ sorkalkulus
|
|
formula, hogy $\Psi$ csak az $R_k^{(f_k}\text{-k}$ közül tartalmaz relációkat és
|
|
az $E$ kifejezés megegyezik az $\big\{s^{(m)}\big|\Psi(s^{(m)}\big\}$ kifejezéssel.
|
|
** Oszlopkalkulus
|
|
Az oszlopkalkulus elsősorban abban különbözik a sorkalkulustól, hogy sorváltozók
|
|
helyet egyszerű változók szerepelnek benne. Ennek köszönhetően egy kicsivel
|
|
egyszerűbb kifejezni vele bizonyos lekérdezéseket.
|
|
*** Szimbólumai
|
|
- \ldots
|
|
- oszlopbáltozók: $u_i$
|
|
- \ldots
|
|
*** Atomok felépítése
|
|
- $R^{(m)}(x_1,x_2,\ldots,x_m)$, ahol $x_1,x_2,\ldots,x_m$ konstansok vagy oszlopváltozók.
|
|
- $x\Theta y$, ahol $x$ és $y$ konstansok vagy oszlopváltozók és $\Theta$
|
|
aritmetikai relációjel.
|
|
- $\ldots$
|
|
*** Formulá felépítése
|
|
- $\ldots$
|
|
*** Kifejezések felépítése
|
|
\begin{align*}
|
|
\big\{x_1,x_2,\ldots,x_m\big|\Psi(x_1,x_2,\ldots,x_m)\big\}
|
|
\end{align*}
|
|
ahol $\Psi$ olyan formula, amelyek szabad változói csak $x_1,x_2,\ldots,x_m$
|
|
*** Tétel
|
|
Rögzített $A$ interpretációs halmaz és $R_k^{(n_k)}\subseteq A^{n_k}$ reációk
|
|
esetén a sorkalkulus bármely kifejezéséhez létezik az oszlopkalkulusnak olyan
|
|
kifejezése,amely az előzővel azonos relációt határoz meg.
|
|
* Biztonságos sorkalkulus
|
|
A biztonságos sorkalkulus célja az, hogy a sorkalkulus kifejezések
|
|
kiértékelhetőek legyenek számítógépen kezelhető méretű relációko/véges idő
|
|
mellett is.
|
|
** Formula doménje
|
|
$\text{DOM}\Psi\equiv\{\Psi\text{-beli alaprelációk összes attribútumának
|
|
értékeik}\}\cup\{\Psi\text{-ben előforduló konstansok}\}$
|
|
** Biztonságos kifejezés
|
|
$\{t|\Psi(t)\}$ biztosnágos, ha
|
|
1) minden $\Psi(t)$-t kielégítő $t$ minden komponense
|
|
2) $\Psi\text{-nek}$ miden $(\exists u)\omega(u)$ alakú részformulájára
|
|
teljesül, hogy ha $u$ lielégíti $\omega\text{-t}$ szabad változók valamelym
|
|
értéke mellett, akkor $u$ minden komponense $\text{DOM}(\omega)\text{-beli}$
|
|
** Tétel
|
|
A relációs algebra és abiztonságos sorkalkulus kifejezőereje ekvivalens.
|
|
* Relációs lekérdezések heurisztikus optimalizálása
|
|
A heurisztikus optimalizálás során, relációs algebrai műveletekből egy fát
|
|
építünk. Ezt felhasználva próbáljuk a műveletek sorrendjét és felépítését
|
|
módosítani, hogy kiválasszuk a leggyorsabb, még a helyes eredményt kapjuk.
|
|
** Első lépés
|
|
A lekérdezés kanonikus alakjából indulunk ki. Vegyük először a kiválasztott
|
|
relációk Descartes szorzatát, majd hajtsuk végre a szelciót, végül alkalmazzuk a
|
|
kivánt projekciót.
|
|
** Második lépés
|
|
Itt a szelekciós feltételeket próbáljuk meg sülyeszteni. Ehhez fel kell
|
|
használni a relációs algebrai kifejezések ekvivalenciákját. A célja az input
|
|
relációkat, a további műveletekhez szükséges részét redukáljuk le amennyire csak
|
|
lehet.
|
|
** Harmadik lépés
|
|
Ebben a lépésben a fában szereplő leveleket (azaz relációkat) próbáljuk minnél
|
|
jobb helyre rendezni. Ez akkor hasznos, ha ezzel nagyságrendekkel kisebb
|
|
Descartes szorzatok jönnek létre.
|
|
** Negyedik lépés
|
|
Előfordulhat, hogy a join megegyezik a Descartes-szorzattal. Ha ezt egy
|
|
szelekció követi, akkor vonjuk össze a kettőt egy $\Theta\text{-illesztés}$ műveletté, így
|
|
kevesebb rekordot kell generálni.
|
|
** Ötödik lépés
|
|
Most a vetítéseket fogjuk a fában süllyeszteni, amennyire csak tudjuk. Ehhez új
|
|
vetítéseket is létrehozhatunk, ha szükséges.
|
|
* Relációalgebraikifejezések transzformációi, ekvivalens kifejezések
|
|
A lekérdezés optimalizáció egy fontos eleme a relációs kifejezések
|
|
transzformációja. Ehhez különböző ekvivalencia szabályokat alkalmazunk.
|
|
** Ekvivalencia szabályok
|
|
*** Szelekció kaszkádosítása
|
|
\begin{align}
|
|
\sigma_{\theta_1\wedge\theta_2}(E)=\sigma_{\theta_1}(\sigma_{\theta_2}(E))
|
|
\end{align}
|
|
*** Szelekció kommutativitása
|
|
\begin{align}
|
|
\sigma_{\theta_1}(\sigma_{\theta_2}(E))=\sigma_{\theta_2}(\sigma_{\theta_1}(E))
|
|
\end{align}
|
|
*** Szelekció kaszkádosítása
|
|
\begin{align}
|
|
\pi_{L_1}(\pi_{L_2}(\ldots\pi_{L_n}(E)\ldots))=\pi_{L_1}(E)
|
|
\end{align}
|
|
*** A $\Theta\text{-illesztés}$ és a Descartes-szorzat kapcsolata
|
|
\begin{align}
|
|
\sigma_\theta(E_1\times E_2) &= E_1\underset{\theta}{\Join}E_2 \\
|
|
\sigma_{\theta_1}(E_1\underset{\theta_2}{\Join}E_2) &= E_1\underset{\theta_1\wedge\theta_2}{\Join}E_2
|
|
\end{align}
|
|
*** Természetes illesztés asszociativitása
|
|
\begin{align}
|
|
(E_1\Join E_2)\Join E_3= E_1 \Join (E_2\Join E_3)
|
|
\end{align}
|
|
*** Szelekció és projekció kapcsolata
|
|
\begin{align}
|
|
\pi_{A_1,A_2,\ldots,A_n}(\sigma_c(r)) &= \sigma_c(\pi_{A_1,A_2,\ldots,A_n}(r))
|
|
\end{align}
|
|
*** Halmazműveletek kommutatívak
|
|
Valóban.
|
|
*** Demorgen azonosságok
|
|
Itt is alkalmazhatóak.
|
|
*** STB
|
|
Ennél jóval több van. Csak egy pár fontosabbat soraltam itt fel.
|
|
* Relációs lekérdezések költségbecslés alapú optimalizálása
|
|
Ez egy jóval kifinomultabb metódus. Egy költség függvényt definiálunk, és ezek
|
|
után azt a végrehajtási tervet alkalmazzuk, amelyre ez a fügvény a legkisebb
|
|
értéket adta.
|
|
** Katalógusadatok
|
|
A költségbecslést segítő metaadatokat katalógus adatoknak nevezzük. Ilyen adat
|
|
például a rekordok/blokkok száma, a relációhoz tartozó indexek, egyes
|
|
lekérdezések költsége
|
|
*** Költsége
|
|
Ezeket az adatokat folyamatosan frissíteni kell. Ez bizonyos esetekben igencsak
|
|
költséges lehet, jól meg kell gondolni, hogy ezt mikor teszük meg.
|
|
** Költség meghatározása
|
|
A költségek meghatározása elsősorban a blokkműveletek számára szoktunk
|
|
optimalizálni,hiszen ez független a rendszer terhelésétől, valamint ennek a
|
|
műveletnek általában nagyságrendekkel nagyobb az idő igénye, mint a processzor
|
|
és memória műveleteknek.
|
|
Ez viszont egyáltalán nem mondható kizárólagosnak, több
|
|
szempontot is érdemes figyelembe venni.
|
|
*Jelölése:*
|
|
\begin{align}
|
|
E_{\text{alg.}}=\text{Az algoritmus becsült költsége (estimate)}
|
|
\end{align}
|
|
* Katalógusban tárolt információk
|
|
A katalógus adatai fontos szerepet játszanak a lekérdezés optimalizációban. Ezek
|
|
segítségével lehet megbecsülni az egyes lekérdezések költségét.
|
|
** Általános 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_r$ : az $r$ reláció egy rekordjának nagysága (size) bájtokban
|
|
- $f_r$ : mennyi rekord fér az $r$ reláció egy blokkjába (blocking factor)
|
|
- $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) = |\pi_A (r)|$
|
|
- $V(A, r) = n_r$ , ha az A kulcs
|
|
- $SC(A, r)$: azon rekordok várható 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.
|
|
- $SC(A, r) = 1$, ha $A$ egyedi (vagy kulcs)
|
|
- Általános esetben $SC(A, r) =\frac{n_r}{V(A,r)}$
|
|
- Ha a relációk rekordjai fizikailag együtt vannak tárolva, akkor
|
|
\begin{align}
|
|
b_r&= \left\lceil\frac{n_r}{f_r}\right\rceil
|
|
\end{align}
|
|
** 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_i$ : az i index szintjeinek a száma, azaz az index magassága (Height of Tree).
|
|
- Az r relációt tartalmazó heap-szervezésű állományra épített B* fa esetén $HT_i=\lceil\log_{f_i}{b_r}\rceil$
|
|
- hash-állománynál HTi = 1.
|
|
- $LB_i$ : az $i$ index legalsó szintű blokkjainak a száma, azaz a levélszintű
|
|
indexblokkok száma (Lowest level index Block)
|
|
* A lekérdezés költsége: szelekció, indexelt szelekció, join műveletek és algoritmusok, egyéb műveletek.
|
|
** Szelekciós művelet költségbecslése
|
|
*** Algoritmusok alapján
|
|
- (A1) Lineáris keresés:
|
|
+ költsége: $E_{A1}=b_r$
|
|
- (A2 )Bináris keresés:
|
|
+ Feltétele:
|
|
- A blokkok folyamatosan helyzkednek el a diszken
|
|
- Az $A$ attribútum szerinte rendezett
|
|
- Szelekció feltétele egyenőség
|
|
+ Költsége: $E_{A2}=\lceil\log_2(b_r+1)\rceil+\left\lceil\frac{SC(A,r)}{f_r}\right\rceil-1$
|
|
*** Indexelt szelekciós algoritmusok
|
|
Elsődleges index: segítségével a háttértáron a rekordokat a tényleges fizikai
|
|
sorrendjében tudjuk elérni.
|
|
- (A3) Elsődleges index használatával, egyenlőségi feltételt a kulcson vizsgálva
|
|
+ Költsége $E_{A3}=HT_i+1$
|
|
- (A4) Elsődleges index használatával, egyenlőségi feltétel nem kulcson
|
|
+ Költség: $E_{A4}=HT_i+\left\lceil\frac{SC(A,r)}{f_r}\right\rceil$
|
|
- (A5) Másodlagos index használatával, egyenlőségi feltétel mellett
|
|
* $E_{A5}=HT_i+1$, ha $A$ kulcs
|
|
* $E_{A5}=HT_i+SC(A,r)$, ha $A$ nem kulcs
|
|
*** Összehasonlítási szelekció
|
|
Most vegyük a $\sigma_{A\leq v}$ alakú szelekciókat.
|
|
- Ha nem is merjük $v$ értékét, akkor átlagosan $\frac{n_r}{2}$ rekordot elégít ki
|
|
- Ha ismerjük és egyenletes eloszlást feltételezünk akkor átlagosan
|
|
$n_r\cdot\left(\frac{v-\min{(A,r)}}{\max{(A,r)-\min{(A,r)}}}\right)$
|
|
- (A6) Elsődleges index használatával
|
|
+ $E_{A6}=HT_i+\frac{b_r}{2}$, ha $v$ nem ismert
|
|
+ $E_{A}=HT_i+\left\lceil\frac{c}{f_r}\right\rceil$, ahol $c$ jelöli a
|
|
rekordok számát és $v$ ismert
|
|
- (A7) Másodlagos index
|
|
+ $E_{A7}=HT_i+\frac{LB_i}{2}+\frac{n_r}{2}$, ha $v$ nem ismert
|
|
** Join műveletek
|
|
*** Típusai
|
|
**** Természetes illesztés
|
|
\begin{align}
|
|
r_1\Join r_2&= \pi_{A\cup B}(\sigma_{R1.X=R2.X}(r_1\times r_2))
|
|
\end{align}
|
|
**** Külső illesztések
|
|
- Bal oldali külső illesztés $r_1*(+)r_2$
|
|
- Jobb oldali külső illesztés $r_1(+)*r_2$
|
|
- Teljse külső illesztés $r_1(+)*(+)r_2$
|
|
**** Theta illesztés
|
|
\begin{align}
|
|
r_1 \Join_\theta r_2 = \sigma_\theta(r_1\times r_2)
|
|
\end{align}
|
|
*** Egymásba ágyazott ciklikus illesztés (Nested loops join)
|
|
Két egymásba ágyazott ciklus használatával hajtja végre a join műveletet:
|
|
1) Végig megy az egyik reláció összes rekordján, az ehhez tartozókat fogjuk keresni
|
|
2) Végig megy a másik reláció összes rekordján és menézi,hogy az előző ciklus
|
|
futó változójához megfelel-e
|
|
Legrosszabb esetben a kölrtsége $b_r+n_r\cdot b_s$,de ha legalább az egyik befér
|
|
a memóriába akkor a költség $b_r+b_s$ lesz.
|
|
*** Blokk alapú egymásba ágyazott ciklikus illesztés(block nested
|
|
loop join)
|
|
Itt négy darab egymásba ágyazott ciklust alkalmazunk:
|
|
1) Végig megy az egyik reláció blokkjain
|
|
2) Másik reláció blokkaji
|
|
3) Első reláció beolvasott blokkjának rekordjai
|
|
4) Másik reláció beolvasott blokkjának rekordjai
|
|
|
|
Ez legrosszabb esetben $b_r+b_r\cdot b_s$ a költsége, de sok memóriával $b_r+b_s$ -re
|
|
le lehet csökkenteni.
|
|
|
|
*** Indexalapú egymásba ágyazott ciklikus illesztés(Indexed nested-loop join)
|
|
|
|
Az egyik reláción ($s$) van indexünk. Az első algoritmust írjuk át úgy, hogy a
|
|
belső ciklus indexelt keresést alkalmaz, így a keresés az index alapján kisebb
|
|
költséggel is elvégezhető.
|
|
|
|
Költsége: $b_r+n_r\cdot c$, ahol $c$ a szelekció költsége.
|
|
|
|
*** További join implementációk
|
|
- Sorted merge join
|
|
* A relációk a join feltételben meghatározott attribútumok mentén
|
|
rendezzük,majd összefűzzük.
|
|
- 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 illeszekedő rekordokat keressük.
|
|
- Egyéb
|
|
- pl. bitmap join
|
|
** Egyéb operációk
|
|
- Ismétlődés kiszűrése (rendezés, majd törlés)
|
|
- Projekciók(projekció,majd ismétlődések szűrése)
|
|
- Unió(mindkét relációt rendezzük, majd összefésüléssel kiszűrjük az ismétlődéseket)
|
|
- Metszet (mindkét relációt rendezzük, fésülésnél csak a másodpéldányokat
|
|
tartjuk meg)
|
|
- Különbség(mindkét relációt rendezzük, fésülésnél csak az első relációbeli
|
|
rekordokat hagyjuk)
|
|
- Aggregáció
|
|
* Materializáció és pipelining
|
|
** Materializáció
|
|
Ebben a módszerben az összetett kifejezésnek egyszerre egy műveletét hajtjuk
|
|
végre, valamilyen rögzített sorrendben. Ehhez most is egy relációs algebrai fába
|
|
foglaljuk a műveleteket, majd a levelektől (azaz a relációktól) indulva mindig azt
|
|
a műveletet értékeljük ki, amelyik műveletnek éppen van rendelkezésre álló bemenete.
|
|
** Pipelining
|
|
Itt egyszerre több elemi műveletet szimultán kiértékelése folyik, egy operáció
|
|
eredményét azonnal megkapja a sorban következő operáció operandusaként.
|
|
|
|
Ez persze nem minden esetben működik, pl rendezés esetében.
|
|
* Kiértékeliési terv kiválasztása
|
|
Az egyes műveletekre több féle algoritmust, metódust is megvizsgáltunk és közel
|
|
sem triviális ezek kiválasztása. Tudnunk kell, hogy:
|
|
- Milyen műveleteket
|
|
- Milyen sorrendben
|
|
- Minlyen algoritmus szerint
|
|
- és milyen workflow-ban értékeljük ki.
|
|
|
|
** Költség alapú optimalizáció
|
|
Nem jó ötlet az összes ekvivalens kifejezést felsorolni, kiértékelni, majd a
|
|
legjobbat kiválasztani. Ennek az az oka,hogy ezzel től sok lehetőséget kell
|
|
megvizsgálni. Ezért egy jobb megoldást biztosíthat a heurisztikus költségalapú
|
|
optimalizálás.
|
|
|
|
**
|
|
* Relációs adatbázis sémák tervezése E-R diagramból
|
|
Egy ER-diagram megtervezése után fontos lehet, hogy a megtervezett modellt
|
|
relációs adatmodellbe transzformáljuk, ezzel működőképessé téve. Ehhez
|
|
transzformációt végzünk.
|
|
** Transzformáció
|
|
1. Az egyedhalmazokat olyan relációs sémában ábrázoljuk, amely tartalmazza az
|
|
entitáshalmaz összes attribútumát. Ha van olyan egyedhalmaz, amely "isa"
|
|
kapcsolatban van egy másik egyedhalmazzal, akkor a specializált
|
|
egyedhalmazhoz redelt relációs sémába az általánosabb egyedhalmaz
|
|
attributumait is fel kell venni.
|
|
2. A kapcsolattípusokat olyan sémákká alakítjuk, amelyek attribútumai
|
|
tartalmazzák a kapcsolatban szereplő összes reláció kulcsait is.
|
|
|
|
Ezen kívül számos más lehetőség van a kapcsolatok létrehozására, amelyek adott
|
|
esetben jobbak is lehetnek. Ilyen pl. az indegen kulcsos megoldás.
|
|
* Anomáliák (módosítási, törlési, beszúrási)
|
|
A redundáns relációknak megfelelő adattárolással kapcsolatban egy sor
|
|
kellemetlen jelenség fordulhat elő. Ezeket hagyományosan anomáliáknak nevezik.
|
|
** Módosítási anomália
|
|
Ha egy adatot több helyen tárolunk és módosítani szeretnénk, akkor minden helyen
|
|
meg kell azt változtatni. Ha ezt elmulasztjuk, akkor különböző helyekeről
|
|
különböző információt kapnánk. Az ilyen szituációk nem csak többletmunkát, hanem
|
|
logikai ellentmondásokat is jelenthet.
|
|
** Beszúrási anomália
|
|
Ennek alapja, hogy nem tudunk rekordot felvenni, ha van olyan adat, ami nem
|
|
ismert és a tárolandó adattal megahtározott kapcsolatban áll.
|
|
|
|
Példa: egy új szálítót nem tudunk felvenni, ha még nem szálított semmit.
|
|
** Törlési anomália
|
|
Ha csak egy attribútum értékét akarjuk törölni akkor előfordulhat,hogy ez csak
|
|
az egész sor törlésével lehetséges (pl. ha az adott attribútom része valamely
|
|
kulcsnak). Ezzel viszont olyan információt is törölnénk, amire még szükség
|
|
lehet.
|
|
|
|
|
|
Erre egy megoldás lehet a relációk függőleges felbontása,de ez nem minden
|
|
esetben alkalmazható.
|
|
* Adatbázis kényszerek, redundancia
|
|
** Adatbázis kényszerek
|
|
Adatbázis kényszerek kényszerek alatt azokat a szabályokat értjük, amelyek
|
|
segítségével korlátozni lehet azadatbázisunk tartalmát, olyan módon, hogy az
|
|
valamilyen módon megfeleljen egy elvárásnak vagy elképzelésnek. Az alábbiak a
|
|
leggyakrabban használt kényszerek:
|
|
- értékfüggő kényszerek (pl. 0 < TESTMAGASSÁG < 300)
|
|
- értékfüggetlen kényszerek.
|
|
* Tartalmi függőség(pl. az idegen kulcsok értékeinek halmaza rész-
|
|
halmaza a neki megfeleltethető kulcsértékek halmazának)
|
|
* Funcionális függőség
|
|
* Többértékű függőség
|
|
|
|
|
|
** Redundáns reláció
|
|
Ha egy relációban valamely attribútum értéké a relációban található más
|
|
attribútum(ok) értékéből ki tudjuk következtetni valamely ismert következtetési
|
|
szabály segítségével, akkor a relációt redundánsnak nevezzük.
|
|
* Funkcionális függőségek
|
|
** Definíció
|
|
Legyen adott az $R(A_1,A_2,\ldots,A_n)$ reláció séma, ahol $A_i\text{-k}$,
|
|
$i=1,2,\ldots,n$ (alap)attribútumok. Legyen $X$ és $Y$ a reláció attribútumainak
|
|
két részhalmaza: $X\subseteq R$ és $Y\subseteq R$. Ha bármely, az $R$ sémára
|
|
illeszkedő $r$ reláció bármely két $t,t'\in r(R)$ sorára fenáll az, hogy ha
|
|
$t[X]=t'[X]$, akkor $t[Y]=t'[Y]$ ($t[Z]:=\pi_Z(t)$), akkor azt mondjuk,hogy az
|
|
$Y$ attribútumok funkcionálisan függenek $X$ attribútumoktól.
|
|
Más megfogalmazásban azt is mondhatjuk, hogy az $X$ értékei meghatározzák az $Y$
|
|
értékeit. Mindezt így jelöljük: $X\rightarrow Y$ .
|
|
** Determináns
|
|
Ha $X,Y\subseteq R$ és $X \rightarrow Y$, de $\nexists X'\subset X$, hogy
|
|
$X'\rightarrow Y$, akkor $X\text{-et } Y$ determinánsának nevezzük.
|
|
** Teljes függőség
|
|
Ha $X,Y\subseteq R$ és $X \rightarrow Y$, de $\nexists X'\subset X$, hogy
|
|
$X'\rightarrow Y$, akkor azt mondjuk, hogy $Y$ teljesen függ $X\text{-től}$.
|
|
** Részelegs függés
|
|
Ha $X,Y\subseteq R$ és $X \rightarrow Y$ mellett $\exists X'\subset X$, hogy
|
|
$X'\rightarrow Y$, akkor azt mondjuk, hogy $Y$ részlegesen függ $X\text{-től}$.
|
|
* Relációs sémák kulcsai
|
|
** Kulcs
|
|
$X\text{-et}$ pontosan akkor nevezzük kulcsnak az $R$ relációs sémán, ha
|
|
1. $X\rightarrow R$
|
|
2. $\nexists X'\subset X$,hogy $X'\rightarrow R$.
|
|
Tehát, ha $R$ teljesen függ $X\text{-től}$
|
|
** Szuperkulcs
|
|
$X\text{-et}$ szuperkulcsnak nevezzük, ha igaz,hogy $X\rightarrow R$. Más szóval
|
|
akkor, ha $X$ tartalmaz kulcsot.
|
|
*** Egyszerű kulcs
|
|
Ha egy kulcs csak egy attribútumból áll,akkor egyszerű kulcsról
|
|
beszélünk. Elenkező esetben összetett kucslrólm van szó.
|
|
** Tétel
|
|
Minden relációs sémának van kulcsa.
|
|
** Elsődleges kulcs
|
|
Ha $X$ és $Z$ az $R$ relációs sémának egyaránt kulcsai, miközben $X\neq Z$,
|
|
akkor az $R$ relációs sémának több kulcsa is van.
|
|
|
|
Ezek közül kiválasztunk egyet, amelyet elsődleges kulcsnak nevezünk. A többi
|
|
kulcsot kulcsjelöltnek nevezzük.
|
|
** Idegen (külső) kulcs
|
|
Adott egy $R$ és egy $R'$ relációs sémák. Tételezzük fel, hogy $R\neq R'$. Ha
|
|
$\exists D \subseteq (R\cap R')$, hogy $D$ kulcsa $R'$ sémának, akkor $D$ neve
|
|
az $R$ sémával kapcsolatban idegen kulcs.
|
|
** Igaz funkcionális függés
|
|
Egy adott $R$ sémán az attribútumain értelmezett $F_R$ függéshalmaz mellett egy
|
|
$X\rightarrow Y$ függés pontosan akkor igaz, ha minden olyan $r(R)$ reláción
|
|
fennáll, amelyeken $F_R$ összes függése fennáll.
|
|
|
|
*Jelölése:* $F_R \models X\rightarrow Y$
|
|
|
|
** Levezethető funkcionális függőség
|
|
Egy $W\rightarrow Z$ funkcionális függőség pontosan akkor vezethető le adott
|
|
$F_R$ függőségből, ha az axiomák ismételt alkalmazásával $F_R\text{-ből}$
|
|
kiindulva megkaphatjuk $W\rightarrow Z\text{-t}$.
|
|
|
|
*Jelölése:* $F_R \vdash W\rightarrow Z$
|
|
* Armstrong axiómái a funkcionális függőségekről
|
|
Adottak az $R$ sémán az $X$, $Y$, $Z$ attribútumhalmazok.
|
|
1) Ha $X\subseteq Y$, akkor $Y\rightarrow X$ (reflexivitás vagy triviális függőség).
|
|
2) Ha $X\rightarrow Y$ és $Y\rightarrow Z$,akkor $X \rightarrow Z$ (tranzitivitás).
|
|
3) Ha $X\rightarrow Y$, akkor $XZ \rightarrow YZ$ (bővíthetőség)
|
|
** Igazság tétel
|
|
Az amstrong axiómák igazak, alkalmazásukkal csak igaz függőségek állíthatók elő
|
|
adott függéshalmazból.
|
|
** Teljesség tétel
|
|
|
|
Az Armstrong axiómák teljesek, azaz belőlük minden iaz függőség levezethető.
|
|
$F_R \models X \rightarrow Y \implies FR \vdash X \rightarrow Y$
|
|
** Axiómák következményei
|
|
|
|
1) $X \rightarrow Y$ és $X\rightarrow Z \models X \rightarrow YZ$(egyesítési szabály).
|
|
2) $X \rightarrow Y$ és $WY \rightarrow Z \models XW \rightarrow Z$ (pszeudotranzitivitás).
|
|
3) $X \rightarrow Y$ és $Z \subseteq Y \models X \rightarrow Z$ (dekompozíciós/felbontási szabály).
|
|
* Az első normálforma (1NF)
|
|
Annak érdekében, hogy a fentebb említett anomáliák ne forduljanak elő, arelációs
|
|
simáinknak meg kell felelni egyes feltételeknek. Ezeket normálformáknak nevezik.
|
|
** Nulladik normálforma
|
|
Ilyen alakúnak tekintünk minden olyan relációs sémát, amelyben legalább egy
|
|
attribútum nem atomi abban az értelemben, hogy az attribútum értéke nem
|
|
tekinthető egyetlen egységnek.
|
|
|
|
** Első nomálforma
|
|
Egy relációs séma 1NF alakú, ha csak atomi attribútum-értékek szerepelnek benne.
|
|
* A második normálforma (2NF)
|
|
** Elsődleges és másodlagos attribútumok
|
|
Egy $R$ relációs séma $A\in R$ attribútuma elsődleges attribútum, ha $A$ eleme
|
|
a séma valamely $K$ kulcsának. Egyébként $A$ másodlagos attribútum.
|
|
** Második normálforma(2NF)
|
|
Egy $1NF$ relációs séma $2NF$ alakú, ha benne minden másodlagos attribútum a
|
|
séma bármely kulcsától teljesen függ.
|
|
|
|
Más szavakkal: másodlagos attribútum nem függ egyetlen kulcs vaódi
|
|
részhalmazától sem.
|
|
** Tétel
|
|
MInen $1NF$ séma felbontható $2NF$ sémákba úgy, hogy azok használatával az $1NF$
|
|
sémára illesztett, "eredeti" relációk helyreállíthatók.
|
|
* Harmadik normálforma (3NF)
|
|
** Triviális függés
|
|
Ha az $X,Y$ attribútumhalmazokra igaz, hogy $Y\subseteq X$, akkor $X\rightarrow
|
|
Y$ függőséget triviális függőségnek nevezzük, egyébként a függőség nemtriviális.
|
|
** Tranzitív függés
|
|
Adott egy $R$ séma, a sémán értelmezett függőségek $F$ halmaza, $X\subseteq
|
|
R,A\in R$. $A$ tranzitívan fgg $X\text{-től}$, ha $\exists Y\subset R$, hogy
|
|
$X\rightarrow Y$, $Y\not\to X$, $Y\to A$ és $A\notin Y$
|
|
** Harmadik normálforma (3NF)
|
|
*** 1. definíció
|
|
Egy $1NF$ séma $3NF$, ha $\forall A\in R$ másodlagos attribútum és $\forall
|
|
X\subseteq R$ kulcs esetén $\nexists Y$, hogy $X\to Y$, $Y\not\to X$, $Y\to A$
|
|
és $A\not\in Y$
|
|
|
|
Más szavakkal: ha egyetlen másodlagos attribútuma sem függ tranzitívan egyetlen
|
|
kulcstól sem.
|
|
*** 2. Definíció
|
|
Egy $1NF$ $R$ séma $3NF$, ha $\forall X\to A, X\subseteq R, A\in R$ nemtriviális
|
|
föggőség esetén
|
|
- X szuperkulcs vagy
|
|
- A elsődleges attribútum
|
|
** Tétel
|
|
Az előző két definició ekvivalens
|
|
** Tétel
|
|
Ahhoz,hogy egy $(R,F)$ sémáról eldöntsük, hogy $3NF\text{-e}$, elég az $F$
|
|
funkiconális függőségek vizsgálata.
|
|
** Tétel
|
|
Minden legalább $1NF$ relációs séma felbontható $3NF$ sémába úgy, hogy azokból
|
|
az eredeti reláció információveszteség nélkül helyreállítható.
|
|
** Tétel
|
|
Ha egy séma $3NF$ alakú, akkor $2NF$ is egyben.
|
|
|
|
|