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

Slides:



Advertisements
Hasonló előadás
Szimmetriák szerepe a szilárdtestfizikában
Advertisements

Kauzális modellek Randall Munroe.
A TUDOMÁNYOS KUTATÁS MÓDSZERTANA
2.1Jelátalakítás - kódolás
Az úttervezési előírások változásai
Fizika II..
Számítógépes Hálózatok
Profitmaximalizálás  = TR – TC
A járműfenntartás valószínűségi alapjai
Szenzorok Bevezetés és alapfogalmak
Végeselemes modellezés matematikai alapjai
A magas baleseti kockázatú útszakaszok rangsorolása
Szerkezetek Dinamikája
MÉZHAMISÍTÁS.
Hőtan BMegeenatmh 5. Többfázisú rendszerek
BMEGEENATMH Hőátadás.
AUTOMATIKAI ÉPÍTŐELEMEK Széchenyi István Egyetem
Skandináv dizájn Hisnyay – Heinzelmann Luca FG58PY.
VÁLLALATI Pénzügyek 2 – MM
Hőtan BMEGEENATMH 4. Gázkörfolyamatok.
Szerkezetek Dinamikája
Összeállította: Polák József
A TUDOMÁNYOS KUTATÁS MÓDSZERTANA
Csáfordi, Zsolt – Kiss, Károly Miklós – Lengyel, Balázs
Tisztelt Hallgatók! Az alábbi példamegoldások segítségével felkészülhetnek a 15 pontos zárthelyi dolgozatra, ahol azt kell majd bizonyítaniuk, hogy a vállalati.
J. Caesar hatalomra jutása atl. 16d
Anyagforgalom a vizekben
Kováts András MTA TK KI Menedék Egyesület
Az eljárás megindítása; eljárási döntések az eljárás megindítása után
Melanóma Hakkel Tamás PPKE-ITK
Az új közbeszerzési szabályozás – jó és rossz gyakorlatok
Képzőművészet Zene Tánc
Penicillin származékok szabadgyökös reakciói
Boros Sándor, Batta Gyula
Bevezetés az alvás-és álomkutatásba
Kalandozások az álomkutatás területén
TANKERÜLETI (JÁRÁSI) SZAKÉRTŐI BIZOTTSÁG
Nemzetközi tapasztalatok kihűléssel kapcsolatban
Gajdácsi József Főigazgató-helyettes
Követelmények Szorgalmi időszakban:
Brachmann Krisztina Országos Epidemiológiai Központ
A nyelvtechnológia eszközei és nyersanyagai 2016/ félév
Járványügyi teendők meningococcus betegség esetén
Kezdetek októberében a könyvtár TÁMOP (3.2.4/08/01) pályázatának keretében vette kezdetét a Mentori szolgálat.
Poszt transzlációs módosulások
Vitaminok.
A sebész fő ellensége: a vérzés
Pharmanex ® Bone Formula
Data Mining Machine Learning a gyakorlatban - eszközök és technikák
VÁLLALATI PÉNZÜGYEK I. Dr. Tóth Tamás.
Pontos, precíz és hatékony elméleti módszerek az anion-pi kölcsönhatási energiák számítására modell szerkezetekben előadó: Mezei Pál Dániel Ph. D. hallgató.
Bevezetés a pszichológiába
MOSZKVA ZENE: KALINKA –HELMUT LOTTI AUTOMATA.
Bőrimpedancia A bőr fajlagos ellenállásának és kapacitásának meghatározása Impedancia (Z): Ohmos ellenállást, frekvenciafüggő elemeket (kondenzátort, tekercset)
Poimenika SRTA –
Végeselemes modellezés matematikai alapjai
Összefoglalás.
Az energiarendszerek jellemzői, hatékonysága
Varga Júlia MTA KRTK KTI Szirák,
Konzerváló fogászat Dr. Szabó Balázs
Outlier detektálás nagyméretű adathalmazokon
További MapReduce szemelvények: gráfproblémák
Ráhagyások, Mérés, adatgyűjtés
Járműcsarnokok technológiai méretezése
Grafikai művészet Victor Vasarely Maurits Cornelis Escher.
VÁLLALATI PÉNZÜGYEK I. Dr. Tóth Tamás.
RÉSZEKRE BONTOTT SOKASÁG VIZSGÁLATA
Az anyagok fejlesztésével a méretek csökkennek [Feynman, 1959].
Bevezetés a színek elméletébe és a fényképezéssel kapcsolatos fogalmak
Minőségmenedzsment alapjai
Előadás másolata:

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

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

Integritási megszorítások

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

Emlékeztető Elsődleges kulcs (PRIMARY KEY) Egyedi kulcs (UNIQUE) Idegen kulcs (FOREIGN KEY) Ellenőrzés értéktartományra (CHECK, [NOT] NULL ]) 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?

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) );

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) );

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

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) );

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) );

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

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)

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

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

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. (+)

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

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 )

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)))

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)

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)

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

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

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

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)

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

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?

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)

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

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)

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!

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)

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

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

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

DCL – Data Control Language

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

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

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

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;

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

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;

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

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;

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

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

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;

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

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]

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

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);

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);