Kapitola 6: Omezení integrity. Omezení domény



Podobné dokumenty
Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Kapitola 7: Návrh relačních databází. Nástrahy relačního návrhu. Příklad. Rozklad (dekompozice)

Kapitola 3: Relační model. Základní struktura. Relační schéma. Instance relace

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databáze I. Přednáška 4

Databázové systémy Cvičení 5.2

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Kapitola 4: SQL. Základní struktura

Úvod do databázových systémů

SQL - trigger, Databázové modelování

Relační datový model. Integritní omezení. Normální formy Návrh IS. funkční závislosti multizávislosti inkluzní závislosti

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Konceptuální modelování a SQL

8.2 Používání a tvorba databází

Databáze I. 5. přednáška. Helena Palovská

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

Relační databázový model. Vladimíra Zádová, KIN, EF, TUL- DBS

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

A5M33IZS Informační a znalostní systémy. Relační databázová technologie

J. Zendulka: Databázové systémy 4 Relační model dat 1

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

5. Formalizace návrhu databáze

Zápisování dat do databáze

Terminologie v relačním modelu

Databáze I. Přednáška 7

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Kapitola 2: Entitně-vztahový model (Entity-Relationship model) Množiny entit (entitní množiny) Atributy

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

5. Formalizace návrhu databáze

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

4. Relační model dat. J. Zendulka: Databázové systémy 4 Relační model dat 1

Databáze II. 2. přednáška. Helena Palovská

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Dotazování v relačním modelu a SQL

Relace x vztah (relationship)

Relační databázová technologie

DBS Transformace konceptuálního schématu na

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

DUM 12 téma: Příkazy pro tvorbu databáze

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Transformace konceptuálního modelu na relační

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

6. SQL složitější dotazy, QBE

Text úlohy. Systémový katalog (DICTIONARY):

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Databázové systémy I

- sloupcové integritní omezení

Základní přehled SQL příkazů

UDBS Cvičení 10 Funkční závislosti

Jazyk SQL 3 - DML, DDL, TCL, DCL

NORMALIZACE Část 2 1

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

12. blok Fyzický návrh databáze

Databázové modelování. Analýza Návrh konceptuálního schématu

Databáze I. Přednáška 6

Konceptuální modelování. Pavel Tyl

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Databázové systémy I

Úvod do databázových systémů 10. cvičení

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Analýza a modelování dat 3. přednáška. Helena Palovská

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Úvod do databázových systémů

Obsah přednášky. Databázové systémy RDBMS. Fáze návrhu RDBMS. Coddových 12 pravidel. Coddových 12 pravidel

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

PG 9.5 novinky ve vývoji aplikací

Temporální databáze. Jan Kolárik Miroslav Macík

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Návrh databázového modelu

Databázové systémy trocha teorie

Úvod do databázových systémů. Ing. Jan Šudřich

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

5. POČÍTAČOVÉ CVIČENÍ

Inovace tohoto kurzu byla spolufinancována z Evropského sociálního fondu a státního rozpočtu České republiky.

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Informační systémy ve zdravotnictví. 6. cvičení

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Jazyk SQL slajdy k přednášce NDBI001

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

6. blok část B Vnořené dotazy

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Databázové systémy. Cvičení 6: SQL

KIV/ZIS cvičení 6. Tomáš Potužák

Vkládání, aktualizace, mazání

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Informační systémy 2008/2009. Radim Farana. Obsah. Obsah předmětu. Požadavky kreditového systému. Relační datový model, Architektury databází

UNIVERZITA PALACKÉHO V OLOMOUCI

Oracle XML DB. Tomáš Nykodým

Dotazovací jazyk SQL I

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Transkript:

