Adatbázis használat I. 5. gyakorlat
Tudnivalók Jövő hétre a normalizálást hozni vagy e- mailben beküldeni! 7. héten (= két hét múlva!) nagyzh + FF checkpoint: adattáblák feltöltése, megszorítások 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 2
DML és DDL utasítások DML: Data Manipulation Language sorok beszúrása, módosítása, törlése DDL: Data Definition Language táblák létrehozása, módosítása, törlése 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 3
Tranzakciók SAVEPOINT ittmentettünk; mentési pont létrehozása ROLLBACK TO ittmentettünk; visszagörgetés COMMIT; véglegesítés 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 4
DML: beszúrás Helyezzünk el a dept táblába egy újabb részleget! INSERT INTO dept (deptno, dname, loc) VALUES (50, 'SAJTKÉSZÍTŐK', 'BUDAPEST'); Ami érdekes: sorrend minden értéket megadunk? 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 5
DML: beszúrás Kellene dolgozó is abba a részlegbe: vegyünk fel SAJTKUKAC munkakörbe egy 1111-es azonosítójú személyt! INSERT INTO emp (empno, deptno, job) VALUES (1111, 50, 'SAJTKUKAC'); 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 6
DML: módosítás Legújabb dolgozónknak nem adtunk nevet... és ami számára nagyobb baj, fizetést sem. UPDATE emp SET ename='ödön', sal=500 WHERE empno=1111; Fontos a feltétel megadása, különben mindenhol átírja!!! 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 7
DML: módosítás Adjunk Ödönnek jutalékot is! (10) UPDATE emp SET comm=10 WHERE empno=1111; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 8
DML: törlés A cég felszámolta sajtkészítő üzletágát, szegény Ödönt elbocsátották. Töröljük a táblából! DELETE FROM emp WHERE empno=1111; Körültekintően határozzuk meg a feltételt! (Vagy legalább hozzunk létre előtte egy mentési pontot :P) 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 9
DML: törlés Töröljük a sajtkészítők részlegét a dept táblából! DELETE FROM dept WHERE deptno=50; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 10
DDL: tábla létrehozása Egyszerűbb eset: tábla létrehozása egy lekérdezés eredménye alapján: CREATE TABLE emp2 AS SELECT * FROM emp; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 11
DDL: tábla létrehozása Most azokat másoljuk át új táblába, akiknek 2000 dollárnál több a fizetése! CREATE TABLE emp3 AS SELECT * FROM emp WHERE sal>2000; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 12
DDL: tábla létrehozása Teljesen új tábla létrehozása: CREATE TABLE újtábla (ezegyszám NUMBER(5,2), ezegyszöveg VARCHAR2(10), ezegydátum DATE); Megjegyzés: a CHAR kötött hosszúságú! 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 13
DDL: módosítás ALTER TABLE táblanév ADD (...); ALTER TABLE táblanév MODIFY (...); ALTER TABLE táblanév DROP COLUMN oszlopnév; CASCADE CONSTRAINTS: csak óvatosan! ALTER TABLE táblanév RENAME COLUMN Réginév TO Újnév; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 14
DDL: módosítás Adjunk hozzá egy új oszlopot a másolattáblánkhoz (Színe)! Legyen mindenkinek a kedvenc színe a kék! ALTER TABLE emp3 ADD (színe VARCHAR(10)); UPDATE emp3 SET színe='kék'; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 15
DDL: átnevezés, törlés RENAME emp3 TO emp23; DROP TABLE emp3; 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 16
VÉGE
FF példa Jani bácsi székgyártó kisiparos szeretne adatbázist készíttetni. 1. Tárolnánk a székek megnevezését, típusát, színét, méretét, árát, a készlet nagyságot. 2. Tároljuk a vásárlók adatait is: név, cím, telefonszám, törzsvásárló-e. 3. Nyilvántartjuk a rendeléseket: ki, mikor, mit rendelt. 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 18
FF példa 1. lépés: az ősmodell sémája székvásárlás <megnevezés, típus, szín, méret, ár, készlet, név, cím, telszám, törzsvásárló, dátum, mennyiség> A megnevezés, a szín és a típus együtt azonosítja a széket, a név és a telszám a vásárlót. Adott típusú szék többféle színben kapható, de ezek mérete és ára megegyezik. 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 19
FF példa 2. lépés: függőségek felírása {név, telszám} => {cím, törzsvásárló} {megnevezés, típus, szín} => {méret, ár, készlet} DE: {megnevezés, típus} => {méret, ár}!!!! 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 20
FF példa És a vásárlások? (Mi az ősreláció kulcsa?) {név, telszám, megnevezés, típus} => {dátum, mennyiség, stb.} vagy {név, telszám, megnevezés, típus, dátum} => {mennyiség, stb.} 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 21
FF példa 3. lépés: normalizálás 1NF: oké, mert minden adatunk elemi. 2NF: nem oké! A {megnevezés, típus, szín} => {méret, ár, készlet} függőség sérti, mert a méret és az ár csak a bal oldal egy részétől függ, nem az egésztől, tehát itt szétbontás (dekompozíció) következik: {megnevezés, típus} => {méret, ár} és {megnevezés, típus, szín} => {készlet} 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 22
FF példa 2NF folytatás: hasonló módon persze a vásárlásos nagy függőségünket is szét kell szedni. Így ezek maradnak: {név, telszám, megnevezés, típus, szín} => {dátum, mennyiség} {megnevezés, típus} => {méret, ár} {megnevezés, típus, szín} => {készlet} {név, telszám} => {cím, törzsvásárló} 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 23
FF példa 3NF oké, mert ezekben már nincs tranzitív függés. BCNF oké. 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 24
FF példa Eredmény: vásárlás<név, telszám, megnevezés, típus, szín, dátum, mennyiség> szék<megnevezés, típus, méret, ár> készlet<megnevezés, típus, szín, készlet> vásárló<név, telszám, cím, törzsvásárló> Elsődleges kulcsok, idegen kulcsok... 2010. 03. 11. nagy.gabriella@nik.uni-obuda.hu 25