Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatbázisok 5. előadás Tikk Domonkos.

Hasonló előadás


Az előadások a következő témára: "Adatbázisok 5. előadás Tikk Domonkos."— Előadás másolata:

1 Adatbázisok 5. előadás Tikk Domonkos

2 Mai menü Integritási megszorítások SQL ER-modell Data Control Language

3 Integritási megszorítások

4 Integritási megszorítások – integrity constraints (ICs)
IC: olyan feltételek, amelyeknek minden adatbázisba kerülő rekordnak eleget kell tennie, pl. értékkészlet megszorítások. Séma definíciójakor adjuk meg Ellenőrzésre kerülnek a reláció módosulásakor Azok a legális rekordok, amelyek minden megszorítást teljesítenek DBMS-be nem kerülhetnek bele illegális rekordok DBMS felügyeli a megszorításokat: megakadályozza az illegális adatok bekerülését Az adatok tükrözik a tervező célját A valós világot hűen reprezentálják Hibás adatok beszúrása elkerülhető 5

5 Emlékeztető Elsődleges kulcs (PRIMARY KEY) Egyedi kulcs (UNIQUE)
Idegen kulcs (FOREIGN KEY) Ellenőrzés értéktartományra (CHECK, [NOT] NULL ]) 6

6 Megszorítások: feladat
Milyen idegen kulcs megszorítást célszerű tenni az EMP és a DEPT táblák között? Milyen más megszorítást érdemes tenni az EMP táblában?

7 EMP tábla – megszorítások nélkül
CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER (7,2), DEPTNO NUMBER(2) );

8 EMP tábla – elsődleges megszorítások
CREATE TABLE emp ( empno NUMBER(4) NOT NULL, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER (7,2), DEPTNO NUMBER(2) );

9 Példa idegen kulcsra (2)
Csak olyan részlegazonosítóra hivatkozhatunk az EMP táblában, amely létezik már a DEPT táblában CREATE TABLE EMP (empno NUMBER(4) NOT NULL, ENAME VARCHAR2(10), …. DEPTNO NUMBER(2) NOT NULL, PRIMARY KEY (empno), FOREIGN KEY (deptno) REFERENCES DEPT (deptno)); EMP DEPT empno ename deptno 7369 SMITH 20 7499 ALLEN 30 7844 TURNER deptno dname loc 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 7

10 EMP tábla – eddigi megszorítások
CREATE TABLE emp ( empno NUMBER(4) NOT NULL, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER (7,2), DEPTNO NUMBER(2) NOT NULL CONSTRAINT emp_prim_key PRIMARY KEY (empno), CONSTRAINT emp_frgn_key FOREIGN KEY (deptno) REFERENCES DEPT (deptno) );

11 EMP tábla – belső megszorítás
CREATE TABLE emp ( empno NUMBER(4) NOT NULL, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4) CONSTRAINT emp_self_key REFERENCES EMP (empno) HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER (7,2), DEPTNO NUMBER(2) NOT NULL CONSTRAINT emp_prim_key PRIMARY KEY (empno), CONSTRAINT emp_frgn_key FOREIGN KEY (deptno) REFERENCES DEPT (deptno) );

12 Megszorítások kiitatása/beállítása
DELETE FROM emp WHERE UPPER(ename)=’BLAKE’; Hibát ad: integritás megszorítás (TURNER.emp_self_key) megsértés Ok: TURNER főnöke BLAKE, nem lehet törölni, mert akkor a hivatkozás is elvész ALTER TABLE emp DISABLE CONSTRAINT emp_self_key; ENABLE CONSTRAINT emp_self_key; Adattábla integritása sérül – jobb egy másik főnök alá tenni BLAKE összes beosztottját előtte

13 NULL érték Az attribútumok értéke egyes rekordokban lehet ismeretlen (pl. még nem adtak meg belépési dátumot), vagy nem definiált (pl. nincs jutalék az adott beosztásban) Erre szolgál a speciális NULL érték SQL-ben Számos komplikációt okoz: Külön operátorok szükségesek a NULL érték ellenőrzésére (IS NULL/IS NOT NULL) Hogyan értékeljük ki a comm>0-t, ha comm is NULL Mi történik a logikai operátorokkal (AND, OR, NOT)? 3-értékű logikát kell definiálni (T, F, U)

