2006. október 9.Markó Tamás, PTE TTK1 Az Oracle SQL 7. Kényszerek megadása. Indexek kezelése.
2006. október 9.Markó Tamás, PTE TTK2 A rádiótelefonokat kérem KIKAPCSOLNI!
2006. október 9.Markó Tamás, PTE TTK3 A kényszerek (CONSTRAINT) típusai PRIMARY KEY: a kulcsmezők megadása (csak egyedi értékük lehet) FOREIGN KEY: idegen kulcs megadása (egy másik tábla kulcsában elő kell fordulnia) CHECK: egyéb elvégzendő ellenőrzés Bonyolultabb kényszerek megadásához adatbázis-triggereket lehet használni
2006. október 9.Markó Tamás, PTE TTK4 Kulcs megadása
2006. október 9.Markó Tamás, PTE TTK5 Egyszerű kulcs megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [CONSTRAINT kulcsnév] PRIMARY KEY [, oszlopnév adattípus …]); Példa: CREATE TABLE hallgato ( nev VARCHAR2(30) CONSTRAINT hallg_kulcs PRIMARY KEY, szul_dat DATE, evfolyam NUMBER(1) );
2006. október 9.Markó Tamás, PTE TTK6 (Összetett) kulcs megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [, oszlopnév adattípus …], [CONSTRAINT kulcsnév] PRIMARY KEY (oszlopok)); Példa: CREATE TABLE hallgato ( nev VARCHAR2(30), szul_dat DATE, evfolyam NUMBER(1), CONSTRAINT hallg_kulcs PRIMARY KEY (nev, szul_dat));
2006. október 9.Markó Tamás, PTE TTK7 Egyszerű kulcs megadása utólag Alakja: ALTER TABLE táblanév MODIFY (oszlopnév adattípus [CONSTRAINT kulcsnév] PRIMARY KEY); Példa: ALTER TABLE hallgato MODIFY (nev VARCHAR2(30) CONSTRAINT hallg_kulcs PRIMARY KEY); ORACLE-ben nem megy!
2006. október 9.Markó Tamás, PTE TTK8 Kulcs megadása utólag Alakja: ALTER TABLE táblanév ADD [CONSTRAINT kulcsnév] PRIMARY KEY (oszlopok); Példa: ALTER TABLE hallgato ADD CONSTRAINT hallg_kulcs PRIMARY KEY (nev, szul_dat);
2006. október 9.Markó Tamás, PTE TTK9 Idegen kulcs megadása
2006. október 9.Markó Tamás, PTE TTK10 Egyszerű idegen kulcs megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [CONSTRAINT kulcsnév] REFERENCES táblanév[(oszlopnév)] [, oszlopnév adattípus …]); Példa: CREATE TABLE krend ( … vevokod VARCHAR2(8) NOT NULL REFERENCES vevok, …
2006. október 9.Markó Tamás, PTE TTK11 (Összetett) idegen kulcs megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [, oszlopnév adattípus …], [CONSTRAINT kulcsnév] FOREIGN KEY (oszlopok) REFERENCES táblanév[(oszlopok)]); Példa: CREATE TABLE krend (…, CONSTRAINT krend_vevo_id_kulcs FOREIGN KEY (vevokod) REFERENCES vevok(vevokod));
2006. október 9.Markó Tamás, PTE TTK12 Egyszerű idegen kulcs megadása utólag Alakja: ALTER TABLE táblanév MODIFY (oszlopnév adattípus [CONSTRAINT kulcsnév] REFERENCES táblanév[(oszlopnév)]; Példa: ALTER TABLE krend MODIFY (vevokod VARCHAR2(8) NOT NULL REFERENCES vevok); ORACLE-ben nem megy!
2006. október 9.Markó Tamás, PTE TTK13 Idegen kulcs megadása utólag Alakja: ALTER TABLE táblanév ADD [CONSTRAINT kulcsnév] FOREIGN KEY (oszlopok) REFERENCES táblanév[(oszlopok)]; Példa: ALTER TABLE krend ADD CONSTRAINT krend_vevo_id_kulcs FOREIGN KEY (vevokod) REFERENCES vevok(vevokod);
2006. október 9.Markó Tamás, PTE TTK14 Ellenőrző kényszer megadása
2006. október 9.Markó Tamás, PTE TTK15 Egy mezőre vonatkozó ellenőrzés megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [CONSTRAINT kulcsnév] CHECK (feltétel) [, oszlopnév adattípus …]); Példa: CREATE TABLE hallgato ( nev VARCHAR2(30), szul_dat DATE CHECK (szul_dat = 1 AND evfolyam <= 4));
2006. október 9.Markó Tamás, PTE TTK16 Több mezőre vonatkozó ellenőrzés megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [, oszlopnév adattípus …]) [CONSTRAINT kulcsnév] CHECK (feltétel); Példa: CREATE TABLE hallgato ( nev VARCHAR2(30), szul_dat DATE, evfolyam NUMBER(1)) CONSTRAINT eleg_idos CHECK (YEAR(szul_dat)+evfolyam + 17 <= YEAR(SYSDATE)); legkorábban 18 éves korában lehet 1. éves, 19 éves korában 2. éves, stb.
2006. október 9.Markó Tamás, PTE TTK17 Több mezőre vonatkozó ellenőrzés megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [, oszlopnév adattípus …], [CONSTRAINT kulcsnév] CHECK (feltétel)); Példa: CREATE TABLE hallgato ( nev VARCHAR2(30), szul_dat DATE, evfolyam NUMBER(1), CONSTRAINT eleg_idos CHECK (TO_CHAR(szul_dat, ‘YYYY’)+evfolyam+17 <= 2006)); legkorábban 18 éves korában lehet 1. éves, 19 éves korában 2. éves, stb. kényszerben a SYSDATE nem használható
2006. október 9.Markó Tamás, PTE TTK18 Egymezős ellenőrzések megadása utólag Alakja: ATLER TABLE táblanév MODIFY (oszlopnév adattípus [CONSTRAINT kulcsnév] CHECK (feltétel) ); Példa: ALTER TABLE hallgato MODIFY ( szul_dat DATE CHECK (szul_dat = 1 AND evfolyam <= 4)); ORACLE-ben nem megy!
2006. október 9.Markó Tamás, PTE TTK19 Ellenőrzés megadása utólag Alakja: ALTER TABLE táblanév ADD [CONSTRAINT kulcsnév] CHECK (feltétel); Példa: ALTER TABLE hallgato ADD CONSTRAINT eleg_idos CHECK (TO_CHAR(szul_dat, ‘YYYY’)+evfolyam + 17 <= 2006);
2006. október 9.Markó Tamás, PTE TTK20 Gyakori feltételek ellenőrzésnél 1. Egyszerű összehasonlítás –CHECK (x <= 0)-- x nem pozitív –CHECK (x = y)-- x = y –CHECK (x <> ‘C’)-- x nem egyenlő ‘C’-vel Intervallum belseje –CHECK (x >= 0 AND x =0 és x<=10 –CHECK (x BETWEEN 0 AND 10)-- ugyanaz Intervallum külseje –CHECK (x 10)-- x 10 –CHECK (x NOT BETWEEN 0 AND 10)-- ugyanaz
2006. október 9.Markó Tamás, PTE TTK21 Gyakori feltételek ellenőrzésnél 2. Szöveg hasonlítása mintához –CHECK (x LIKE ‘A_b%’) (x első karaktere A, harmadik karaktere b) Előfordulás felsorolásban –CHECK (x IN (‘a’, ‘b’, ‘c’))-- a vagy b vagy c –CHECK (x IN (SELECT nev FROM hallgato)) (x előfordul a HALLGATO tábla NEV oszlopában) Kizárás felsorolásból –CHECK (x NOT IN (1, 2, 3))-- nem 1, 2 vagy 3 _ egy tetszőleges karakter % akárhány tetszőleges kar.
2006. október 9.Markó Tamás, PTE TTK22 Egyéb teendők a kényszerekkel
2006. október 9.Markó Tamás, PTE TTK23 Saját kényszereink adatai USER_CONSTRAINTS view A fontosabb adatok felsoroltatása: SELECTconstraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name=‘RENDEL’; A constraint_type mező jelentése: C: check, P: primary key, R: foreign key (reference) A “NOT NULL” kikötések miatt is létrejöttek “C” típusú kényszerek!
2006. október 9.Markó Tamás, PTE TTK24 Kényszer törlése Formái: ALTER TABLE táblanév DROP CONSTRAINT kényszernév; ALTER TABLE táblanév DROP PRIMARY KEY; Példa: ALTER TABLE hallgato DROP CONSTRAINT joevfolyam;
2006. október 9.Markó Tamás, PTE TTK25 Jó tudni … A rendszer a kényszerek teljesülését minden rekord létrehozásakor, törlésekor vagy módosításakor ellenőrzi Tömeges adatmódosításnál (pl. adat-import) sok időt vesz igénybe A kényszerek átmenetileg kikapcsolhatók!
2006. október 9.Markó Tamás, PTE TTK26 Indexek
2006. október 9.Markó Tamás, PTE TTK27 Alapelvek Az indexek az adott mező(k) szerinti keresést és rendezést gyorsító segédtáblázatok (nem adattáblák!) Azokat a mezőket indexeljük, amik szerint gyakran keresünk vagy rendezünk A jó index gyorsítja a lekérdezést A kulcs szerint automatikusan készül index is A felesleges index lassítja az adatbázist - az indexek karbantartása is időbe kerül! Az idegen kulcsokat mindig indexeljük meg!
2006. október 9.Markó Tamás, PTE TTK28 Index létrehozása Formája: CREATE [UNIQUE] INDEX indexnév ON táblanév (mezőnév [sorrend] [, mezőnév [sorrend] … ]); –sorrend: ASC = növekvő (alapértelmezés), DESC = csökkenő –UNIQUE: az index alapjául szolgáló mezők kötelezően egyediek Példa: CREATE INDEX hallg_nevsor_idx ON hallgato (nev, evfolyam DESC); –név szerint növekvő, azonos nevűeknél évfolyam szerint csökkenő sorrend
2006. október 9.Markó Tamás, PTE TTK29 Értékek egyediségének ellenőrzése indexeléssel A mezőre UNIQUE indexet készítünk, pl. CREATE UNIQUE INDEX hallg_nev_idx ON hallgato (nev); 1:n kapcsolat esetén az idegen kulcshoz sose készítsünk UNIQUE indexet!
2006. október 9.Markó Tamás, PTE TTK30 Index törlése Formája: DROP INDEX indexnév; Példa: DROP INDEX hallg_nevsor_idx;
2006. október 9.Markó Tamás, PTE TTK31 Jó tudni … A rendszer az indexeket minden rekord létrehozásakor, törlésekor vagy módosításakor aktualizálja Tömeges adatmódosításnál (pl. adat-import) sok időt vesz igénybe Sokszor érdemesebb az indexeket törölni, majd az adatmódosítások után újra létrehozni!
2006. október 9.Markó Tamás, PTE TTK32 Házi feladat SQL script készítése és végrehajtása –a példa-adatbázis kényszereinek létrehozására (a következő diákon vastag betűkkel kiemelve) –az idegen kulcsokra indexek készítésére Figyelem! Mindig előbb a kulcsot hozzuk létre, csak utána a rá hivatkozó idegen kulcsot!
2006. október 9.Markó Tamás, PTE TTK33 A vevők adatai
2006. október 9.Markó Tamás, PTE TTK34 A vevők adatai (VEVOK tábla)
2006. október 9.Markó Tamás, PTE TTK35 A rendelések adatai
2006. október 9.Markó Tamás, PTE TTK36 A rendelések adatai (RENDEL tábla)
2006. október 9.Markó Tamás, PTE TTK37 A rendelések tételei
2006. október 9.Markó Tamás, PTE TTK38 A rendelések tételei (RTETEL tábla)
2006. október 9.Markó Tamás, PTE TTK39 A cikkek adatai
2006. október 9.Markó Tamás, PTE TTK40 A cikkek adatai (CIKK tábla)