SQL DDL-1: táblák és megszorítások

Hasonló dokumentumok
Bevezetés: az SQL-be

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

6.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

SQL DDL-2 (aktív elemek) triggerek

Adatbázis tartalmának módosítása

Az SQL adatbázisnyelv: DML

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

Relációsémák létrehozása SQL nyelvben

Tervezés: Egyed-kapcsolat modell és az SQL DDL: táblák, nézetek

Több táblára vonatkozó lekérdezések Relációs algebra és SQL SELECT

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Relációs algebra 2.rész példák

7. fejezet Kulcsok és idegen kulcsok

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázisok elmélete 10. előadás

Információs rendszerek Adatbázis-kezelés

Lekérdezések az SQL-ben 1.rész

Bevezetés: Relációs adatmodell

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Lekérdezések az SQL-ben 2.rész

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

B I T M A N B I v: T M A N

Bevezetés: Relációs adatmodell

Lekérdezések az SQL-ben 1.rész

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Relációs algebra 1.rész alapok

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázisok tavaszi félév Vizsgatételsor

Adatbázis rendszerek SQL nyomkövetés

Adatbázis tartalmának módosítása. SQL DML utasítások

ADATBÁZISOK: TAN7.EA témaköre SQL DDL, DML, DCL, Tranz.kez.

Adatbázisok elmélete 9. előadás

Bevezetés: Relációs adatmodell

Adatbázisok elmélete 11. előadás

Adatbázis tartalmának módosítása (DML), az adatbázis-kezelı rendszerek felépítése,

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

WHERE záradék (további lehetıségek) SQL specialitások, nem írhatók át relációs algebrába: LIKE. NULL értékek. Az ismeretlen (unknown) igazságérték

Adatbázis-kezelés. Harmadik előadás

Adatbázisok elmélete 9. előadás

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázis kezelés Delphiben. SQL lekérdezések

Feladatok A mai előadáson: Tankönyv -- Termékek feladatai:

Adattípusok. Max. 2GByte

Java és web programozás

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adattípusok. Max. 2GByte

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adatbázis Rendszerek II. 3. SQL alapok

Adatbázis használat I. 5. gyakorlat

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

2.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Relációs adatbázisok tervezése ---2

Tranzakciókezelés PL/SQL-ben

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Az adatbázisrendszerek világa

SQL parancsok feldolgozása

Tankönyv példák kidolgozása

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

BEVEZETÉS Az objektum fogalma

ADATBÁZIS RENDSZEREK I BEADANDÓ

Adatbázisok* tulajdonságai

Java és web programozás

3.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Nézetek és indexek. 8. fejezet Nézettáblák

Az SQL*Plus használata

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

Vizuális programozás gyakorlat

Adatbázis-kezelés, információs-rendszerek

Adatbázisok elmélete

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

RELÁCIÓS ADATBÁZISSÉMÁK. Egyed-kapcsolat modellről átírás

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Átírás:

SQL DDL-1: táblák és megszorítások Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 2.3. Relációsémák definiálása 7.1. Kulcsok és idegen kulcsok 7.2. Értékekre és sorokra vonatkozó megszorítások 7.3. Megszorítások módosítása --- folyt.(ddl-2) 7.4-7.5. Önálló megszorítások és triggerek 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Adatbázis relációsémák definiálása Tankönyv 2.3. fejezete Az SQL tartalmaz adatleíró részt (DDL) is, az adatbázis objektumainak a leírására és megváltoztatására. Objektumok leíró parancsa a CREATE utasítás. Objektumok, például tábla, nézettábla, indextábla, stb. A relációt az SQL-ben táblának (TABLE) nevezik, az SQL alapvetően háromféle táblát kezel: Alaptáblák (permanens) CREATE TABLE Nézettáblák CREATE VIEW (ezt nem feltétlen tárolja) Átmeneti munkatáblák WITH utasítás (lehet rekurzió is) Alaptáblák létrehozása: CREATE TABLE (köv.oldal) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 2

