Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1.Előadás: Celko Joe tippjei Codd törvényei. Triggerek.

Hasonló előadás


Az előadások a következő témára: "1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1.Előadás: Celko Joe tippjei Codd törvényei. Triggerek."— Előadás másolata:

1 1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1.Előadás: Celko Joe tippjei Codd törvényei. Triggerek

2 2 Celko Joe programozási tippjei 1.A lekérdezést kezdjük mindíg a SELECT utasítással és írjuk utána, mit szeretnénk látni az eredményben. Ezzel megvan a cél, és a felhasználónak is tudunk mutatni valamit 2.Minden táblát, amelynek oszlopai a SELECT utasítás után szerepelnek, írjuk a FROM után 3.A felesleges táblákat később eltávolíthatjuk. Minden a WHERE záradékban fog zajlani 4.Egyedek helyett fogalmazzuk meg a problémát halmazokkal. Erre a legjobb példa a fák ábrázolása egymásba ágyazott halmazokkal, csúcsok és élek helyett

3 3 Celko Joe programozási tippjei 5.Sokszor segít, ha felcseréljük a szavak sorrendjét a kérdésben. Ahelyett, hogy “szükségünk van minden sárga tengeralattjáróra” azt mondjuk, hogy “sárga a színe azon teneralattjáróknak, melyre szükségünk van ”. 6.Néha a kérdés tagadása segít. Ahelyett, hogy “szükségünk van azokra az autókra, melyek teljesítik az összes feltételt”, mondhatjuk azt, hogy “nem kellenek azok az autók, amelyek legalább egy feltételnek nem felelnek meg”. Gyakran egyszerűbb megtalálni azt,amit nem akarunk, mint azt, amit akarunk. Ez a módszer akkor hasznos, amikor a NOT EXIST predikátumot használjuk. De figyelni kell a NULL értékekre és az ÜRES halmazokra

4 4 Celko Joe programozási tippjei 7.Egymásba ágyazás segítségével sok mindent elvégezhetünk egyszerre. Különösen hasznos a CASE eszközök használata összesítő függvényekkel. 8.Figyeljünk oda a logikai kifejezésekre. Az eljárásközpontú nyelvekben több lépcsőben is kiszűrhetjük a megfelelő adatokat. Az SQL-ben mindent egy kifejezésben kell leírni, ami nagyon bonyolult is lehet.

5 5 Celko Joe programozási tippjei 9.Figyeljünk oda, hogy a NULL értékek az UNKNOW igazságértékeket eredményezzenek. Mindíg ellenőrizzük, hogy mi történik a lekérdezésben, ha valahol NULL fordul elő. 10.Ne felekezzünk meg arról, hogy a táblák üresek is lehetnek. Próbáljunk olyan tesztadatokat létrehozni, amelyek lefedik az összes lehetséges esetet. Ezért jó egy döntési-tábla előkészítő program használata, ami biztosan megállapítja, hogy az adott kifejezés helyes és teljes-e.

6 6 Codd 12 szabálya Codd 12 szabálya egy tizenhárom szabályból álló készlet (zérótól tizenketőig számozva), amelyet Edgar F. Codd javasolt, a relációs adatbázis modell atyja, amely arra volt tervezve, hogy meghatározza milyen feltételeket kell teljesítsen egy adatbázis kezelő rendszer azért hogy relációs adatbázis kezelő rendszernek nevezhessék. Tréfásan “Codd tizenkét parancsolata”-nak is nevezik.

7 7 Codd ezen szabályok elkészítését arra is használta, hogy megkadályozza az ő adatbázis rendszerekről megalkotott álmainak felhígítását, amint a korai 1980-as adatbázis szállítók összekúszáltak hogy újracsomagolják a létező temékeiket relációs burokkal. A 12-es szabály volt kiváltképpen arra kitalálva hogy számbavegye az ilyen helyezkedéseket. A szabályok annyira szigorúak hogy az összes népszerű, úgynevezett “relációs” adatbázisredszerek elégtelen jegyet kapnak több feltétel esetében.

8 8 0. Szabály A rendszer minősítésének tartalmaznia kell mindhárom fogalmat: relációs, adatbázis és menedzsment rendszer. Hogy egy rendszer minősítése adatbázis kezelő rendszer legyen, a rendszer (kizárólag) relációs képességeket kihasználva menedzselnie kell az adatbázist. Kivétel: Használatunk ELJÁRÁSOKAT is

