Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaGábor Kelemen Megváltozta több, mint 10 éve
1
2014. 07. 23. Kényszerek megadása. Indexek kezelése.
2
2014. 07. 23. 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
3
2014. 07. 23. Kulcs megadása
4
2014. 07. 23. Egyszerű kulcs megadása a táblával együtt Alakja: CREATE TABLE táblanév (oszlopnév adattípus [CONSTRAINT kényszerné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) );
5
2014. 07. 23. (Ö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));
6
2014. 07. 23. 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);
7
2014. 07. 23. Idegen kulcs megadása
8
2014. 07. 23. 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, …
9
2014. 07. 23. (Ö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));
10
2014. 07. 23. 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!
11
2014. 07. 23. 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);
12
2014. 07. 23. Ellenőrző kényszer megadása
13
2014. 07. 23. 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));
14
2014. 07. 23. 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.
15
2014. 07. 23. 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ó
16
2014. 07. 23. Egymezős ellenőrzések megadása utólag Példa: CREATE TABLE Persons ( P_Id int NOT NULL CHECK (P_Id>0), LastName varchar2(255) NOT NULL, FirstName varchar2(255), Address varchar2(255), City varchar2(255) )
17
Több mezős ellenőrzések megadása utólag CREATE TABLE Hallgató ( P_Id int NOT NULL, LastName varchar2(255) NOT NULL, FirstName varchar2(255), Address varchar2(255), City varchar2(255), CONSTRAINT chk_Person CHECK (P_Id>0 AND City=‘Pécs') ) 2014. 07. 23.
18
Ellenőrzés megadása utólag Alakja: ALTER TABLE táblanév ADD [CONSTRAINT kulcsnév] CHECK (feltétel); Példa: ALTER TABLE Hallgató ADD CHECK (P_Id>0) Példa 2 ALTER TABLE Hallgató ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Pécs')
19
2014. 07. 23. 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
20
2014. 07. 23. 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.
21
2014. 07. 23. Egyéb teendők a kényszerekkel
22
2014. 07. 23. 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!
23
2014. 07. 23. 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;
24
2014. 07. 23. 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!
25
2014. 07. 23. Indexek
26
2014. 07. 23. 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!
27
2014. 07. 23. 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
28
2014. 07. 23. É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!
29
2014. 07. 23. Index törlése Formája: DROP INDEX indexnév; Példa: DROP INDEX hallg_nevsor_idx;
30
2014. 07. 23. 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!
31
2014. 07. 23. 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!
32
2014. 07. 23. A vevők adatai
33
2014. 07. 23. A vevők adatai (VEVOK tábla)
34
2014. 07. 23. A rendelések adatai
35
2014. 07. 23. A rendelések adatai (RENDEL tábla)
36
2014. 07. 23. A rendelések tételei
37
2014. 07. 23. A rendelések tételei (RTETEL tábla)
38
2014. 07. 23. A cikkek adatai
39
2014. 07. 23. A cikkek adatai (CIKK tábla)
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.