Adatbázis-kezelés alapok
Mirıl lesz szó? 1. Adatbázis-tervezés 2. Relációs adatbázis kezelık - Oracle 3. SQL alapok 4. SQL adatdefiníció 5. SQL lekérdezések 6. SQL adatkarbantartás
Adatbázis-tervezés A felhasználói rendszerek túlnyomó része adatfeldolgozás: Adatok tárolása Adatok átalakítása Adatok elıkeresése Adatok megjelenítése A felhasználói rendszer sikere a helyes adatszerkezeten múlik!
Adatbázis-tervezés Rendszerfejlesztés folyamata: 1. Megvalósíthatósági elemzés 2. Elemzés Követelmény-elemzés Követelmény-specifikáció 3. Tervezés Logikai Fizika Adatbázis-tervezés 4. Megvalósítás, programozás 5. Tesztelés 6. Üzembehelyzés/Oktatás Adatmodellezés
Adatmodellezés Célja: Az adatok helyes logikai szerkezetének meghatározása a jelenlegi rendszer (követelmény-elemzés) és az igényelt rendszer (követelmény-specifikáció) szempontjából Eszközök: Egyed-kapcsolat diagram Normalizálás
Adatmodellezés Alapfogalmak: Egyed (entitás): azok az objektumok, amiket le szeretnénk írni. (pl. könyv) Tulajdonság (attribútum): amivel leírjuk az objektumokat (pl. cím, szerzı) Lényeges (idıben) állandó Kapcsolat: az egyedek közötti viszony leírására szolgálnak. (pl. melyik kiadó adta ki)
Adatmodellezés Egyed-Kapcsolat diagram: Egyedtípus (entitások halmaza): Kapcsolat foka 1:1 házastársa FÉRJ FELESÉG KÖNYV 1:N Aláfölérendeltség OSZTÁLY DOLGOZÓ dolgozik DOLGOZÓ M:N dolgozik PROJEKT
Adatmodellezés - ETK Egyed Tulajdonság Könyv Példány Szerzı Cím Típus Elıfordulás ISBN 963 577 251 1 12 (Könyvtári kód) Stolnicki Gyula: SQL kézikönyv Kapcsolat 1:N 1:1, N:M Könyv- Példány (1:N)
Adatmodellezés Esettanulmány Könyvtár (jelenlegi rendszer) Vannak könyveink, melynek tudjuk a címét, kiadóját, kiadás évet, szerzı(i)t, és a szerzı(k) nemzetiségét Az egyes könyvekhez tárgyszavakat rendelhetünk hozzá (esetleg többet is)
Adatmodellezés Esettanulmány Könyvtár Egyedek: KÖNYV SZERZİ KIADÓ TÁRGYSZÓ
Adatmodellezés Esettanulmány Könyvtár Egyed-Kapcsolat diagram 1. KIADÓ kiadja TÁRGYSZÓ KÖNYV SZERZİ tartozik írta Problémás kapcsolatok
Adatmodellezés Esettanulmány Könyvtár Egyed-Kapcsolat diagram 2. KIADÓ kiadja TÁRGYSZÓ tartozik KÖNYV írta SZERZİ KÖNYV/ TÁRGYSZÓ KÖNYV/ SZERZİ
Adatmodellezés Egyedek belsı szerkezete: Az adott egyed leírására szolgáló tulajdonságok Tulajdonságtípusok: Azonosító elemi összetett Leíró
Adatmodellezés Azonosító: Az adott egyed (elıfordulásainak) egyértelmő azonosítására szolgáló tulajdonság(ok) Egyedinek kell lennie Nem lehet üres értéke Típusok: Nominatív : önmagában csak azonosításra szolgáló tulajdonság(ok), egyéb jelentése nincs (pl. Neptunkód) Deszkriptív: azonosításon kívül egyéb jelentése is van. elemi (pl. Kiadó neve) összetett (pl. Név+ Születési dátum+ Anyja neve) Vegyes (pl. személyi szám)
Adatmodellezés Funkcionális függés: Egy egyeden belül az A tulajdonság funkcionálisan meghatározza B tulajdonságot, ha minden esetben azonos A tulajdonság- érték mellett ugyanaz a B tulajdonság- érték szerepel. Pl. Az ABC-123 rendszámhoz mindig a LADA gyártmány társul, és ugyanígy a többi rendszám esetén is, tehát a Rendszám tulajdonság funkcionálisan meghatározza a Gyártmány tulajdonságot. ( a valóságban vannak kivételek pl. JIMMY-1 rendszám)
Adatmodellezés Normalizálás: Célja az egyedek tulajdonságaiból kiindulva helyes adatmodell kialakítása. Normálformák: 0. Normálforma (NF): Minden egyednek kell lennie azonosítójának. 1. NF: 0.NF és minden leíró tulajdonságnak funkcionálisan függeni kell az azonosítótól (nem lehetnek benne ismétlıdı csoportok) 2. NF: 1.NF és minden leíró tulajdonságnak a teljes azonosítótól funkcionálisan is függeni kell (összetett azonosító esetén egyik leíró tulajdonság függ csupán egy kulcsrészlettıl- részleges függés) 3. NF: 2. NF és minden leíró tulajdonság csakis az azonosítótól függ (a leíró tulajdonságok között nem lehet funkcionális függés tranzitív függés) Megjegyzés: ha egy egyed 1. NF-ban van és azonosítója elemi, akkor mindjárt 2.NF-ban is lesz. Léteznek magasabb normálformák is nagyon speciális esetekre.
Adatmodellezés Normalizálás lépései: 0. Normálforma (NF): Felsoroljuk az összes tulajdonságot, és meghatározzuk az azonosítót 1. NF: Megkeressük az ismétlıdı tulajdonság-csoportokat, ezeket kiemeljük egy új egyedbe és hozzávesszük az eredeti egyed azonosítóját. A régi egyedbıl az ismétlıdı tulajdonságokat eltüntetjük. Az új egyed azonosítója összetett lesz: egyik része az eredeti egyed azonosítója, másik része az ismétlıdı csoporton belüli alkalmas azonosító. Az egész folyamatot addig folytatjuk, amíg találunk ismétlıdı csoportot 2. NF: 1.NF és az egyed azonosítója elemi, akkor mindjárt 2.NF. is. Ha összetett azonosító, megvizsgáljuk, hogy létezik-e olyan leíró tulajdonság (csoport), amelyet már valamely azonosítórészlet is önmagában meghatároz. Az ilyen tulajdonságokat, az ıket meghatározó azonosítórészlettel együtt kiemeljük egy új egyedbe, és a leíró tulajdonságokat az eredeti egyedbıl eltüntetjük (az azonosítórészt NEM!) Az új egyed azonosítója a meghatározó azonosítórészlet legyen. Az egész folyamatot addig folytatjuk, amíg találunk részlegesen függı csoportot. 3. NF: Megvizsgáljuk, hogy leíró tulajdonságok között találunk-e funkcionális függést, ha igen, az ilyen tulajdonságokat, az ıket meghatározó leíró tulajdosággal (-gokkal) együtt kiemeljük egy új egyedbe, és a meghatározott leíró tulajdonságokat az eredeti egyedbıl eltüntetjük (de a meghatározót NEM!) Az új egyed azonosítója a meghatározó leíró tulajdonság legyen. Az egész folyamatot addig folytatjuk, amíg találunk tarnzitívan függı csoportot.
Adatmodellezés 0.NF 1.NF ISBNkód Könyvcím Szerzı(k) neve Szerzı(k) nemzetisége Kiadó neve Kiadó székhelye Kiadás éve Tárgyszó(sza vak) Ismétlıdı csoport Ismétlıdı csoport ISBNkód Szerzıkód Szerzı neve Szerzı nemzetisége ISBNkód Tárgyszó ISBNkód Könyvcím Kiadó neve Kiadó székhelye Kiadás éve Részleges függés
Adatmodellezés 2.NF Szerzıkód Szerzı neve Szerzı nemzetisége ISBNkód Tárgyszó ISBNkód Könyvcím Kiadó neve Kiadó székhelye Kiadás éve Tranzitív függés 3.NF Szerzıkód Szerzı neve Szerzı nemzetisége ISBNkód Szerzıkód ISBNkód Tárgyszó Kiadó neve Kiadó székhelye ISBNkód Könyvcím Kiadó neve Kiadás éve SZERZİ KÖNYV/ SZERZİ KÖNYV/ TÁRGYSZÓ KIADÓ KÖNYV
Adatmodellezés Kapcsoló tulajdoság: egy egyed azonosítója leíró, vagy azonosítórészként szerepel egy másik egyedben. Kapcsolat az egyed belsı és külsı szerkezete között: Az alárendelt egyednek azonosítórészként vagy leíró tulajdonságként tartalmaznia kell a fölérendelt egyed azonosítóját.
Adatmodellezés Esettanulmány Könyvtár A normalizálásból származó Egyed-Kapcsolat diagram 3. KIADÓ kiadja KÖNYV SZERZİ KÖNYV/ TÁRGYSZÓ KÖNYV/ SZERZİ
Adatmodellezés Esettanulmány Könyvtár Végleges Egyed-Kapcsolat diagram 4. KIADÓ kiadja TÁRGYSZÓ KÖNYV SZERZİ KÖNYV/ TÁRGYSZÓ KÖNYV/ SZERZİ
Adatmodellezés Esettanulmány- Könyvtár (igényelt rendszer) Az eddig (katalógus) nyilvántartásra alapozva meg szeretnénk oldani a kölcsönzés nyilvántartását is. A kölcsönzık az adott könyv példányait kikölcsönzik, ha nincs bent egy sem, akkor elıjegyzésbe veszik. Ha a kölcsönzı nem hozzá vissza idıre könyvet, akkor a késés napjai számától függı büntetést fizet, ami könyvenként 100 Ft.
Adatmodellezés Esettanulmány- Könyvtár (igényelt rendszer) Új egyedek: KÖLCSÖNZİ PÉLDÁNY ELİJEGYZÉS
Adatmodellezés KIADÓ kiadja TÁRGYSZÓ KÖNYV SZERZİ KÖNYV/ TÁRGYSZÓ KÖNYV/ SZERZİ ELİJEGYZÉS PÉLDÁNY KÖLCSÖNZİ
Adatmodellezés KIADÓ kiadja TÁRGYSZÓ KÖNYV SZERZİ KÖNYV/ TÁRGYSZÓ KÖNYV/ SZERZİ ELİJEGYZÉS PÉLDÁNY KÖLCSÖNZİ KÖLCSÖNZÉS
Adatmodellezés KÖNYV ISBNkód Könyvcím Kiadó neve Kiadás éve Példányszám SZERZİ Szerzıkód Szerzı neve Szerzı nemzetisége KIADÓ Kiadó neve Kiadó székhelye KÖNYV/SZERZİ ISBNkód Szerzıkód KÖNYV/TÁRGYSZÓ ISBNkód Tárgyszó TÁRGYSZÓ Tárgyszó PÉLDÁNY Könyvtárikó d ISBNkód KÖLCSÖNZİ Kölcsönzıkód Kölcsönzınév Irányítószám Település Lakcím Telefon Tagság kezdete Tagság vége KÖLCSÖNZÉS Kölcsönzıkód Könyvtárikód Kölcsönzés dátuma Lejárat dátuma Visszadátum ELİJEGYZÉS Kölcsönzıkód ISBNkód Elıjegyzés dátuma Aktív-e
Adatbázis tervezése Adatmodell TERVEZÉS Adat(bázis) terv fájlkezelés Adatbázis-kezelı rendszer Hierarchikus Hálós Relációs
Adatbázis tervezése Adatbáziskezelı rendszerek (DBMS) elınyei: Minden adat az DBMS-en keresztül érhetı logikai fizikai adatfüggetlenség Ügyfél-kiszolgáló architektúra Több felhasználó hatékony kiszolgálás Adatbiztonság adathozzáférés, jogosultságok Adatok biztonsága tranzakció-kezelés helyreállítás, mentés- visszatöltés
Adatbázis tervezése Relációs modell: Reláció: A1, A2, R A 1 A 3 K A A 2 n A 3 alaphalmaz ok K A n Egy általános relációt legtöbbször táblázatos formában adjuk meg
Adatbázis tervezés Relációs modell: Egyed tábla Tulajdonság mezı Azonosító elsıdleges kulcs Kapcsoló tulajdonság idegen kulcs Kapcsolat idegen kulcson keresztül megvalósított logikai kapcsolat hivatkozási integritás
SQL nyelv SQL :Structured Query Language Nem programozási (értsd nem algoritmus leíró) nyelv, hanem a lekérdezı nyelv Szabványos SQL-92 Relációs adatbázis kezelık szinte kivétel nélkül támogatják Tartalmaz Adatdefiníciós Data Definition Language (DDL) Adatmanipuláló Data Manipulation Language (DML) elemeket
SQL DDL Tábla definiáló utasítások CREATE TABLE - létrehozás ALTER TABLE (definíció)módosítás DROP TABLE - törlés
SQL DDL CREATE TABLE táblanév (táblaelem-felsorolás) táblaelem-felsorolás:= táblaelem táblaelem, táblaelem-felsorolás Táblaelem:= oszlop- meghatározás megszoritás-meghatározás Oszlop-meghatározás:= oszlopnév adattípus [DEFAULT érték] [oszlopmegszorítás] Oszlop-megszorítás:=NOT NULL CHECK megszorítás UNIQUE PRIMERY KEY REFERENCE DEFAULT érték:= szöveg beépített érték NULL
SQL DDL SQL adattípusok: Számok: SMALLINT INT LONG FLOAT NUMBER(számjegyekszáma, tizedesjegyek száma) Szöveg CHAR(n) VARCHAR2(n) DÁTUM DATE
SQL DDL -Esettanulmány KIADÓ tábla létrehozása: CREATE TABLE KIADO ( Kiadonev VARCHAR2(40) PRIMARY KEY, Kiado_szekhely VARCHAR2(25) NOT NULL) SZERZO tábla: CREATE TABLE SZERZO ( Szerzokod INTEGER PRIMARY KEY, Szerzonev VARCHAR2(35) NOT NULL, Szerzo_nemzetiseg VARCHAR2(15))
SQL DDL -Esettanulmány KÖNYV tábla létrehozása: CREATE TABLE KONYV ( ISBNKOD NUMBER(10,0) PRIMARY KEY, Konyvcim VARCHAR2(50) NOT NULL, Kiadonev VARCHAR2(40) REFERENCES KIADO, Kiadas_eve INTEGER, Peldanyszam SMALLINT) TARGYSZO tábla: CREATE TABLE TARGYSZO ( Targyszo VARCHAR2(20) PRIMARY KEY)
SQL DDL -Esettanulmány KONYV_SZERZO tábla létrehozása: CREATE TABLE KONYV_SZERZO ( ISBNKod NUMBER(10,0) REFERENCES KONYV, Szerzokod INTEGER REFERENCES SZERZO, PRIMARY KEY(ISBNkod, Szerzokod) ) KONYV_TARGYSZO tábla: CREATE TABLE KONYV_TARGYSZO ( ISBNKod NUMBER(10,0) REFERENCES KONYV, Targyszo VARCHAR2(20) REFERENCES TARGYSZO, PRIMARY KEY(ISBNKod, Targyszo))
SQL DDL -Esettanulmány PÉLDÁNY tábla létrehozása: CREATE TABLE PELDANY ( Konyvtarikod INTEGER PRIMARY KEY, ISBNKod NUMBER(10,0) REFERENCES KONYV) KOLCSONZO tábla: CREATE TABLE KOLCSONZO ( Kolcsonzokod INTEGER PRIMARY KEY, Kolcsonzonev VARCHAR2(35) NOT NULL, IRSZ INTEGER NOT NULL, Telepules VARCHAR(20) NOT NULL, Lakcim VARCHAR(50) NOT NULL, Telefon VARCHAR(15), Tagsag_kezdete DATE NOT NULL, Tagsag_vege DATE)
SQL DDL - Esettanulmány KOLCSONZES tábla: CREATE TABLE KOLCSONZES ( Kolcsonzokod INTEGER REFERENCES KOLCSONZO, Konyvtarikod INTEGER REFERENCES PELDANY, Kolcsonzes_datuma DATE, Lejarat_datuma DATE NOT NULL, Visszahozas_datuma DATE, PRIMARY KEY(Kolcsonzokod, Konyvtarikod, Kolcsonzes_datuma)) ELOJEGYZES tábla: CREATE TABLE ELOJEGYZES ( Kolcsonzokod INTEGER REFERENCES KOLCSONZO, ISBNKod NUMBER(10,0) REFERENCES KONYV, ELojegyzes_datuma DATE, Aktiv_e CHAR(1) NOT NULL CHECK( Aktiv_e IN ( I, N )), PRIMARY KEY(Kolcsonzokod, ISBNKod, Elojegyzes_datuma))
SQL DML Adatkarbantartó utasítások INSERT UPDATE DELETE Lekérdezések SELECT
SQL DML Egy rekord felvitele: INSERT INTO táblanév (oszlopnév-nevek) VALUES (érték(ek),[default] Több rekord felvitele egy másik táblából: INSERT INTO táblanév (oszlopnév-nevek) SELECT lekérdezés
SQL DML- Esettanulmány INSERT INTO KIADO VALUES( Kiskapu Kft., Budapest ) INSERT INTO SZERZO VALUES (16, Joe Celko, amerikai ) INSERT INTO KONYV VALUES (9639301205, SQL felsıfokon, Kiskapu Kft.,2002, 2)
SQL DML- Esettanulmány INSERT INTO TARGYSZO VALUES( SQL ) INSERT INTO KONYV_SZERZO VALUES (9639301205, 16) INSERT INTO KONYV_TARGYSZO VALUES (9639301205, SQL )
SQL DML- Esettanulmány INSERT INTO PELDANY VALUES (18,9639301205) INSERT INTO PELDANY VALUES (19,9639301205) INSERT INTO KOLCSONZO (Kolcsonzokod, Kolcsonzonev,IRSZ,Telepules,Lakcim,Telefon,Tags ag_kezdete) VALUES (1, 'Ford Fairlane',12623, 'Los Angeles', 'Pacific Ocean Beach 2589.', '1-800- 73737328','1991-06-27')
SQL DML- Esettanulmány INSERT INTO KOLCSONZES (Kolcsonzokod, Konyvtarikod,Kolcsonzes_datuma,Lejarat_da tuma) VALUES (1, 19,'2003-09-30','2003-10-21')
SQL DML- Esettanulmány INSERT INTO KIADO SELECT * FROM SZILAGYI.KIADO INSERT INTO SZERZO SELECT * FROM SZILAGYI.SZERZO INSERT INTO KONYV SELECT * FROM SZILAGYI.KONYV INSERT INTO PELDANY SELECT * FROM SZILAGYI.PELDANY INSERT INTO TARGYSZO SELECT * FROM SZILAGYI.TARGYSZO INSERT INTO KOLCSONZO SELECT * FROM SZILAGYI.KOLCSONZO
SQL DML- Esettanulmány INSERT INTO KONYV_SZERZO SELECT * FROM SZILAGYI.KONYV_SZERZO INSERT INTO KONYV_TARGYSZO SELECT * FROM SZILAGYI. KONYV_TARGYSZO INSERT INTO KOLCSONZES SELECT * FROM SZILAGYI.KOLCSONZES INSERT INTO ELOJEGYZES SELECT * FROM SZILAGYI.ELOJEGYZES
SQL SELECT SELECT oszlopnevek * FROM Táblanév(ek) WHERE feltétel(ek) ORDER BY oszlopszám(ok) GROUP BY oszlop(ok) HAVING feltétel
SQL S ELECT példák 1. Szerzık listája SELECT * FROM Szerzo 2. Lista csak könyvcímekrıl SELECT Konyvcim FROM Konyv 3. Mely városokból származnak a kölcsönzıink? SELECT DISTINCT Telepules FROM Kolcsonzo
SQL SELECT példák 1. Hányféle könyvünk van? SELECT COUNT(*) FROM KONYV 2. Hány darab könyvünk van összesen? SELECT SUM(Peldanyszam) FROM KONYV 3. Átlagosan hány napig volt(van) kint a könyv a kölcsönzıknél? SELECT AVG(DECODE(Visszahozas_datuma,NULL, Sysdate-Kolcsonzes_datuma, Visszahozas_datuma-Kolcsonzes_datuma)) FROM Kolcsonzes
SQL SELECT példák 1. Hányféle könyvünk van? SELECT COUNT(*) FROM KONYV 2. Hány darab könyvünk van összesen? SELECT SUM(Peldanyszam) FROM KONYV 3. Átlagosan hány napig volt(van) kint a könyv a kölcsönzıknél? SELECT AVG(DECODE(Visszahozas_datuma,NULL, Sysdate-Kolcsonzes_datuma, Visszahozas_datuma-Kolcsonzes_datuma)) FROM Kolcsonzes
SQL SELECT példák 1. Kölcsönzık legutóbbi belépésük szerint rendezve SELECT Kolcsonzonev FROM Kolcsonzo Order BY Tagsag_kezdete DESC 2. Kölcsönzıként összesen hány könyvet kölcsönöztek ki? SELECT Kolcsonzokod, COUNT(konyvtarikod) FROM Kolcsonzes GROUP BY Kolcsonzokod 3. Mely könyvek vannak meg egynél több példányban? SELECT * from KONYV WHERE Peldanyszam>1
SQL SELECT példák 1. Adott kiadó által kiadott könyvek címei SELECT KONYV.Konyvcim FROM KONYV, KIADO WHERE KIADO.Kiadonev='Kiskapu Kft.' AND KONYV.Kiadonev=KIADO.Kiadonev 2. Kiknél van kint aktuálisan könyv? SELECT DISTINCT KOLCSONZO.Kolcsonzonev FROM KOLCSONZO, KOLCSONZES WHERE KOLCSONZES.Visszahozas_datuma IS NULL AND KOLCSONZO.Kolcsonzokod=KOLCSONZES.Kolcsonzokod
SQL DML - UPDATE UPDATE táblanév SET oszlop(ok)=érték WHERE feltétel
SQL DML - UPDATE Ford Fairlane új helyre költözik UPDATE KOLCSONZO SET IRSZ=45556, Telepules='Venice', Lakcim='Verona Drive 6767.' WHERE Kolcsonzokod=1
SQL DML - DELETE DELETE FROM táblanév WHERE feltétel Pl. Töröljük ki a Virágnyelv tárgyszót: DELETE FROM TARGYSZO WHERE Targyszo='Virágnyelv'
SQL Házi feladatok 1. Keressük ki, kik kölcsönöztek ma! 2. Határozzuk meg kölcsönzıként a fizetendı büntetés összegét! 3. Listázzuk ki azokat a szerzıket, akiket eddig már olvasott valaki! 4. Mely kiadó könyvei a legkurrensebbek!