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:

  1. egy attribútum után
  2. 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:

  1. Egy -be történő beszúrásnál -ben nem szereplő értéket adunk meg
  2. Egy -beli törlés "lógó" sorokat eredményez -ben

Hogyan védekezhetünk?

  1. Default
  2. Továbbgyűrűzés
  3. 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:

  1. Konkurenciakezelő: tranzakciók oszthatatlanságára, elkülönítésére
  2. 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 =

  1. SERIALIZABLE: ACID tranzakció
  2. REPEATABLE READ: ha az adatot újra beolvassuk, akkor amit először láttunk, másodszor is látni fogjuk
  3. READ COMMITED: a tranzakció csak kommitálás utáni adatot láthat, de nem feltétlenül mindig ugyan azt az adatot
  4. READ 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:

    1. virtuális: nem tárolódik az adatbázisban, csak a relációt megadó lekérdezést tárolunk.
    2. 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:

  1. CASCADE: azok a jogosultságok is visszavonódnak, amelyeket az a személy adott ki, akitől most megvonjuk.
  2. 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

Források