14 Háromértékű logika T AND T; T AND F; T OR F; F OR F; T AND U =
F AND U = U AND U = T OR U = F OR U = U OR U = Nem triviális, és SQL sem teljesen konzisztens

15 SQL: Kleene-féle háromértékű logika
A OR B B True Unknown False A A NOT A True False Unknown A AND B B True Unknown False A NULL-lal való hasonlítás értéke általában NULL kivéve UNION és INTERSECT implementálásában

16 További következmények
Jól át kell gondolni a WHERE feltételeket, mivel kiszedi a nem True értékű rekordokat Új operátorok: outer joins, ill. (+)

17 Ellenőrzések (CHECK) Célja, hogy kiszűrje az illegális adatok bekerülését az adatbázisba Életkor nem lehet 150 felett jegyátlag nem lehet 5.0 felett Hasznos, amikor bonyolultabb megszorítások vannak, mint amit kulcsokkal ki lehet fejezni Csak akkor állnak fent, ha a tábla nem üres Elnevezhetők

18 Példa (1) CREATE TABLE Sailors AND rating <= 10 ) ( sid INTEGER,
sname CHAR(10), rating INTEGER, age REAL, PRIMARY KEY (sid), CHECK ( rating >= 1 AND rating <= 10 )

19 Példa (2) – elnevezéssel
CREATE TABLE Reserves ( sname CHAR(10), bid INTEGER, day DATE, PRIMARY KEY (bid,day), CONSTRAINT noInterlakeRes CHECK (`Interlake’ <> ( SELECT B.bname FROM Boats B WHERE B.bid=bid)))

20 Példa (3) – több táblás Cél: hajók és a tengerészek száma ne érhesse el a 100-at Ez jó? CREATE TABLE Sailors ( sid INTEGER, sname CHAR(10), rating INTEGER, age REAL, PRIMARY KEY (sid), CHECK ( (SELECT COUNT (S.sid) FROM Sailors S) + (SELECT COUNT (B.bid) FROM Boats B) < 100)

21 A helyes megoldás: ASSERTION
Nem táblához kötött CREATE ASSERTION smallClub CHECK ( (SELECT COUNT (S.sid) FROM Sailors S) + (SELECT COUNT (B.bid) FROM Boats B) < 100)

22 Mi határozza meg az integritási megszorításokat (IC)?
A modellezett vállalat „szemantikája”, amit a relációs adatbázissal modellezünk Ellenőrizhető, hogy egy adatbázis megfelel-e egy IC-nek, de sohasem állíthatjuk, hogy egy IC igaz egy adatbázisra Mivel az IC állítása az összes lehetséges rekordra vonatkozik Például azt tudjuk, hogy az ename nem kulcs, de azt hogy az empno kulcs azt csak ellenőrizni tudjuk Elsődleges és idegen kulcsokat gyakran használunk, a többi IC-t ritkábban

23 Táblák létrehozása ER-modell alapján
DB logikai rétegének létrehozása

24 Egyedhalmaz létrehozása
CREATE TABLE Employees (ssn CHAR(11), name CHAR(20), lot INTEGER, PRIMARY KEY (ssn)) Employees ssn name lot

25 Kapcsolathalmaz létrehozása
Mire kell figyelni a reláció létrehozásánál? minden egyedhalmaz kulcsa legyen benne (idegen kulcs) ezek összessége itt szuperkulcs lesz Minden leíró attribútum kapcsolása CREATE TABLE Works_In( ssn CHAR(11), did INTEGER, since DATE, PRIMARY KEY (ssn, did), FOREIGN KEY (ssn) REFERENCES Employees, FOREIGN KEY (did) REFERENCES Departments)

26 Feladat Adjuk meg a Works_In2 relációt az alábbi ER- diagram alapján!

27 Kulcsattribútum és kapcsolattípus figyelembevétele
Hogyan vesszük figyelembe a kapcsolat aritását az integritási megszorítások megadásánál? Mi lesz a kulcsa a Manages relációnak és miért?

28 Megoldások Már nem ssn a kulcs, hanem did
Elválasztja a 2 táblát egymástól Kombinálhatjuk is a két táblát, mivel minden osztálynak külön menedzsere van CREATE TABLE Manages( ssn CHAR(11), did INTEGER, since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees, FOREIGN KEY (did) REFERENCES Departments) CREATE TABLE Dept_Mgr( did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11), since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees)

29 Emlékeztető: participation constraint
Van-e minden osztálynak főnöke? Hivatkozási megszorítás (participation constraint): az egyedhalmaz minden elemének szerepelnie kell a relációnak legalább egy példányában félkövér v. dupla vonallal jelöljük

30 Participation constraint SQL-ben
Néhány tulajdonságot kódolhatunk, de viszonylag kicsiny a mozgástér (CHECK használata nélkül) CREATE TABLE Dept_Mgr( did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11) NOT NULL, since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees, ON DELETE NO ACTION)

31 Gyenge egyedhalmazok Az egyedhalmaz attribútumai nem elégségesek az egyedek azonosítására, és más egyedhalmazok kulcsa is kell ehhez Jelölés: dupla vagy vastag vonal az egyedhalmazra és a kapcsolatra is A gyenge egyedhalmaz minden elemének szerepelnie kell a másik egyedhalmazban!

32 Gyenge egyedhalmazok átírása
A gyenge egyedhalmaz és az azonosító kapcsolathalmazokat egy relációba kódoljuk Az „erős” egyed törlésekor a gyenge egyed törlendő CREATE TABLE Szerződések ( Fizetés INTEGER, Sznév CHAR(11) NOT NULL, Snév CHAR(11) NOT NULL, Cím CHAR(20) NOT NULL, Év INTEGER NOT NULL, PRIMARY KEY (Sznév, Snév, Cím, Év), FOREIGN KEY (Sznév) REFERENCES Színészek, ON DELETE NO ACTION, FOREIGN KEY (Snév) REFERENCES Stúdiók, ON DELETE CASCADE, FOREIGN KEY (Cím,Év) REFERENCES Filmek, ON DELETE NO ACTION)

33 ISA-hierarchiák Tervezési kérdések: átfedés megengedett?
Hourly_Emps ∩ Contract_Emps≠∅ lefedés teljesül? Hourly_Emps ∪ Contract_Emps = Employees

34 ISA-hierarchiák átírása (1)
Általános megoldás 3 reláció: Employees, Hourly_Emps, Contract_Emps Hourly_Emps: minden egyed benne van az Employee táblában is, de kiegészítő infók ebben a táblában Hourly_Emps (hourly_wages, hours_worked, ssn) ON DELETE CASCADE Dolgozók könnyen lekérdezhetők általánosan Órabéres dolgozók speciális attribútumai esetén join-ra van szükség

35 ISA-hierarchiák átírása (2)
Alternatív megoldás Csak 2 reláció: Hourly_Emps, Contract_Emps Hourly_Emps: minden egyed benne van az Employee táblában is, de kiegészítő infók ebben a táblában Hourly_Emps (ssn, name, lot, hourly_wages, hours_worked) Contract_Emps (ssn, name, lot, contractid) Minden dolgozót a két tábla valamelyikében tároljuk Dolgozók a két tábla uniójából lekérdezhetők csak le

36 DCL – Data Control Language

37 DCL – Data Control Language
Tranzakciókezelés COMMIT ROLLBACK LOCK UNLOCK Jogosítványkezelés GRANT … with GRANT options REVOKE

38 Tranzakciókezelés Egységként kezelt utasítássorozat
adatbázis-konzisztencia megőrzése céljából Alaphelyzet – utasításszintű konzisztencia Ha tranzakciószinten szeretnénk, akkor ezt máshogy érhetjük el BEGIN WORK – kezdőpont COMMIT – végpont/jóváhagyás ROLLBACK – érvénytelenítés/visszagörgetés

39 Mentési pont SAVEPOINT – erre lehet hivatkozni a visszagörgetésnél
SAVEPOINT mentesi_pont_neve ROLLBACK – visszagörget tranzakció elejéig (default) mentési pontig ( … TO SAVEPOINT nev) implicite feloldja a táblazárolásokat

40 Tranzakció – példa START TRANSACTION; -- Függ a DBMS-től UPDATE Account SET amount=amount-200 WHERE account_number=1234; UPDATE Account SET amount=amount+200 WHERE account_number=2345; IF ERRORS=0 COMMIT; IF ERRORS<>0 ROLLBACK;

41 Visszagörgetés COMMIT; SAVEPOINT A1; SAVEPOINT A2;
ROLLBACK TO A2; – A2-ig való visszagörgetés ROLLBACK TO A1; – A1-ig való visszagörgetés, A2 mentési pont törlése és zárak (LOCK) törlése ROLLBACK; – visszagörgetés COMMIT-ig és minden mentési pont törlése, zárak feloldása

42 Felhasználókezelés CREATE USER DROP USER CREATE USER hallgato
IDENTIFIED BY pwd; ilyenkor még nincsen semmilyen joga a hallgato-nak ALTER USER hallgato IDENTIFIED BY pwd2; DROP USER hallgato;

43 Jogosultságkezelés GRANT jogok ON adatbázisnév[, táblanév] TO
IDENTIFIED BY pwd WITH GRANT OPTION;

44 Rendszerjogosultságok
CREATE SESSION – kapcsolódás adatbázishoz CREATE TABLE – táblalétrehozási jog CREATE VIEW – nézettábla létrehozási jog CREATE PROCEDURE – függvénylétrehozási jog GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO hallgato; Belépés: CONNECT hallgato/pwd2;

45 Szerepkör Ahelyett hogy egyesével adnánk jogokat, szerepköröket definiálhatunk CREATE ROLE szerepkör_neve GRANT CREATE TABLE, CREATE SESSION TO szerepkör_neve GRANT szerepkör_neve TO user1, user2, user3

46 Objektumkezelési jogosultságok
ALTER DELETE EXECUTE INDEX REFERENCES SELECT UPDATE

47 Példák GRANT SELECT on Students TO hallgato;
GRANT ALL on Students TO hallgato; GRANT SELECT on Students TO PUBLIC; GRANT SELECT on Students TO hallgato_szerepkor; GRANT SELECT on Students TO hallgato WITH GRANT OPTION;

48 Jogok visszavonása REVOKE jogok [,WITH GRANT OPTION] ON
adatbázisnév[, táblanév] FROM | szerepkör | PUBLIC

49 QUERY Language Egyetlen utasítás: SELECT SELECT [DISTINCT] oszlopnevek
FROM táblanevek [WHERE feltétel] [GROUP BY feltétel [HAVING having-feltétel]] [ORDER BY rendezési-feltétel]

50 Beágyazott lekérdezések
WHERE utasításon belül is alkalmazhatók SELECT utasítások [NOT] IN (selectkifejezés) Θ[ANY|ALL] (selectkifejezés) [NOT] EXISTS (selectkifejezés) A kiszámítási kiértékelése belülről kezdődik

51 Példa ANY-re Listázzuk ki azon dolgozókat, akik fizetése kisebb mint valamelyik részlegátlag SELECT ename, sal FROM EMP WHERE sal < ANY (SELECT avg(sal) FROM EMP GROUP by deptno);

52 Példa ALL-ra Listázzuk ki azon dolgozókat, akik fizetése kisebb mint valamennyi részlegátlag SELECT ename, sal FROM EMP WHERE sal < ALL (SELECT avg(sal) FROM EMP GROUP by deptno);


Letölteni ppt "Adatbázisok 5. előadás Tikk Domonkos."

Hasonló előadás


Google Hirdetések