Megszorítások, tranzakciók, nézettáblák, indexek, jogosultságok
Megszorítások és triggerek
A megszorítás adatelemek közötti kapcsolat, amelyet az AB rendszernek fent kell tartania.
Triggerek olyankor hajtódnak végre, amikor valamilyen esemény történik, mint pl. sorok beszúrása egy táblába.
Megszorítások típusai:
- Kulcsok
- Idegen kulcsok, vagy hivatkozási épség megszorítás
- Attribútum alaú megszorítás: egy adott attribútum lehetséges értékeiről mond valamit
- Sor alapú megszorítás: mezők közötti kapcsolat leírása
- Globális megszortás: bármilyen SQL kifejezés
Idegen kulcsok
Egy reláció attribútumainak értékei egy másik reláció értékei között is meg kell, hogy jelenjenek együttsesn.
A REFERENCES
kulcsszót kell használni:
- egy attribútum után
- A séma elemenként:
FOREIGN KEY (<attribútumok listája>)
REFERENCES<reláció>(<attribútumok>)
A hivatkozott attribútumoknak kulcsnak kell lenniük.
Reláció sérülés
Egy idegen kulcs megszorítás relációról relációra kétféleképpen sérülhet:
- Egy -be történő beszúrásnál -ben nem szereplő értéket adunk meg
- Egy -beli törlés "lógó" sorokat eredményez -ben
Hogyan védekezhetünk?
- Default
- Továbbgyűrűzés
- Set
NULL
-
Ha egy idegen kulcsot deklarálunk megadhatjuk a
SET, NULL, CASCADE
stratégiát is módosításra és törlésre 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.
Attribútum alapú ellenőrzések
- Adott oszlop értékeire vonatkozóan
- A
CHECK(<feltétel>)
hozzáadása az attribútum deklarációjához - Feltételben csak az adott attribútum neve, más attribútumok csak alkérésben
- Csak beszúrásnál és módosításnál hajtódik végre az attribútum alapú ellenőrzés
Sor alapú megszorítások
CHECK(<feltétel>)
megszorítás a séma elemeként- Feltételben tetszőleges oszlop és reláció (más relációk attribútumai csak alkérésben)
- Csak beszúrásnál és módosításnál ellenőrzi a rendszer
Globális megszorítás
- Adatbázissémához tartoznak
CREATE ASSERTION <név>
CHECK(<feltétel>);
- Bármilyen módosításra ellenőriz
- Egy okos rendszer felismeri, hogy mely változtatásokra szükséges ez valóban
Triggerek
-
A globális megszorításokkal sok mindent le lehet írni, de ellenőrzésük gondot jelenthet.
-
Az attribútum- és sor-alapú megszorítások ellenőrzése egyszerűbb,de ezekkel nem tudunk mindent kifejezni.
-
A triggerek esetén a felhasználó mondja meg, hogy egy megszorítás mikor kerüljön ellenőrzésre.
-
A triggereket eseményenként ECA szabályoknak (event-condition-action) is nevezik.
Példa:
CREATE TRIGGER TeaTrig
BEFORE INSERT ON Felszolgál
REFERENCING NEW ROW AS ÚjSor
FOR EACH ROW
WHEN (ÚjSor.tea NOT IN
(SELECT név FROM Teák))
INSERT INTO Teák(név)
VALUES(ÚjSor.tea);
Tranzakciók
- Olyan folyamat, ami adatbázis lekérdezéseket, módosításokat tartalmaz
- Az itasítások egy "értelmes egészet" alkotnak
- Egyetlen utasítást tartalmaznak, vagy SQL-ben eyplicit módon megadhatóak
- Kell: végrehajtásuk tartós legyen
- Az oprendszerektől eltérően az AB rendszereknek el kell különíteniük a folyamatokat
Tranzakciók feldolgozása
A tranzakciófeldolgozó két nagyobb részből áll:
- Konkurenciakezelő: tranzakciók oszthatatlanságára, elkülönítésére
- Naplózás- és helyreállítás-kezelő: tranzakciók tartóssága
ACID tranzakciók
- Atomiság (atomicity): vagy az összes, vagy egy utasítás sem hajtódik végre
- Konzisztencia (consistency): az adatbázis megszorítások megőrződnek
- Elkülönítés (isolation): a felhasználók számára úgy tűnik, mintha a folyamatok elkülönítve, egymás után futnának le.
- Tartósság (durability): egy befejeződott tranzakció módosítási nem vesznek el.
COMMIT
- A
COMMIT
SQL utasítás végrehajtása után a tranzakció véglegesnek tekinthető. - A tranzakció módosításai véglegesítődnek
ROLLBACK
- A
ROLLBACK
SQL utasítás esetén a tranzakció abortál, azaz az összes utasítás visszagörgetésre kerül. - A 0-val való osztás bvagy egyéb hibák szintén okozhatnak rollback-et.
Elkülönítési szintek
- Az SQL négy elkülönítési szintet definiál, amelyek megmondják, hogy milyen interakciók engedélyezettek egy időben végrehajtandó tranzakciók közöt.
- Ezek közül az egyik szint ("sorbarendezhető") = ACID tranzakciók.
- Minden AB rendszer a saját tetszése szerint implementálhatja a tranzakciókat.
SET TRANSACTION ISOLATION LEVEL X
, ahol X =
SERIALIZABLE
: ACID tranzakcióREPEATABLE READ
: ha az adatot újra beolvassuk, akkor amit először láttunk, másodszor is látni fogjukREAD COMMITED
: a tranzakció csak kommitálás utáni adatot láthat, de nem feltétlenül mindig ugyan azt az adatotREAD UNCOMMITED
: akkor is látja a tranzakció az adatokat, amikor a változtatások még nem lettek véglegesítve
Nézettáblák
-
A nézettábla olyan reláció, amit tárolt táblák és más nézettáblák felhasználásával definiálunk.
-
Kétféle létezik:
- virtuális: nem tárolódik az adatbázisban, csak a relációt megadó lekérdezést tárolunk.
- materializált: kiszámítódik, majd tárolásra kerül
-
Deklaráció:
CREATE [MATERIALIZED] VIEW <név> AS <lekérdezés>;
- Alapesetben virtualizált nézettábla jön létre.
Materializált nézettáblák
-
Probléma: minden alkalommal, amikor az alaptáblák valamelyike változik, a materializált nézettábla frissítése is szükségessé válhat, ez viszont néha túl költséges.
-
Megoldás: Periodikus frissítése a materializált nézettáblának, amelyek egyébként "nem aktuálisak".
Indexek
-
Index = olyan adatszerkezet, amivel egy-egy reláció sorait gyorsabban érhetjük el adott attribútumának értéke, attribútumainak értékei alapján.
-
Lehet hash tábla, de az AB rendszerekben a legtöbb esetben kiegyensúlyozott keresési fával valósítják meg (B-fák)
-
Nincs tipikus megadás, de tipikus szintaxis:
CREATE INDEX TeaInd ON Teák(gyártó);
CREATE INDEX EladásInd ON Felszolgál(teázó, tea);
- Adott értékre az index azokhoz a sorokhoz irányít, ahol ez a érték megjelenik a megfelelő attribútumoknál.
Adatbázisok hangolása
- Az adatbázisok hangolásánál komoly kérdést jelent annak eldöntése, hogy milyen indexeket használjanak.
- Mellette: az index felgyorsíthatja a lekérdezések végrehajtását
- Ellene: a módosítások lassabbak lesznek, hiszen az indexeket is módosítani kell.
Jogosultságok
- AZ SQL-ben több fajta jogosultság és adatobjektum létezik, mint egy tipikus fájlrendszerben.
- Összességében 9 jogosultság, ezek némelyike egy reláció egyetlen attribútumára is megadható.
Legfontosabb jogosultságok:
-
SELECT
-
INSERT
-
UPDATE
-
DELETE
-
A magunk lkészítette objektumok esetében az összes jogosultsággal rendelkezünk
-
Másoknak is megadhatunk jogosultságokat
GRANT <jogosultságok listája>
ON <adatobjektum>
TO <jogosuétsági azonosítók listája>
- A
WITH GRANT OPTION
utasításrész lehetővé teszi, hogy aki megkapta a jogosultságot, tovább is adhassa azt.
Visszavonás:
REVOKE <jogosultságok listája>
ON <adatobjektum>
TO <jogosuétsági azonosítók listája>
- Az általunk kiadott jogosultságok ez által visszavonódnak, de ha máshonnan is megkapták ugyanazt a jogosultságot, akkor az még megmarad.
REVOKE opciói:
CASCADE
: azok a jogosultságok is visszavonódnak, amelyeket az a személy adott ki, akitől most megvonjuk.RESTRICT
: a visszavonás nem hajtódik végre, amíg a visszavonandó jogosultságtól függő jogosultságok is vannak.
Jogosultsági azonosítók
- A felhasználókat egy jogosultsági azonosító alapján azonosítunk, általában ez a bejelentkezési név.
- Külön jogosultságok azonosító a
PUBLIC