9 9 1. Szabály Az információs szabály Minden információ ábrázolása az adatbázisban csak egyféle képpen történik, mégpedig táblák sorai- és oszlopai találkozásánál levő értékekkel. Az SQL megfelel ennek a szabálynak

10 10 2. Szabály: A garantált hozzáférés szabálya Minden adat elérhető kell legyen. Ez a szabály alapvető az elsődleges kulcs újrafogalmazásában. Kimondja, hogy minden skalár egység az adatázisban logikailag megcímezhető kell legyen, megcímezvén a bennfoglaló táblát, a tartalmazó oszlop nevét és a tartalmazó sor elsődleges kulcsának az értékét. Nem kötelező, hogy egy táblán legyen bármilyen kulcsa.

11 11 3. Szabály: A null érték szisztematikus kezelése Az ABRnek meg kell engednie minden mezőnek, hogy null értékű legyen (vagy üres). Kifejezetten kell támogassa a “hiányzó és alkalmazhatatlan információ”-t, amelyik szisztematikus, külünbözik minden szabályos értéktől (például, “különbözik zérótól és minden más számtól”, szám értékek esetében), és független az adattípustól. Magába kell foglalja azt is, hogy egy ilyen reprezentációt szisztematikusan kell kezelnie az ABR-nek. Az SQL a NULL értéket használja mindkét esetre

12 12 4. Szabály: A relációs modellre épülő aktív online katalógus A rendszernek támogatnia kell egy online, közvetlen, relációs katalógust, amely elérhető a jogosult felhasználók számára egy lekérdező nyelv segítségével. A felhasználóknak elérhető kell legyen az adatbázis struktúrája (katalógusa) ugyanazon lekérdező nyelv használata segítségével, mint amivel elérik az adatbázis adatait. Az SQL támogatja ezen katalógus létezését

13 13 5. Szabály: Az átfogó nyelv szabálya A rendszernek biztosítania kell legalább egy relációs nyelvet, amelyik a)Lineáris szintaxissal rendelkezik b)Használható mind interaktív módon, mind pedig program-alkalmazáson keresztül c)Támogatja az adat-definíciós operációkat (beleértve a nézet definíciókat), adatmanipulációs operációkat (módosítás és visszakeresés), biztonsági- és integritási megszorításokat, és tranzakció-menedzsmenti operációkat (kezdet, elkövetés (commit) és visszaforgatás (rollback))

14 14 6. Szabály: A nézetfrissítési szabály Mindazon a nézetek, amelyek elméletileg frissíthetőek, azok frissíthetőek kell legyenek gyakorlatilag is. Az SQL gyenge ezen a téren, mert a nézettáblák frissítése nagyon nehéz probléma Csak a nagyon biztonságos esetek kerülnek bele

15 15 7. Szabály: Magasszintű beszúrás, módosítás és törlés A rendszer kell támogassa a készlet szintű beszúrás-, módosítás- és törlés operátorokat. Ez azt jelenti, hogy adathalmazt lehet visszakeresni egy relációs adatbázisból, amelyik több sort/táblát tartalmaznak. Ez a szabály kimondja, hogy beszúrás, módosítás és törlés operációk alkalmazhatók kell legyenek minden visszakereshető sorhalmazra, mintsem egy sorra egy táblából. Az SQL támogatja ezeket

16 16 8. Szabály: Fizikai adatfüggetlenség A fizikai síkon történő változások (hogyan tároljuk az adatokat, mint tömbben vagy csatolt listákban) ne legyen kihatással azon akalmazásokra, amelyek az adatstruktúrán alapulnak. Az SQL jobb a programozási nyelvek többségénél

17 17 9. Szabály: Logikai adat- függetlenség A logikai szintű változásoknak (táblák, oszlopok, sorok stb.) nem szabad hatással lennie struktúrán alapuló alkalmazásokra. Logikai adat – függetlenséget nehezebb megvalósítani, mint a fizikai adafüggetlenséget. Az SQL nagyon jó ezen a téren

18 18 10. Szabály: Épségi függetlenség Az épségi megszorítások alkalmazás – függetlenek kel legyenek és a katalógus kell tartalmazza őket. Lehetőséget kell biztosítani annak, hogy ezen megszorítások, amikor szükségszerű, változtathatóak legyenek, anélkül, hogy befolyásolná a létező alkalmazásokat.

