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

Adatb ázis I. – 1 1 . előadás

  • Upload
    dorie

  • View
    21

  • Download
    1

Embed Size (px)

DESCRIPTION

Adatb ázis I. – 1 1 . előadás. Kulcsok az SQL – ben . Hivatkoz ás - épségi megszorítások és idegen kulcsok. Kulcsok az SQL-ben Hivatkozási épség é s idegen kulcsok Attrib ú tum é rt é kre vo natk. m egszor í tások Globális megszor í tások Megszor í tások m ó dos í tása - PowerPoint PPT Presentation

Citation preview

Page 1: Adatb ázis I.  – 1 1 .  előadás

1

Adatbázis I. – 11. előadás

Kulcsok az SQL – ben. Hivatkozás- épségi megszorítások és idegen

kulcsok.

Page 2: Adatb ázis I.  – 1 1 .  előadás

2

1. Kulcsok az SQL-ben

2. Hivatkozási épség és idegen kulcsok

3. Attribútum értékre vonatk. megszorítások

4. Globális megszorítások

5. Megszorítások módosítása

6. Triggerek az SQL-ben

7. Tranzakciók

Page 3: Adatb ázis I.  – 1 1 .  előadás

3

0. Bevezetés• Minden beszúrás, törlés és módosítás

után ellenőrzést kellene végrehajtani.• Az SQL 2 lehetőséget ad az adatbázis

épségi megszorításainak az adatbázissémában való megadására.

• A triggerek aktív elemek amelyek bizonyos események hatására lépnek működésbe..

• Csak az SQL 3 ban vannak benne

Page 4: Adatb ázis I.  – 1 1 .  előadás

4

1. Kulcsok az SQL-benLegfontosabb megszorítás a kulcsalkotás deklarációja: egy

attribútum vagy attribútumhalamaz egy relációnak a kulcsa

( nem lehet két sornak megegyező értékű attribútuma vagy

attribútumhalmaza a kulcs attribútumo(ko)n)

Kulcsok megadása a CREATE TABLE utasításnál PRIMARY

KEY es UNIQUE kulcsszavakkal történik.

A kulcs megadása:

1. Attribútum deklarálása relációsémában mint elsődleges

kulcs

2. Hozáadunk egy további deklarációt, ami azt mutatja meg

hogy az attribútum vagy attribútumhalmaz kulcsot alkot

Page 5: Adatb ázis I.  – 1 1 .  előadás

5

A kulcs megadása 2 féle képpen.

CREATE TABLE szemely(CNP Bigint PRIMARY KEY,Név VARCHAR(50));

CREATE TABLE szemely(CNP Bigint,Név VARCHAR(50),PRIMARY KEY(CNP));Ha több, mint 1 attribútum van, akkor csak így lehet

megadni!!!!!!!

Page 6: Adatb ázis I.  – 1 1 .  előadás

6

• Feltételek (egy adott oszlopra vonatkoznak):

• PRIMARY KEY: elsődleges kulcs• UNIQUE: kulcs• REFERENCES tábla(oszlop) [ON-feltételek]: külső

kulcs

• Táblafeltételek (az egész táblára vonatkoznak):

• PRIMARY KEY (oszloplista): elsődleges kulcs

• UNIQUE (oszloplista): kulcs

• FOREIGN KEY (oszloplista) REFERENCES tábla(oszloplista) [ON-feltételek]: külső kulcs

Page 7: Adatb ázis I.  – 1 1 .  előadás

7

Zölddel írva a számla általános adatait láthatjuk

Pirossal a számlasorok attribútumai vannak

Kékkel írva láthatóak a számlasorok.

Page 8: Adatb ázis I.  – 1 1 .  előadás

8

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Ügyfelek

számlaszám

termékID

Számlák

számlája

sorai

darabszám

SorszámÁFA

Számlasorok

mértékegység

egységár

Termékek

Dátum

terméke

név

határidő

azonosító

név bank bszámla

adószám bejegyzés

Page 9: Adatb ázis I.  – 1 1 .  előadás

9