Tábla/reláció sémák SQL-ben A legegyszerűbb formája: CREATE TABLE relációnév ( Attribútum deklarációk listája, További kiegészítések ); Az attribútum deklaráció legalapvetőbb elemei: Attribútumnév típus [kiegészítő lehetőségek] Itt: A típus olyan, amit az SQL konkrét megvalósítása támogat (gyakorlaton Oracle környezetben nézzük meg), Típusok, pl: INTEGER, REAL, CHAR, VARCHAR, DATE A kiegészítő lehetőségek például [PRIMARY KEY] vagy [DEFAULT érték] (köv.lapon példa) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 3

Példa: sörivók adatbázis Sörök(név, gyártó) Sörözők(név, város, tulaj, engedély) Sörivók(név, város, tel) Kedvel(név, sör) Felszolgál(söröző, sör, ár) Látogat(név, söröző) Az aláhúzás jelöli a kulcsot (a sorok a kulcs összes attribútumán nem vehetik fel ugyanazt az értékeket). -- Ez a kulcs, külső kulcs és hivatkozási épség megszorításoknak lesz később kiváló példája. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 4

Egyszerő példák táblák létrehozására CREATE TABLE Sörözık ( név CHAR(20), város VARCHAR2(40), tulaj CHAR(30), engedély DATE DEFAULT SYSDATE ); CREATE TABLE Felszolgál ( sörözı CHAR(20), sör VARCHAR2(20), ár NUMBER(10,2) DEFAULT 1.00 ); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 5

Az SQL értékekrıl (bıvebben gyakorlaton) INTEGER, REAL, stb, a szokásos értékek, számok. STRING szintén, de itt egyes-aposztróf közé kell tenni a szöveget (vagyis nem macskaköröm közé). Két egyes-aposztróf = egynek felel meg, például Joe s Bar megfelel a Joe s Bar szövegnek. Bármely érték lehet NULL DATE és TIME típusok is vannak az SQL-ben. A dátum formátumát meg kell adni DATE yyyy-mm-dd Például: DATE 2007-09-30 (2007. szept. 30) Az idő formátumát is meg kell adni TIME hh:mm:ss Például: TIME 15:30:02.5 (délután fél 4 múlt két és fél másodperccel) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 6

Kulcs megadása PRIMARY KEY vagy UNIQUE Nincs a relációnak két olyan sora, amely a lista minden attribútumán megegyezne. Kulcsoknál nincs értelme a DEFAULT értéknek. Kulcsok megadásának két változata van: Egyszerű kulcs (egy attribútum) vagy Összetett kulcs (attribútumok listája) (példákat lásd a következő oldalon) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 7

Egyszerő kulcs megadása Ha a kulcs egyetlen attribútum, akkor ez az attribútum deklarációban megadható <attribútumnév> <típus> PRIMARY KEY vagy <attribútumnév> <típus> UNIQUE Példa: CREATE TABLE Sörök ( ); név gyártó CHAR(20) CHAR(20) UNIQUE, 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 8

Összetett kulcs megadása Ha a kulcs több attribútumból áll, akkor a CREATE TABLE utasításban az attribútum deklaráció után a kiegészítő részben meg lehet adni további tábla elemeket: PRIMARY KEY (attrnév 1, attrnév k ) Példa: CREATE TABLE Felszolgál ( sörözı CHAR(20), ); sör ár VARCHAR2(20), NUMBER(10,2), PRIMARY KEY (sörözı, sör) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 9

PRIMARY KEY vs. UNIQUE Csak egyetlen PRIMARY KEY lehet a relációban, viszont UNIQUE több is lehet. PRIMARY KEY egyik attribútuma sem lehet NULL érték egyik sorban sem. Viszont UNIQUE-nak deklarált attribútum esetén a táblának lehet olyan sora, ahol a UNIQUE attribútum értéke NULL 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 10