- 6.1 - Omezení domény Referenční integrita Aserce Spouštěče (Triggers) Funkční závislosti Kapitola 6: Omezení integrity Omezení domény Omezení integrity zabraňují poškození databáze; zajišťují, že autorizované zásahy do databáze nezpůsobí ztrátu konzistence dat. Omezení domény je základní formou omezení integrity. Omezení integrity testují hodnoty vkládané do databáze a kontroluje dotazy, aby bylo zajištěno, že porovnávání dávají smysl. Klauzule check dovoluje v SQL-92 omezit domény: Použijte klauzuli check k zajištění, že doména hodinová-mzda je větší než specifikovaná hodnota create domain hodinová-mzda numeric(5,2) constraint value-test check (value >= 4.00) Doména hodinová-mzda je deklarována jako dekadické číslo s pěti číslicemi, z nichž 2 jsou za desetinnou čárkou Doména má omezení, které zaručuje, že hodinová-mzda je větší než nebo rovno 4.00 Klauzule constraint value-test je volitelná; užitečná pro indikaci, které omezení bylo při aktualizaci porušeno. Referenční integrita Zajišťuje, že hodnota, která se objeví v jedné relaci pro danou množinu atributů, se také objeví v určitých množinách atributů v jiné relaci. Příklad: jestliže Praha-Spořilov je jméno pobočky, které se objeví v jedné z n-tic v relaci účet, pak zde existuje n-tice v relaci pobočka pro pobočku Praha-Spořilov. Formální definice Nechť r 1 (R 1 ) a r 2 (R 2 ) jsou relace s primárními klíči K 1 a K 2. Podmnožina α z R 2 je cizí klíč odkazující na K 1 v relaci r 1, jestliže pro každé t 2 v r 2 musí být n-tice v taková, že t 1 [K 1 ] = t 2 [α]. Omezení referenční integrity: Π α (r 2 ) Π K1 (r 1 ) Referenční integrita v E-R modelu Uvažujme množinu vztahů R mezi množinami entit E 1 a E 2. Relační schéma pro R zahrnuje primární klíče K 1 z E 1 a K 2 z E 2. Pak K 1 a K 2 jsou v R cizí klíče pro relační schémata E 1 a E 2. Slabé množiny entit jsou též zdroje pro omezení referenční integrity. Proto musí relační schéma pro každou slabou množinu entit zahrnovat primární klíč množiny vztahů, na které závisí, tj. nadřazené entitní množiny

- 6.2 - Modifikace databáze Tyto testy musí být provedeny, aby se zachovala následující mez referenční integrity: Π α (r 2 ) Π K (r 1 ) Vkládání. Je-li n-tice t 2 vkládána do r 2, systém musí zajistit, že v r 1 je n-tice t 1 taková, že t 1 [K 1 ] = t 2 [α]. Tj. t 2 [α] Π K (r 1 ) Mazání. Je-li n-tice t 1 mazána z r 1, systém musí spočítat množinu n-tic v r 2, která odkazuje na t 1 : σ α = t1[k] (r 2 ) Jestliže tato množina není prázdná, příkaz mazání skončí s chybou nebo se n- tice, které odkazují na t 1, musí samy smazat (rekurzivní mazání je možné). Aktualizace. Jsou dvě možnosti: Je-li n-tice t 2 aktualizován v relaci r 2 a aktualizace modifikuje hodnoty pro cizí klíč α, pak je proveden podobný test jako při operaci vkládání. Nechť t 2 značí novou hodnotu n-tice t 2. Systém musí zajistit, že t 2 [α] Π K (r 1 ) Je-li n-tice t 1 aktualizována v r 1 a aktualizace modifikuje hodnoty primárního klíče (K), pak je prováděn podobný test jako při operaci mazání. Systém musí spočítat σ α = t1[k] (r 2 ) s použitím staré hodnoty t 1. Není-li tato množina prázdná, aktualizace skončí s chybou nebo je změna kaskádovitě provedena na těchto n-ticích nebo mohou být tyto n-tice v relaci smazány. Referenční integrita v SQL Primární a kandidátní klíče a cizí klíče můžou být specifikovány jako část SQL příkazu create table: Klauzule primary key v příkazu create table zahrnuje seznam atributů, které tvoří primární klíč. Klauzule unique key v příkazu create table zahrnuje seznam atributů, které tvoří kandidátní klíč. Klauzule foreign key v příkazu create table zahrnuje seznam atributů, které tvoří cizí klíč a jméno relace odkazované cizím klíčem.