1. Példa : a név atribútum mint elsődleges kulcsCREATE TABLE Szamla (Szamlaszam CHAR(14) PRIMARY KEY,Datum DATE, AFA INT,KliensID INT NOT NULL REFERENCES Kliens(ID));

2. Példa: elsődleges kulcs különálló deklarálásaCREATE TABLE Szamlasor (Szamlaszam CHAR(14), Sorszam INT,Mennyiség FLOAT, Egysegar FLOAT,Termekkod INT REFERENCES Termek(termekID),PRIMARY KEY(Szamlaszam,Sorszam) FOREIGN KEY (Szamlaszam) REFERENCES

Szamla(Szamlaszam);

Page 10: Adatb ázis I.  – 1 1 .  előadás

10

CREATE TABLE Konyv(

KOD BIGINT PRIMARY KEY,

Szerzo VARCHAR(45),

Cim VARCHAR(55)

);

CREATE TABLE Konyvpeldany(

Leltarszam INT PRIMARY KEY,

Vonalkod BIGINT UNIQUE,

Konyvkod BIGINT REFERENCES Konyv(KOD)

);

Page 11: Adatb ázis I.  – 1 1 .  előadás

11

vagy egy más lehetőség a UNIQUE használata:

Példa Számla:

Szamlaszam CHAR(14) UNIQUE

UNIQUE(Szamlaszam)

Számlasorok esetében csak a második használható

UNIQUE(Szamlaszam, Sorszam)

Page 12: Adatb ázis I.  – 1 1 .  előadás

12

• Kulcsfeltételek teljesítésének biztosítása:• Lehetőség van az index deklarálásához, gyorsabb

keresést biztosít • CREATE UNIQUE INDEX nevIndex ON

Kliens(Név)• A kulcsfeltételt minden módosítas után ellenőrizni

kell.• Csak a beszúrás és modosítás okoz gondot, a

törlés nem.• Ha nincs index akkor a reláció minden sorát

ellenőrizni kell.• Ez nagyon időigényes művelet.

Page 13: Adatb ázis I.  – 1 1 .  előadás

13

elsődleges kulcs és egyedi attribútumok hasonlatossága és különbsége:

hasonlatosságPRIMARY KEY es UNIQUE szinonímákkülönbség1. PRIMARY KEY egyszer fordul elő egy

táblában amíg UNIQUE többször is előfordulhat

2. Idegen kulcs csak elsődleges kulcsra vonatkozhat

3. PRIMARY KEY hez indexet lehet hozzákapcsolni

Page 14: Adatb ázis I.  – 1 1 .  előadás

14

2. Hivatkozási épség és idegen kulcsokHivatkozási épség azt jelenti hogy bizonyos attribútumoknak megfelelő érteme KELL legyen.Példa: a Számla relációban a KliensID atribútum értéke 2563, akkor a Kliens relációban van egy sor amelyben az azonosito 2563.Idegen kulcsok más relációra vonatkoznak , más attribútumokra1. A másik reláció attribútumai, amelyekre hivatkozunk elsődleges kulcsok2. A Hivatkozási épség megszorítás a két attribútumot (attribútum-csoportot) összekapcsolja

Page 15: Adatb ázis I.  – 1 1 .  előadás

15

Idegen kulcsokat kétféle képpen deklarálhatjuk:

1. Az idegen kulcs egy attribútumra vonatkozik

REFERENCES <tábla>(<attribútum>)

2. A CREATE TABLE utasítás végén deklaráljuk

FOREIGN KEY <attibútum(ok)> REFERENCES <tábla> (<attribútum(ok)>)

Page 16: Adatb ázis I.  – 1 1 .  előadás

16

1. Példa : idegen kulcs egy attribútumra vonatkozikCREATE TABLE Számla (Számlaszám CHAR(14) PRIMARY KEY,Dátum DATE, ÁFA INT,KliensID INT NOT NULL REFERENCES Kliens(ID));

2. Példa: mindkét eset előfordul egy tábla készítésénélCREATE TABLE Számlasor (Számlaszám CHAR(14), Sorszám INT,Mennyiség FLOAT, Egységár FLOAT,Termékkód INT REFERENCES Termek(termekID),PRIMARY KEY(Számlaszám,Sorszám) FOREIGN KEY (Számlaszám) REFERENCES

Számla(Számlaszám));

Page 17: Adatb ázis I.  – 1 1 .  előadás

17

Hivatkozási épség fenntartásaFutási hiba:1. Számla relációba beszúrunk egy olyan sort, amelyben

a KliensID nem egyezik a Kliens táblából egyik kliens-kóddal sem

2. Számla reláció egy sorában megpróbáljuk módosítani a KliensID-t, olyanra ami nem létezik a Kliens táblában

3. Kliens táblából törölni próbálunk egy olyan sort, amelyikben levő klienskód létezik valamelyik sorban a Számla relációban

4. Kliens relációban módosítása olyan klienskód értékének, amelyik benne van a Számla reláció legalább egy sorában

Az adatbaziskezelőnek három lehetősége van:• Alapértelmezés szerinti eljárás . Ha a feltétel megsérül

a módosítást visszautasítjuk.

Page 18: Adatb ázis I.  – 1 1 .  előadás

18

Továbbgyűrűző eljárás

Számlaszám Dátum ÁFA KliensID

BX 2556345 2006.05.01 19 2584

BX2556346 2006.05.01 19 2563

BX2556347 2006.05.02 19 2563

BX2556348 2006.05.03 19 2584

Klienskód Kliensnév Bank .....

2563 MarcoSoft BCR

2584 GigaByte Reiffeisen

Page 19: Adatb ázis I.  – 1 1 .  előadás

19

ON UPDATE CASCADE

Számlaszám Dátum ÁFA KliensID

BX 2556345 2006.05.01 19 2584

BX2556346 2006.05.01 19 2888

BX2556347 2006.05.02 19 2888

BX2556348 2006.05.03 19 2584

Klienskód Kliensnév Bank .....

2888 MarcoSoft BCR

2584 GigaByte Reiffeisen

Page 20: Adatb ázis I.  – 1 1 .  előadás

20

ON DELETE SET NULL Törölve volt a 2888-as Kliens, a MacroSoft

Számlaszám Dátum ÁFA KliensID

BX 2556345 2006.05.01 19 2584

BX2556346 2006.05.01 19 NULL

BX2556347 2006.05.02 19 NULL

BX2556348 2006.05.03 19 2584

Klienskód Kliensnév Bank .....

2584 GigaByte Reiffeisen

Page 21: Adatb ázis I.  – 1 1 .  előadás

21

A tábla készítése, hogy az előbbi módon működjék

CREATE TABLE Számla( Számlaszám CHAR(14) PRIMARY KEY, Dátum DATE, határidő DATE, ÁFA INT, Fizetve BOOLEAN, KliensID INT REFERENCES Kliens(Klienskód), ON DELETE SET NULL, ON UPDATE CASCADE );

Page 22: Adatb ázis I.  – 1 1 .  előadás

22

Zölddel írva a számla általános adatait láthatjuk

Pirossal a számlasorok attribútumai vannak

Kékkel írva láthatóak a számlasorok.

Page 23: Adatb ázis I.  – 1 1 .  előadás

23

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Ügyfelek

számlaszám

termékID

Számlák

számlája

sorai

darabszám

SorszámÁFA

Számlasorok

mértékegység

egységár

Termékek

Dátum

terméke

név

határidő

azonosító

név bank bszámla

adószám bejegyzés

Page 24: Adatb ázis I.  – 1 1 .  előadás

24

CREATE TABLE Számla(...

KliensID INT REFERENCES Kliens(Klienskód)

ON DELETE CASCADE

ON UPDATE CASCADE

);

Ha kitörölünk egy KLIENSt a kliens táblából, akkor az összes hozzá tartozó számla is kitörlődik.

Ez sem jó, de az adatbázisunk bizonyos szempontból konszisztens maradt, viszont hiányoznak bizonyos számlák.

Page 25: Adatb ázis I.  – 1 1 .  előadás

25

CREATE TABLE Számlasor(...

Termékkód INT REFERENCES Termek(termekID)

ON DELETE CASCADE,

FOREIGN KEY (Számlaszám) REFERENCES Számla(Számlaszám)

ON DELETE CASCADE

ON UPDATE CASCADE

);

1. Az első esetben kitörlődik az összes olyan számlasor, amelyikben egy bizonyos termék megtalálható. Ez teljesen inkonszisztens, mert lehet olyan számlánk, amelyikből csak bizonyos sorok maradtak meg. A számla összértéke is megválozik a törlés miatt.

2. A második eset valamivel jobb, sőt, konszisztencia őrzője, mivel, ha kitörölünk egy számlát, akkor törlődik vele együtt az összes hozzá tartozó számlasor is.

Page 26: Adatb ázis I.  – 1 1 .  előadás

26

3. A törlés szerinti CASCADE (továbbgyűrűzés) érdekesen alakulhat az előzőek szerint:

Ha kitörlünk egy ügyfelet, akkor azzal együtt kitörlődnek a hozzá tartozó számlák. Mivel a számlasorok a számlákhoz ugyancsak CASCADE szerint vannak kapcsolva, kitörlődnek az összes hozzátartozó számlasorok is. Ez a példa mutatja be az igazi továbbgyűrzést, mert egy táblában való törlés, másik két táblában való törlést eredményez.

Page 27: Adatb ázis I.  – 1 1 .  előadás

27

Lógó sorok es módosító eljárások:

Definíció: Lógó sorok azok a sorok amelyek kulcsértéke nincs benne a hivatkozott táblában.Megsértik az adott idegen kulcs megszorítására vonatkozó hivatkozási épséget.Az alapértelmezett eljárás a törlés és módosításokra: Tiltottak azon műveletek, amelyek lógó sorokat hoznak létre abban a relációban, amelyik a másikra hivatkozik.Továbbgyűrűző eljárás: Törli vagy módosítja minden létrejött lógó sortNULL értékre állítás: Az idegen kulcsot NULL értekre változtatja az összes lógó sorban

Page 28: Adatb ázis I.  – 1 1 .  előadás

28

Abban az esetben ha nem adtuk meg ELŐRE a HIVATKOZÁSÉPSÉGI megszorítást, megtörténhet, hogy lógó soraink maradnak, s ezekután nem tudjuk megadni a hivatozás-épségi megszorítást.

A lógó sorokat a LEFT JOIN és a RIGHT JOIN összekapcsolás is megmutatja. A LEFT JOIN esetében a hivatkozó tábla a FROM után az első kell legyen:SELECT Számla.Számlaszám, Kliens.nevFROM Számla LEFT JOIN Kliens ON Számla. KliensID=Kliens.ID;Megadja az összes számlát és a hozzátartozó kliens nevét. (ha van)

Page 29: Adatb ázis I.  – 1 1 .  előadás

29

Azon számlák megkeresése, amelyek “lógnak” a következő képpen is lehetségesek:

SELECT Számla.Számlaszám

FROM Számla

WHERE Számla.KliensID NOT IN

(SELECT Kliens.ID FROM Kliens);

Page 30: Adatb ázis I.  – 1 1 .  előadás

30

3. Attribútum értékre vonatkozó megszorítások

Kétféle képpen adható meg:

1. Attribútumokra vonatkozó megszorítás a relacióséma definálásakor adható meg.

2. Értéktartományra vonatkozó megszorítás, majd az attribútum hozzárendelése az értéktartományhoz.

• Attribútumokra vonatkozó CHECK feltételek korlátozzák az attribútumértéket. Példa:

• CHECK (elnökazon >=100000), CHECK (nem In (‘F’, ‘N’)

Page 31: Adatb ázis I.  – 1 1 .  előadás

31

A NOT NULL feltételek

Példa (a Számla relációban) : KliensID INT REFERENCES Kliens (ID) NOT NULL

Következmények:Nem módosíthatjuk a kliensID attribútumot NULL raNem szúrhatunk egy sort be a Számla relációba

amelyre csak számlaszámot, dátumot, határidőt és ÁFA – t írunk mert akkor a KliensID NULL lenne

Nem alkalmazhatjuk a NULL értékre állítás módszerét

Page 32: Adatb ázis I.  – 1 1 .  előadás

32

Értéktartományra vonatkozó megszorítások:

Értéktartomány megadásával az attribútum értékeit korlátozhatjuk. Az értéktartományra való hivatkozás a VALUE kulcsszóval történik

CREATE DOMAIN NemÉrték CHAR (1)

CHECK (VALUE IN (‘F’,’N’));

Mikor kell egy megszorítást ellenőrizni?

TRANZAKCIÓ után, ha

DEFERRED – ként deklaráljuk.

Létezhet olyan kapcsolat, amelyik nem engedi a bevitelt, csak ha 2 helyre is bevisszük egyszerre.

Page 33: Adatb ázis I.  – 1 1 .  előadás

33

4. Globális megszorításokTöbb attribútumra vonatkozó megszorítások.

A problémát két részre osztjuk:

1. Sorra vonatkozó CHECK fetétel

2. Önálló megszorítások

Sorra vonatkozó CHECK feltétel:- CREATE TABLE utasításban adjuk meg az

attribútumok, kulcsok és idegen kulcsok deklarációja után. Bármi lehet, ami a WHERE után szerepel.

- A rendszer akkor ellenőrzi, amikor egy új sort szúrunk be R – be, vagy amikor R egy sorát módosítjuk

Page 34: Adatb ázis I.  – 1 1 .  előadás

34

Önálló megszorítások

-Reláció egészére : pl. oszlopbeli értékek összegére ad feltételt

1. CREATE ASSERTION kulcsszó,

2. Az önálló megszorítás neve,

3. A CHECK kulcsszó

4. Egy zárójelben megadott feltétel

CREATE ASSERTION <név> CHECK (<feltétel>)

Page 35: Adatb ázis I.  – 1 1 .  előadás

35

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE)Csíkszereda

Megszorítások összehasonlítása:MegszorítasTipus

Hol deklaráljuk Mikor ellenőrzi a rendszer

Minden esetben igaz marad?

Attr. Vonatkozó CHECK feltétel

Az attribútum megadásakor

A relációba való beszúráskor vagy az attrib. módosít

Alkérdés esetén nem

Sorra vonatkozó CHECK feltétel

A relációséma megadásakor

A rel.való beszúr. vagy sor módosít.

Alkérdés esetén nem

Önálló megszorítás

Az adatbázisséma megadásakor

Bármelyik,a feltételben szereplő rel. Változtat.

Igen

Page 36: Adatb ázis I.  – 1 1 .  előadás

36

5. Megszorítások módosítása

Megszorításokat módosíthatjuk, törölhetjük vagy helyettesíthetjük:Megszorítások elnevezéseA törléshez szükség van arra, hogy a Megszorításoknak neve legyen.

A CREATE ASSERTION és CONSTRAINT kulcsszavakkal történikPélda:Nev CHaR (30) CONSTRAINT Nevkulcs PRIMARY KEY,

Nem CHAR (1) CONSTRAINT ferfivagyno CHECK (nem IN (‘F’, ‘N’));

Page 37: Adatb ázis I.  – 1 1 .  előadás

37

Tablákra vonatkozó megszorítások megváltoztatása:

ALTER TABLE kulcsszavakkal, DROP-al törölünk ADD-all hozzáteszünk egy új megszorítástPélda: ALTER TABLE Filmszinesz DROP CONSTRAIN nevkulcs;ALTER TABLE Filmszinesz ADD CONSTRAIN nevkulcs PRIMARY KEY (nev);Értéktartományra vonatkozó megszorítások megváltoztatásaPélda: ALTER DOMAIN Azonertek DROP CONSTRAIN HatjegyuALTER DOMAIN Azonertek ADD CONSTRAIN Hatjegyu CHECK (VALUE<=100000);

Page 38: Adatb ázis I.  – 1 1 .  előadás

38

Önálló megszorítások megváltoztatása:

A DROP ASSERTION kulcsszavakkal törölünk

Létrehozás új deklarációval végezzük el

Példa :

DROP ASSERTION gazdagelnok