DDL adatleíró részben módosítás Hogyan tudjuk a leíró részt módosítani? CREATE létrehozni DROP eldobni, a teljes leírást és mindazt, ami ehhez kapcsolódott hozzáférhetetlenné válik ALTER módosítani a leírást Ha ezt táblára használjuk DROP TABLE táblanév; ALTER TABLE táblanév DROP attribútumnév - - oszlopot tudunk törölni ADD attribútumnév értéktípus - - új oszlopot adni kiegészítő részek például megszorítások Például mikor adhatunk meg UNIQUE feltételt? 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 11

Megszorítások és triggerek Tankönyv 7. fejezet Aktív elemek olyan kifejezés vagy utasítás, amit egyszer eltároltunk az adatbázisban és az azt várjuk tőle, hogy a megfelelő pillanatban lefusson (pl. adatok helyességének ellenőrzése) A megszorítás adatelemek közötti kapcsolat, amelyet az AB rendszernek fent kell tartania. Példa: kulcs megszorítások. Triggerek olyankor hajtódnak végre, amikor valamilyen megadott esemény történik, mint például sorok beszúrása egy táblába. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 12

Megszorítások (áttekintés) (1) Kulcsok és idegen kulcsok megadása A hivatkozási épség fenntartása Megszorítások ellenőrzésének késleltetése (2) Értékekre vonatkozó feltételek NOT NULL feltételek Attribútumra vonatkozó CHECK feltételek (3) Sorokra vonatkozó megszorítások Sorra vonatkozó CHECK feltételek (4) Megszorítások módosítása (constraints) (folyt.köv.) Önálló megszorítások, triggerek 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 13

Idegen kulcsok megadása Még egy kiegészítő lehetőség Mi köthet össze két táblát? Idegen kulcs (foreign key) megadása Az egyik tábla egyik oszlopában szereplő értékeknek szerepelnie kell egy másik tábla bizonyos attribútumának az értékei között. A hivatkozott attribútumoknak a másik táblában kulcsnak kell lennie! (PRIMARY KEY vagy UNIQUE) Példa: Felszolgál(söröző, sör, ár) táblára megszorítás, hogy a sör oszlopában szereplő értékek szerepeljenek a Sörök(név, gyártó) táblában a név oszlop értékei között. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 14

Idegen kulcs megadása: attribútumként REFERENCES kulcsszó használatának két lehetősége: attribútumként vagy sémaelemként lehet megadni. 1.) Attribútumonként (egy attribútumból álló kulcsra) Példa: CREATE TABLE Sörök ( név CHAR(20) PRIMARY KEY, gyártó CHAR(20) ); CREATE TABLE Felszolgál ( sörözı CHAR(20), sör CHAR(20) REFERENCES Sörök(név), ár REAL ); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 15

Idegen kulcs megadása: sémaelemként 2.) Sémaelemként (egy vagy több attr.-ból álló kulcsra) FOREIGN KEY (attribútum lista) REFERENCES relációnév (attribútum lista) Példa: CREATE TABLE Sörök ( név CHAR(20), gyártó CHAR(20), PRIMARY KEY (név) ); CREATE TABLE Felszolgál ( sörözı CHAR(20), sör CHAR(20), ár REAL, FOREIGN KEY(sör) REFERENCES Sörök(név)); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 16

Idegen kulcs megszorítások megırzése Példa: R = Felszolgál, S = Sörök. Egy idegen kulcs megszorításr relációróls relációra kétféleképpen sérülhet: 1. EgyR-be történő beszúrásnál vagy R- ben történő módosításnál S-ben nem szereplő értéket adunk meg. 2. EgyS-beli törlés vagy módosítás lógó sorokat eredményez R-ben. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 17