- 6.3 - Příklad referenční integrity v SQL create table zákazník (zákazník-jméno char(20) not null, zákazník-ulice char(30), zákazník-město char(30), primary key (zákazník-jméno)) create table pobočka (pobočka-jméno char(15) not null, pobočka-město char(30), aktiva integer, primary key (pobočka-jméno)) create table účet (pobočka-jméno char(15), číslo-účtu char(10) not null, zůstatek integer, primary key (číslo-účtu), foreign key (pobočka-jméno) references pobočka) create table vkladatel (zákazník-jméno char(20) not null, číslo-účtu char(10) not null, primary key (zákazník-jméno, číslo-účtu), foreign key (číslo-účtu) references účet, foreign key (zákazník-jméno) references zákazník) Kaskádové akce v SQL create table účet foreign key () references pobočka on delete cascade on update cascade, ) Díky klauzuli on delete cascade, vyvolá-li mazání n-tice v relaci pobočka porušení referenční integrity, mazání přeteče do relace účet a smaže n-tice, které odkazují na n-tice v relaci pobočka, které jsou mazány. Kaskádové aktualizace jsou obdobné. Je-li mezi více relacemi sada závislostí cizích klíčů (každý se specifikací on delete cascade), mazání nebo aktualizace se může rozšířit do celé této sady. Jestliže kaskádová aktualizace či mazání vyvolá porušení integritních omezení, které nemůže zachytit dřívější kaskádová operace, systém zruší transakci. Výsledek: všechny změny způsobené transakcí a jejími kaskádovými akcemi jsou zrušeny.

- 6.4 - Tvrzení (Assertion) Tvrzení (aserce, prosazování) je predikát vyjadřující podmínku, kterou musí databáze vždy splňovat. V SQL-92 má tvar create assertion <jméno-tvrzení> check <predikát> Když je tvrzení vytvořeno, systém ji otestuje, je-li platná. Příklad Suma všech částek půjček pro každou pobočku musí být menší než suma všech zůstatků účtů v pobočce. create assertion mez-sumy check (not exists (select * from pobočka where (select sum (částka) from půjčka where půjčka.pobočka-jméno = pobočka.pobočka-jméno) >= (select sum (částka) from účet where půjčka.pobočka-jméno = pobočka.pobočka-jméno))) Každá půjčka má alespoň jednoho dlužníka, který udržuje účet s minimálním zůstatkem $1000.00. create assertion mez-zůstatku check (not exists (select * from půjčka where not exists ( select * from dlužník, vkladatel, účet where půjčka.půjčka-číslo = dlužník.půjčka-číslo and dlužník.zákazník-jméno = vkladatel.zákazník-jméno and vkladatel.účet-číslo = účet.účet-číslo and účet.zůstatek >= 1000))) Spouště (Triggers) Spouštěč (Trigger, spoušť) je příkaz, který systém automaticky spouští jako vedlejší efekt modifikace databáze. Pro aktivaci tohoto mechanismu musíme: Specifikovat podmínky, za jakých je spouštěč prováděn. Specifikovat akce, které se budou dít při jeho spuštění. Standard SQL-92 nezahrnuje spouště, ale mnoho implementací je podporuje.

- 6.5 - Příklad triggeru Předpokládejme, že místo povolení záporných zůstatků účtů banka zachází se saldem (přečerpáním) takto: nastaví zůstatek účtu na nulu vytvoří půjčku s částkou salda dá této půjčce číslo tohoto účtu Podmínka spuštění této spouště je aktualizace relace účet, která vrátí zápornou hodnotu zůstatek. define trigger saldo on update of účet as T (if new T.zůstatek < 0 then (insert into půjčka values (T.pobočka-jméno, T.číslo-účtu, - new T.zůstatek) insert into půjčovatel (select zákazník-jméno, číslo-účtu from vkladatel where T.číslo-účtu = vkladatel.číslo-účtu) update účet as S set S.zůstatek = 0 where S.číslo-účtu = T.číslo-účtu) ) Klíčové slovo new před T.zůstatek značí, že by měla být použita hodnota T.zůstatek po aktualizaci; je-li vynecháno, je použita hodnota před aktualizací Funkční závislosti Omezení na množině povolených (legálních) relací. Vyžaduje, že hodnota jisté množiny atributů jednoznačně určuje hodnotu jiné množiny atributů. Funkční závislost je zobecnění představy klíče. Nechť R je relační schéma α R, β R Funkční závislost α β je platná pro schéma R právě tehdy, když pro jakoukoli povolenou relaci r(r), jakékoli dvě n-tice t 1 a t 2 z r jsou stejné na atributech α, souhlasí též na atributech β. Tj. t 1 [α] = t 2 [α] t 1 [β] = t 2 [β] K je superklíč pro relační schéma R právě tehdy, když K R K je kandidátní klíč R právě tehdy, když K R, a pro žádné α K, α R Funkční závislosti umožňují vyjádřit omezení, které nelze vyjádřit pomocí superklíčů. Představme si schéma: info-půjčka = (pobočka-jméno, půjčka-číslo, zákazník-jméno, částka). Očekáváme, že se bude platit tato množina funkčních závislostí: půjčka-číslo částka půjčka-číslo pobočka-jméno ale nechceme splňovat následující: půjčka-číslo zákazník-jméno