19 19 11. Szabály: Az osztottság függetlensége Az adatbázis egyes részeinek különböző helyeken történő tárolása láthatatlan kell legyen az adatbázis felhasználójának. A létező alkalmazások tovább kell működjenek: 1.Amikor egy osztott változata az ABR-nek első alkalommal bevezetésre kerül 2.Amikor a létező osztott adat újraosztásra kerül a rendszeren belül. Ezen támogatások gyerekcipőben vannak. (NoSQL)

20 20 12. Szabály: Az alacsony szintű hozzáférés szabálya Ha a rendszer biztosít egy alacsony szintű kapcsolatot, ez a kapcsolat nem használható a rendszer aláásására, például, hogy áteresszen egy relációs biztonsági résen vagy megsértsen egy integritási megszorítást. Az SQL-92 jó ebből a szempontból

21 21 Triggerek az SQL-ben (Trigger – elsüt, kivált) Eddig az SQL 2 szabvány szerinti megszorításokat tanulmányoztuk. Egy új sor beszúrásánál megváltozhat az attribútum értéke és CHECK feltételt akkor ellenőrizzük amikor ez megtörténik. Ez már az SQL 3-ban van. A megszorítások megvalósítása magába foglalja az ellenőrzések kiváltását, elsütését.

22 22 Tiggerek és megszorítások (három különbség van köztük) A triggereket csak akkor ellenőrzi a rendszer ha valamilyen esemény bekövetkezik Először a feltételt vizsgálja meg, ha nem teljesül, semmi sem történik Ha a feltétel teljesül akkor a művelet végrehajtandó, ez a művelet megakadályozhatja a kiváltó esemény létrejöttét.

23 23 SQL 3 Triggerek: A művelet végrehajtható a kiváltó esemény előtt, után vagy helyette A művelet vonatkozhat a műveletet kiváltó esemény által törölt, beszúrt vagy módosított sorok régi vagy új értékeire is Ha az esemény modosítás akkor megadhatunk egy oszlopot vagy egy halmazt amelyre az esemény vonatkozik Egy WHEN zárójelben, megadhatunk egy feltételt is ami feltételezi a művelet vegrehajtását

24 24 Önálló megszorítások SQL 3-ban Ket bővítése van az SQL-2 hez képest: A programozó által megadott esemény váltja ki Egy sorra is hivatkozhat. Példa: A felhasználó gondoskodik a következőkről Összegyűjti az eseményeket ami a megszorítás ellenőrzését váltja ki. Viseli a kockázatot ha az adatbázis következetlen állapotba kerül.

25 25 1)CREATE TRIGGER NetBevetelTrigger 2)AFTER UPDATE OF nettoBev ON Gyartasiranyito 3)REFERENCING 4)OLD AS RegiSor, 5)NEW AS UjSor 6)WHEN(RegiSor.nettoBev>UjSor.nettoBev) 7)UPDATE Gyartasiranyito 8)SET nettoBev=RegiSor.nettoBev 9)WHERE azonosito=UjSor.azonosito 10)FOR EACH ROW

26 26 Trigger szintaxis a MySQL-ben CREATE TABLE szamla (szamlaszam INT PRIMARY KEY, egyenleg DECIMAL(10,2)); CREATE TRIGGER ins_sum BEFORE INSERT ON szamla FOR EACH ROW SET @sum = @sum + NEW.egyenleg; SET @sum=0; INSERT INTO szamla VALUES(137,14.98),(141,1937.50),(97,-100.00); SELECT @sum AS ‘Összesen bevitt egyenleg'; Eredmény 1 oszlop, 1 sor, érték: 1852,48

27 27 Triggerek megszorításai (MySQL) A trigger nevek ugyanabban a névtérben léteznek, ami azt jelenti, hogy minden triggernek különböző neve kell legyen egy adatbázis sémán belül. Más – más sémában levő triggereknek lehet ugyanaz a nevük. Nem lehet 2 különböző nevű trigger, amelyik ugyanazon feltételek mellett ugyanazon táblára vonatkozzék, vagyis ugyanaz legyen az aktivációs ideje és ugyanazon esemény váltsa ki.