Hogyan védekezzünk? --- (1) Példa: R = Felszolgál, S = Sörök. Nem engedjük, hogy Felszolgál táblába a Sörök táblában nem szereplő sört szúrjanak be vagy Sörök táblában nem szereplő sörre módosítsák (nincs választási lehetőségünk, a rendszer visszautasítja a megszorítást sértő utasítást) A Sörök táblából való törlés vagy módosítás, ami a Felszolgál tábla sorait is érintheti (mert sérül az idegen kulcs megszorítás) 3-féle módon kezelhető (lásd köv.oldal) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 18

Hogyan védekezzünk? --- (2) 1. Alapértelmezés (Default) : a rendszer nem hajtja végre a törlést. 2. Továbbgyűrűzés (Cascade): a Felszolgál tábla értékeit igazítjuk a változáshoz. Sör törlése: töröljük a Felszolgál tábla megfelelő sorait. Sör módosítása: a Felszolgál táblában is változik az érték. 3. Set NULL: a sör értékét állítsuk NULL-ra az érintett sorokban. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 19

Példa: továbbgyőrőzés Töröljük a Bud sort a Sörök táblából: az összes sort töröljük a Felszolgál táblából, ahol sör oszlop értéke Bud. A Bud nevet Budweiser -re változtatjuk: a Felszolgál tábla soraiban is végrehajtjuk ugyanezt a változtatást. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 20

Példa: Set NULL A Bud sort töröljük a Sörök táblából: a Felszolgál tábla sör = Bud soraiban a Budot cseréljük NULL-ra. Bud -ról Budweiser -re módosítunk: ugyanazt kell tennünk, mint törléskor. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 21

A stratégia kiválasztása Ha egy idegen kulcsot deklarálunk megadhatjuk a SET NULL és a CASCADE stratégiát is beszúrásra és törlésre is egyaránt. Az idegen kulcs deklarálása után ezt kell írnunk: ON [UPDATE, DELETE][SET NULL CASCADE] Ha ezt nem adjuk meg, a default stratégia működik. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 22

Példa: stratégia beállítása CREATE TABLE Felszolgál ( söröző CHAR(20), sör CHAR(20), ár REAL, FOREIGN KEY(sör) REFERENCES Sörök(név) ON DELETE SET NULL ON UPDATE CASCADE ); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 23

Megszorítások ellenırzésének késleltetése Körkörös megszorítások miatt szükség lehet arra, hogy a megszorításokat ne ellenőrizze, amíg az egész tranzakció be nem fejeződött. Bármelyik megszorítás deklarálható DEFERRABLE (késleltethető) vagy NOT DEFERRABLE-ként (vagyis minden adatbázis módosításkor a megszorítás közvetlenül utána ellenőrzésre kerül). DEFERRABLE-ként deklaráljuk, akkor lehetőségünk van arra, hogy a megszorítás ellenőrzésével várjon a rendszer a tranzakció végéig. Ha egy megszorítás késleltethető, akkor lehet INITIALLY DEFERRED (az ellenőrzés a tranzakció jóváhagyásáig késleltetve lesz) vagy INITIALLY IMMEDIATE (minden utasítás után ellenőrzi) 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 24

Megszorítások (áttekintés) (1) Kulcsok és idegen kulcsok A hivatkozási épség fenntartása Megszorítások ellenőrzésének késleltetése (2) Értékekre vonatkozó feltételek NOT NULL feltételek Attribútumra vonatkozó CHECK feltételek (3) Sorokra vonatkozó megszorítások Sorra vonatkozó CHECK feltételek (4) Megszorítások módosítása (constraints) (folyt.köv.) Önálló megszorítások, triggerek 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 25

Értékekre vonatkozó feltételek Egy adott oszlop értékeire vonatkozóan adhatunk meg megszorításokat. A CREATE TABLE utasításban az attribútum deklarációban NOT NULL kulcsszóval az attribútum deklarációban CHECK(<feltétel>) A feltétel, mint a WHERE feltétel, alkérdés is használható. A feltételben csak az adott attribútum neve szerepelhet, más attribútumok (más relációk attribútumai is) csak alkérdésben szerepelhetnek. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 26

