Adatbázisok Fleiner Rita, fleiner.rita@nik.bmf.hu Tankönyv: Kende Mária, Nagy István: ORACLE példatár SQL, PL/SQL Kende Mária, Kotsis DomokosNagy István: Adatbázis-kezelés az ORACLE-rendszerben
Bevezető fogalmak Környezetünket le akarjuk írni. Ehhez adatokat kell gyűjtenünk az objektumairól, az objektumok tulajdonságait meg kell határoznunk, valamint meg kell figyelnünk a köztük levő kapcsolatokat. Az adatoknak egy jól strukturált halmazát adatbázisnak nevezzük, amelyből a később információt akarunk majd nyerni.
Adatbázis Alapja az adat (adathalmaz) Valamilyen szempont szerint rendezett, csoportosított, és tárolt adatok összessége
Adatbázis tervezés Azt a folyamatot, mikor kigondoljuk, hogy az adatbázisunkat milyen struktúra szerint építjük fel, adatbázis tervezésnek nevezzük Feleljen meg annak a funkciónak, amire használni szeretnénk. Úgy rendezzük, úgy csoportosítsuk az adatokat, hogy minél hatékonyabban tudjuk a szükségeseket visszakeresni.
Adatbázis tervezés lépései 1. Koncepcionális tervezés Eredmény: Koncepcionális adatmodell 2. Logikai tervezés Eredmény: Logikai adatmodell 3. Fizikai tervezés Eredmény: Fizikai adatmodell
Adatmodellezés Egyed : A valós világ egy objektuma, melyet tulajdonságaival (attribútumaival) lehet leírni. Lehet személy, tárgy, fogalom, elképzelés. Tulajdonság (attribútum): jellemzők, amivel leírjuk a bennünket érdeklő objektumot. Kapcsolat: a valós világban az objektumok nem önállóan léteznek, hanem más objektumokkal valamilyen viszonyban állnak. Ennek a viszonynak a realizálása a kapcsolat.
Adatmodellezés Az egyednek, a tulajdonságnak és a kapcsolatnak van típusa és előfordulása. A típus mindig absztrakt, az előfordulás pedig konkrét.
Egyedtípus: a valós világ objektumainak, egyedeinek absztrakt osztálya Egyedtípus: a valós világ objektumainak, egyedeinek absztrakt osztálya. Az egyedek fontosabb tulajdonságait kigyűjtjük, és magasabb szinten osztályozzuk. Egyed előfordulás: az egyedtípusba sorolható konkrét objektum. Tulajdonságtípus: az objektumokat leíró tulajdonságok absztrakt osztálya. Tulajdonság előfordulás: a tulajdonságtípusba tartozó konkrét jellemző
HALLGATÓ(Személyi szám, Név, Cím, Szak) Egyedtípus: Hallgató Tulajdonságtípus: Személyi szám, Név, Cím, Szak Egyed előfordulás: Kovács József, Kiss Gizi, stb. Tulajdonság előfordulás: Személyi szám: AS 12345, XY54321, stb. Név: Kovács József, Kiss Gizi, stb. Cím: Nyíregyháza, Szeged, stb. Szak: Számtech-angol, Számtech-fizika, stb.
Kapcsolat: az egyedtípusok a valós világ modelljében nem önállóan léteznek, hanem más egyedtípusokkal valamilyen viszonyban vannak. Két egyedtípus között akkor van kapcsolat, ha van közös tulajdonságtípusuk. Ezt kapcsoló tulajdonságtípusnak nevezzük. Kapcsolat foka megmutatja, hogy az egyik egyedtípusnak hány előfordulása kapcsolódhat a másik egyedtípus előfordulásához. 1:1 kapcsolat pl.: a házaspár kapcsolata 1:N kapcsolat pl.: a tulajdonos-kocsi kapcsolat N:M kapcsolat az író-könyv kapcsolat
Kapcsoló tulajdonság: HALLGATÓ[Szem. szám, Név, Cím, Szak] KOCSI[Rendszám, Szín, Típus] Hallgató[Szem. szám, Név, Cím, Szak] – Kocsi[Rendszám, Szín, Típus, Szem. szám]
Tulajdonság fajtái Azonosító tulajdonság: Az egyedtípus azon tulajdonságtípusát, vagy tulajdonságtípusok kombinációját, mely minden egyed előfordulás esetén különböző értéket vesz fel az egyedtípus azonosítójának nevezzük. Ha az azonosító egy tulajdonságból áll, akkor egyszerűnek, ha többől akkor összetettnek nevezzük. Kapcsoló tulajdonság Leíró tulajdonság: nem azonosító és nem kapcsoló
Koncepcionális adatmodell: véges számú egyedtípus, amelyek mindegyikét véges számú tulajdonságtípus definiálja a köztük lévő véges számú kapcsolattal együtt. Séma: A koncepcionális modell megadása Modellezési technikák: hierarchikus, hálós, relációs, szemantikai, stb. Ez alapján megkülönböztetünk hierarchikus, hálós, relációs adatmodelleket. Minden adatmodellhez tartozik egy kezelőnyelv Az adatbázisok 90%-a relációs.
Adatbázis (AB): véges számú egyed előfordulások, azokat leíró véges számú tulajdonságok előfordulások, és a köztük lévő véges számú kapcsolat előfordulások adatmodell szerint szervezett együttese. Adatbázis–kezelő rendszerre (ABKR): Program, vagy programcsomag, mely biztosítja az AB felépítését, karbantartását,az adatok hatékony lekérdezését, emberi hozzáférés lehetőséget. Minden ABKR mögött egy-egy adatmodell áll. Minden adatmodellnek megvan a saját kezelő nyelve.
Relációs adatmodell Codd 1970 körül kidolgozott egy matematikai apparátust, amellyel nagyon jól lehet adatmodellezést végezni. Megszületett az első relációs adatmodell. Ma az ABKR-ek 90%-a relációs. Tartomány megszorítás: A relációs adatmodellezésben a D tartomány atomi értékek véges halmazából áll. D-nek van kiterjedése, típusa és értékeinek formátuma.
Koncepcionális szint Relációs séma: R<A1,A2,....,An>= A1xA2x… xAn R: relációs séma neve Ai: attribútum, hozzá tartozik egy tartomány Di Ai tartománya : dom(Ai) = Di n: reláció séma foka R< A1,A2,....,An > jelölés esetén az attribútumok sorrendje kötött (relációs ABKR esetén ezt tételezzük fel)
Példa relációs sémára · Hallgató<Személyi szám, Név, Cím, Szak> · Kocsi<Rendszám, Szín, Típus>
Reláció: r(R) Def.1: Egy R n-ed fokú relációs sémában elem n-esek egy adott halmaza (azaz a relációs séma részhalmaza). r( R )={t1,t2,…,tm}, ahol titj ti=<v1,v2,…,vn> egyed előfordulás, vkdom(Ak) Def.2: R-t meghatározó attribútumok tartományaiból alkotott Descartes szorzat egy részhalmaza. r( R ) dom(A1) x dom(A2) x …x dom(An)
Logikai szint Reláció: egy két dimenziós tábla, mely oszlopokból és sorokból épül fel. Oszlopait (Személyi szám, Név, stb.) attribútumoknak nevezzük, számuk: a reláció fokának nevezzük. Sorait rekordoknak hívjuk, sorok számát a reláció terjedelmének nevezzük, két sor nem lehet azonos. Azokat az attribútumokat, melyek minden egyes sorra különböző értéket vesznek fel, kulcsjelölteknek nevezzük.
Integritási megszorítások Egyedintegritási megszorítás: Elsődleges kulcsra vonatkozó [primary key, PK]: a kulcsjelöltek közük ki kell választani azt/azokat, melye(ke)t azonosítóként fogunk használni. Séma szinten ezt aláhúzással jelöljük. Fontos fogalmak: szuperkulcs, minimális szuperkulcs, egyszerű kulcs, összetett kulcs, elsődleges attribútum, másodlagos attribútum.
2. Referenciális megszorítás: Idegen kulcsra vonatkozó [foreign key, FK]: Ha egy tábla elsődleges kulcsa egy másik táblában is megjelenik, akkor abban a másik táblában idegen kulcsnak nevezzük. Két relációs séma (R1, R2) rekordjai közötti kapcsolatot ír le. R1 FK attribútuma(i) R1 idegen kulcsa, ha FK tartományai R1-ben megegyeznek R2 elsődleges kulcsának tartományaival t1 R1rekordja, t2 R2 rekordja: t1[FK]= t2 [PK] Minden t1-hez létezik t2 a következő tulajdonságokkal
Relációs modellben standard lekérdezőnyelv alapulhat Relációs AB séma: relációs sémák és integritási megszorítások együttese S={R1, R2 , …, Rn} Λ IM Relációs AB (példány): relációk (táblák) együttese, ahol minden reláció eleget tesz a specifikált integritási megszorításoknak DB ={r1, r2 , …, rn} Relációs modellben standard lekérdezőnyelv alapulhat Relációalgebrán (absztr. algebra, halmaz elm.) Relációkalkuluson (matematikai logika)
SQL relációalgebrán alapuló lekérdezőnyelv SELECT SzelekcióLista FROM Táblalista [WHERE LogikaiOszlopkifejezés] [ ORDER BY RendezőOszlopkifejezés-lista];
LogikaiOszlopkifejezés: SzelekcióLista: *, Oszlopkifejezés, Oszlopkifejezés AS MásodlagosOszlopnév, Oszlopkifejezés AS „MásodlagosOszlopnév”. Táblalista: Fizikai vagy logikai táblanév Fizikai vagy logikai táblanév másodlagos táblanév LogikaiOszlopkifejezés: Oszlopnevek, konstansok, műveletek, egysoros függvények,… RendezőOszlopkifejezés: Oszlopkifejezés[ASC | DESC]
Listázzuk ki az emp tábla tartalmát! SELECT * FROM emp; Listázzuk ki az emp tábla alkalmazottainak ID-ját, nevét és belépési idejét!
SELECT ename AS "Név", job AS "Munkakör", sal AS "Fizetés" FROM emp;
Listázzuk ki az emp tábla alkalmazottainak nevét, munkakörét és fizetését! Az ename legyen a név, a job a munkakör és a sal a fizetés.
SELECT ename AS "Név", job AS "Munkakör", sal AS "Fizetés" FROM emp;
Előző feladat, csak a fizetés szerint növekvő sorrendet kérünk.
SELECT ename AS "Név", job AS "Munkakör", sal AS "Fizetés" FROM emp ORDER BY sal;
Listázzuk ki az emp tábla alkalmazottainak nevét, munkakörét és fizetését, ahol a fizetés nem esik 1500 és 2850 közé. Előző, csak feltétel: WHERE deptno = 20
SELECT ename AS "Név", job AS "Munkakör", sal AS "Fizetés" FROM emp WHERE sal NOT BETWEEN 1500 AND 2850;
Mi az eredmény és miért? SELECT ename AS név, sal AS fizetés, sal+comm AS jövedelem FROM emp ORDER BY sal+comm DESC;
Jó megoldás SELECT ename AS név, sal AS fizetés, sal+NVL(comm,0) AS jövedelem FROM emp ORDER BY jövedelem DESC;
Decode(oszlopkif., h1,t1,kif.) SELECT ename AS Neve, job AS Munkakör, DECODE(NVL(comm,-1), -1, 'Nem jár jutalék', comm) AS Jutalék FROM emp;
CASE kifejezés SELECT ename AS Neve, job AS Munkakör, CASE NVL(comm,-1) WHEN -1 THEN 'Nem jár jutalék‘ ELSE TO_CHAR(comm) END AS Jutalék FROM emp;
Mi történik? SELECT ename AS Név, deptno AS Részleg, sal+NVL(comm,0) AS Jövedelem, (sal+NVL(comm,0)) * 0.20 AS "ADÓ" FROM emp ORDER BY "ADÓ" DESC, Név ASC;
Normalizálás Funkcionális függés Olyan fogalom, melyen a normalizálás folyamata alapszik Egy egyeden belül, két tulajdonság között értelmezett fogalom Legyen E egyedünk, és A, ill. B tulajdonságok Az E egyeden belül a B tulajdonság funkcionálisan függ az A tulajdonságtól, ha E bármely előfordulás esetén, abból, hogy az A tulajdonság értékei megegyeznek, következik, hogy B értékei is meg fognak egyezni.
Normálformák, normalizálás folyamata A normalizálás a funkcionális függésen alapszik
Első normál forma (1. NF) Egy egyed első normál formában van, ha minden tulajdonsága funkcionálisan függ az elsődleges kulcstól. Amennyiiben az egyednek van olyan tulajdonsága, mely funkcionálisan nem függ az elsődleges kulcstól, akkor az egyed nem normalizált, vagy 0NF alakú. Lényegében azokat az egyedeket nevezzük nem normalizáltaknak, melyek valamely tulajdonság(ok) alatt több értéket is felvehetnek, azaz ismétlődő csoportot tartalmaznak.
Második normál forma (2. NF) Részleges függés fogalma: Ha egy egyed elsődleges kulcsa összetett, akkor előfordulhat, hogy valamelyik tulajdonsága nem csak az elsődleges kulcstól függ, hanem annak egy valódi részhalmazától. Ilyenkor azt mondjuk hogy részlegesen függ az elsődleges kulcstól
Második normál forma (2. NF) Egy egyed második normál formában van, ha első normál formában van, és nem tartalmaz részleges függést. Tehát nincs olyan attribútuma, mely funkcionálisan függ az összetett kulcs egy részhalmazától.
Harmadik normál forma (3. NF) Tranzitív függés fogalma Ha egy egyedben, az összes tulajdonság funkcionálisan függ az elsődleges kulcstól, és valamelyik leíró tulajdonság funkcionálisan függ egy másik leíró tulajdonságtól is, akkor tranzitív függésről beszélünk
Harmadik normál forma (3. NF) Egy egyed harmadik normál formában van, ha második normál formában van, és nem tartalmaz tranzitív függést. Tehát nincs olyan tulajdonsága, mely funkcionálisan függ egy másik leíró tulajdonságtól.
Boyce-Codd normál forma, BCNF Egy 3NF egyed BCNF-ban van, ha a kulcs valódi része nem függ más attribútumtól