Megszorítások
Megszorítások és triggerek
- Ezeket az AB rendszer fogja betartani/megkövetelni
- Megszorítás adatelemek közötti kapcsolat
- pl. kulcs megszorítások
- Triggerek események bekövetkezésekor történik
- pl. adatelem beszúrásakor/törlésekor
Megszorítások típusai
- Kulcsok
- Idegen kulcsok
- hivatkozási épség megszorítás
- \(\large{\Pi_{sör}(Felszolgál)\subseteq\Pi_{név}(Sör)}\)
- Érték-alapú megszorítás
- Típusmegkötések, lehetséges értékek
- Sor-alapú megszorítás
- Mezők közötti kapcsolatok leírása
Idegen kulcsok
- Reláció attribútumainak értékei egy másik reláció értékei között együttesen meg kell, hogy jelenjen
- pl. a
Felszolgál(kocsma, sör, ár)táblánál elvárjuk, hogy az itt felsorolt sörök aSöröktáblanévoszlopában is szerepeljenek
- pl. a
- Megadni hasonlóan lehet, mint az elsődleges kulcsnál
- Egy attribútumnál egyszerűen utána
- Mantra:
<attribútum> REFERENCES <reláció>(<attribútum>)
- Mantra:
- Több attribútumnál a séma elemeként
- Mantra:
FOREIGN KEY(<attribútumok listája>) REFERENCES <reláció>(<attribútumok>) - Sorrendbe kell megadni...
- Mantra:
- Egy attribútumnál egyszerűen utána
- A hivatkozott attribútum(ok)nak is kulcsoknak kell lenniük
PRIMARY KEYvagyUNIQUE
Idegen kulcs megszorítás sérülése
Adott
Sszülő ésRhivatkozó reláció esetén
- Egy
R-be történő beszúrásnálS-ben nem szereplő értéket adunk meg - Egy
S-beli törlés azR-ben "lógó" sorokat eredményezhet
Idegen kulcs megszorítás biztosítása
- Beszúrás megtagadása nem létező hivatkozásra
- Törlés megtagadása létező kapcsolat esetén
- Módszerek:
Default- Továbbgyűrűzés - CASCADE
- Sor törlése
- Sor módosítása
Set NULL
Stratégia kiválasztása
- Idegen kulcs deklarálása után megadható
ON [UPDATE, DELETE] [SET NULL, CASCADE]
- Ennek hiányában az alapértelmezett stratégia működik
Idegen kulcs megszorítás - Példa
CREATE TABLE Felszolgál (
kocsma 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
);
Attribútum megszorítások
- Adott oszlop értékeire vonatkozik
CHECK(<feltétel>)az attribútum deklarációja után- A feltételben legfelső szinten csak a szóban forgó attribútum szerepelhet
- Más attribútumok csak a feltételhez használt alkérdésben szerepelhetnek
- A
CHECKfeltételt csak beszúráskor ellenőrzi a rendszer - A feltétel nem teljesülése a utasítás megtagadását okozza
Attribútum ellenőrzés - Példa
CREATE TABLE Felszolgál (
kocsma CHAR(20),
sör CHAR(20) CHECK ( sör IN
(SELECT név FROM Sörök)),
ár REAL CHECK (ár <= 5.00)
);
Sor-alapú megszorítások
CHECK(<feltétel>)megszorítás séma elemenként- Feltétel tetszőleges oszlop használható
- Más reláció oszlopai csak alkérdésekben
- Csak beszúrásnál és módosításnál ellenőrzi a rendszer
Sor-alapú megszorítások - Példa
CREATE TABLE Felszolgál (
kocsma CHAR(20),
sör CHAR(20),
ár REAL,
CHECK (kocsma = 'Joe bárja' OR ár <= 5.00)
);
Globális megszorítás
- Adatbázissémához tartoznak
- Mantra:
CREATE ASSERTION <név> CHECK(<feltétel>); - A feltétel tetsuőleges táblára és oszlopra hivatkozhat
- Bármely módosításnál ellenőrzött
- Okosabb rendszerek a hivatkozott relációk módosításához köti az ellenőrzést
Globális megszorítás - Példa
Kocsmák, ahol a sörök átlagosan drágábbak
5.00(EA szerint dollárnál)
CREATE ASSERTION CsakOlcsó CHECK(
NOT EXISTS(
SELECT kocsma
FROM Felszolgál
GROUP BY kocsma
HAVING 5.00 < AVG(ár)
));
Alkesz(név, cím, telefon)ésKocsma(név, cím, engedélySzám)táblákban nem lehet több kocsma, mint alkesz
CREATE ASSERTION TöbbAlkesz CHECK(
(SELECT COUNT(*) FROM Kocsma) >=
(SELECT COUNT(*) FROM Alkesz)
);
Triggerek
- A globális megszorítások erősek, de olykor problémásak
- Attribútum és sor alapú megszorítások egyszerűbbek, de pont ezért nem elég kifejezőek
A triggerek esetén megadható, mikor történjen az ellenőrzés
CEA szabályok
- Event-contition-action