Példa: értékekre vonatkozó feltétel CREATE TABLE Felszolgál ( söröző CHAR(20) NOT NULL, sör CHAR(20) CHECK ( sör IN (SELECT név FROM Sörök)), ár REAL CHECK ( ár <= 5.00 ) ); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 27

Mikor ellenırzi? Érték-alapú ellenőrzést csak beszúrásnál és módosításnál hajt végre a rendszer. Példa: CHECK (ár <= 5.00) a beszúrt vagy módosított sor értéke nagyobb 5, a rendszer nem hajtja végre az utasítást. Példa: CHECK (sör IN (SELECT név FROM Sörök), ha a Sörök táblából törlünk, ezt a feltételt nem ellenőrzi a rendszer. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 28

Megszorítások (áttekintés) (1) Kulcsok és idegen kulcsok A hivatkozási épség fenntartása Megszorítások ellenőrzésének késleltetése (2) Értékekre vonatkozó feltételek NOT NULL feltételek Attribútumra vonatkozó CHECK feltételek (3) Sorokra vonatkozó megszorítások Sorra vonatkozó CHECK feltételek (4) Megszorítások módosítása (constraints) (folyt.köv.) Önálló megszorítások, triggerek 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 29

Sorokra vonatkozó megszorítások A CHECK (<feltétel>) megszorítás a séma elemeként is megadható. A feltételben tetszőleges oszlop és reláció szerepelhet. De más relációk attribútumai csak alkérdésben jelenhetnek meg. Csak beszúrásnál és módosításnál ellenőrzi a rendszer. 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 30

Példa: sor-alapú megszorítások Csak Joe bárja nevű sörözőben lehetnek drágábbak a sörök 5 dollárnál: CREATE TABLE Felszolgál ( söröző CHAR(20), sör ár CHAR(20), REAL, CHECK (söröző= Joe bárja OR ár <= 5.00) ); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 31

Tankönyv példája Attribútumokra és sorokra vonatkozó megszorítások Példa: Ha egy színész neme férfi, akkor a neve nem kezdődhet Ms. -el CREATE TABLE FilmSzínész ( név CHAR(30) PRIMARY KEY, cím VARCHAR(255) NOT NULL, nem CHAR(1), születésidátum DATE, CHECK (nem = 'N' OR név NOT LIKE 'Ms.%') ); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 32

Megszorítások (áttekintés) (1) Kulcsok és idegen kulcsok A hivatkozási épség fenntartása Megszorítások ellenőrzésének késleltetése (2) Értékekre vonatkozó feltételek NOT NULL feltételek Attribútumra vonatkozó CHECK feltételek (3) Sorokra vonatkozó megszorítások Sorra vonatkozó CHECK feltételek (4) Megszorítások módosítása (constraints) (folyt.köv.) Önálló megszorítások, triggerek 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 33

Megszorítások elnevezése Nevet tudunk adni a megszorításoknak, amire később tudunk hivatkozni (könnyebben lehet törölni, módosítani) Tankönyv példái: név CHAR(30) CONSTRAINT NévKulcs PRIMARY KEY, nem CHAR(1) CONSTRAINT FérfiVagyNő CHECK (nem IN ('F', 'N')), CONSTRAINT Titulus CHECK (nem = 'N' OR név NOT LIKE 'Ms.\%') 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 34

Megszorítások módosítása Tankönyv példái: ALTER TABLE FilmSzínész ADD CONSTRAINT NévKulcs PRIMARY KEY (név); ALTER TABLE FilmSzínész ADD CONSTRAINT FérfiVagyNő CHECK (nem IN ('F', 'N')); ALTER TABLE FilmSzínész ADD CONSTRAINT Titulus CHECK (nem = 'N' OR név NOT LIKE 'Ms.\%'); 07A_SQLDDL1constr // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 35