- 6.6 - Použití funkčních závislostí Funkční závislosti používáme k: testování relací, jsou-li povolené na dané množině funkčních závislostí. Je-li relace r povolená na množině F funkčních závislostí, říkáme, že r splňuje F. definování omezení na množině povolených relací; říkáme, že F je platná na R, když všechny povolené relace na R splňují množinu F. Poznámka: Některá instance relačního schématu (tj. relace) může splňovat funkční závislosti, i když tyto závislosti nejsou platné pro všechny povolené instance. Např. specifická instance info-půjčka může (náhodou) vyhovovat půjčka-číslo zákazník-jméno Uzávěr množiny funkčních závislostí Pro danou množinu funkčních závislostí F existují další funkční závislosti, které F logicky implikuje (tzv. uzávěr množiny F). Uzávěr F značíme F +. Všechny F + můžeme najít pomocí Armstrongových axiomů: je-li β α, pak α β (reflexivita) je-li α β, pak γα γβ (rozšíření) je-li α β a β γ, pak α γ (tranzitivita) Tyto axiomy tvoří minimální a úplnou množinu axiomů. Výpočet F + můžeme zjednodušit použitím následujících doplňkových pravidel. je-li α β a α γ, pak α βγ (sjednocení) je-li α βγ, pak α β a α γ (rozklad) je-li α β a γβ δ, pak αγ δ (pseudotranzitivita) Tato pravidla jsou odvozena z Armstrongových axiomů. R = (A, B, C, G, H, I) F = {A B A C CG H CG I B H} některé prvky F + : A H AG I CG HI Příklad

- 6.7 - Uzávěr množiny atributů Uzávěr atributu α pod F (značíme α + ) definujeme jako množinu atributů, které jsou funkčními závislostmi F určeny z α: α β je z F + β α + Algoritmus pro výpočet α + result := α; while (byla změna v result) do for each β γ in F do begin if β result then result := result γ; end Příklad R = (A, B, C, G, H, I) F = {A B A C CG H CG I B H} (AG + ) 1. krok: result = AG 2. krok: result = ABCG (A C a A AGB) 3. krok: result = ABCGH (CG H a CG AGBC) 4. krok: result = ABCGHI (CG I a CG AGBCH) Je AG kandidátní klíč? 1. AG R 2. je A + R? 3. je G + R? Kanonický obal (Canonical Cover) Uvažujme množinu funkčních závislostí F a funkční závislost α β z F. Atribut A je nadbytečný v α, jestliže A α a F logicky implikuje (F {α β}) {(α A) β} Atribut A je nadbytečný v β, jestliže A β a množina funkčních vztahů (F {α β}) {α (β A)} logicky implikuje F. Kanonický obal F C pro F je množina závislostí taková, že F logicky implikuje všechny závislosti v F C a F C logicky implikuje všechny závislosti ve F a navíc žádná funkční závislost v F C neobsahuje nadbytečný atribut každá levá strana funkční závislosti z F C je jedinečná

- 6.8 - Spočítejte kanonický obal pro F: repeat Použijeme pravidlo sjednocení pro nahrazení všech závislostí α 1 β 1 a α 1 β 2 z F jednou závislostí α 1 β 1 β 2 Najdeme funkční závislost α β s nadbytečným atributem buď v α nebo v β Je-li tento atribut nalezen, smažeme ho z α β until F se nezměnilo Příklad R = (A, B, C) F = {A BC B C B C A B AB C} Zkombinujeme A BC a A B do závislosti A BC. A je nadbytečné v AB C, protože B C logicky implikuje AB C. C je nadbytečné v A BC, je-li A BC logicky implikováno z A B a B C. Kanonický obal je: A B B C