28 28 Create trigger (MySQL) CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt A trigger egy megnevezett adatbázis objektum amelyik egy táblához kapcsolódik és aktiválódik (elsül) amikor egy egyéni esemény történik a táblával. A trigger egy táblához fog kapcsolódni, amelyik neve a tbl_name, és amelyik egy permanens táblát kell jelentsen. Nem lehet a triggert egy nézethez vagy egy IDEIGLENES (TEMPORARY) táblához kötni.

29 29 trigger_time megadja, hogy az esemény bekövetkezte –Előtt (BEFORE), vagy –Után (AFTER) legyen végrehajtva a trigger_stmt trigger_event lehet a következő: 1.INSERT –INSERT –LOAD DATA –REPLACE 2.UPDATE 3.DELETE –DELETE –REPLACE

30 30 Többszörös utasítás esetén A trigger_stmt-t BEGIN és END közé kell tenni. CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0); delimiter | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END;| delimiter ;

31 31 INSERT INTO test3 (a3) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO test4 (a4) VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0); INSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4); Select * from test1Select * from test2 a1=(1,3,1,7,1,8,4,4) a2=(1,3,1,7,1,8,4,4) Select * from test3a3=(2,5,6,9,10) Select * from test4a4=(1,2,3,4,5,6,7,8,9,10) b4=(3,0,1,2,0,0,1,1,0,0) A test3-ból kitörli az test1-ben levő értékeket, a test4-ben megszámolja, hogy melyik érték hányszor szerepel a test1-ben

32 32 Vonatkoztathatunk a táblában lévő oszlopokra (a tábla, amelyik a triggerrel van asszociálva), ha használjuk az OLD és a NEW álneveket. OLD.col_name vonatkozik egy létező sorra, mielőtt az módosult vagy törlődött volna. NEW.col_name vonatkozik arra az oszlopára az új sornak amelyik be lesz szúrva vagy az oszlopára annak a sornak, amelyik már meg volt változtatva. Működő CREATE TRIGGER sdata_insert BEFORE INSERT ON ‘sometable’ FOR EACH ROW BEGIN SET NEW.guid = UUID(); END; Nem működő CREATE TRIGGER sdata_insert AFTER INSERT ON ‘sometable’ FOR EACH ROW BEGIN SET NEW.guid = UUID(); END;

33 33 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.

34 34 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely összeg Ü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 bankbszámla adószám bejegyzés

35 35 KISZAMLA.OSSZEG=, ahol N a számlán levő sorok száma.

36 36

37 37 INSERT trigger delimiter // CREATE TRIGGER sz_sor_insert AFTER INSERT ON szamlasor FOR EACH ROW BEGIN UPDATE kiszamla SET kiszamla.OSSZEG=kiszamla.OSSZEG+NEW.EGYSEGA R*NEW.MENNYISEG WHERE kiszamla.SZAMLASZAM=NEW.SZAMLASZAM; END;// delimiter ;

38 38 DELETE trigger delimiter // CREATE TRIGGER sz_sor_delete BEFORE DELETE ON szamlasor FOR EACH ROW BEGIN UPDATE kiszamla SET kiszamla.OSSZEG=kiszamla.OSSZEG- OLD.EGYSEGAR*OLD.MENNYISEG WHERE kiszamla.SZAMLASZAM=OLD.SZAMLASZAM; END;// delimiter ;

39 39 UPDATE trigger delimiter // CREATE TRIGGER sz_sor_update BEFORE UPDATE ON szamlasor FOR EACH ROW BEGIN UPDATE kiszamla SET kiszamla.OSSZEG=kiszamla.OSSZEG+NEW.EGYSEGA R*NEW.MENNYISEG- OLD.EGYSEGAR*OLD.MENNYISEG WHERE kiszamla.SZAMLASZAM=NEW.SZAMLASZAM; END;// delimiter ;

40 40 Bibliográfia Celko, Joe; SQL felsőfokon, Kiskapu, Budapest, 2002, xxiii, 19-21 oldal http://en.wikipedia.org/wiki/Codd's_12_rule shttp://en.wikipedia.org/wiki/Codd's_12_rule s http://dev.mysql.com/doc/refman/5.1/en/sto red-programs-views.htmlhttp://dev.mysql.com/doc/refman/5.1/en/sto red-programs-views.html


Letölteni ppt "1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1.Előadás: Celko Joe tippjei Codd törvényei. Triggerek."

Hasonló előadás


Google Hirdetések