UČEBNÍ TEXTY OSTRAVSKÉ UNIVERZITY Přírodovědecká fakulta RELAČNÍ DATABÁZE (DISTANČNÍ VÝUKOVÁ OPORA) Zdeňka Telnarová Aktualizovaná verze 2006 Ostravská univerzita
OBSAH 1 Modul 1... 6 1.1 Relační datový model... 6 1.1.1 Úvod... 6 1.1.2 Operace relační algebry... 9 1.1.2.1 Nejpoužívanější operace... 9 1.1.2.2 Základní množinové operace aplikované na relace... 11 1.1.3 Normalizace relačních schémat... 13 1.1.3.1 První normální forma relace... 13 1.1.3.2 Funkční závislosti atributů... 13 1.1.3.3 Druhá normální forma relace... 13 1.1.3.4 Třetí normální forma relace... 14 1.1.4 Transformace konceptuálních schémat... 14 1.1.4.1 Nejpoužívanější konstruktory E - R modelu... 14 1.1.4.2 Principy transformace E-R schématu do relačního... 15 1.1.5 Integrita relačních schémat... 17 1.1.5.1 Referenční integrita... 17 1.1.5.2 Způsoby zachování referenční integrity... 18 2 Modul 2... 21 2.1 Úvod do databázových jazyků... 21 2.1.1 Opakování některých pojmů predikátové logiky... 21 2.1.1.1 Symboly predikátové logiky... 21 2.1.1.2. Konstrukty predikátové logiky... 21 2.1.1.3. Interpretace formulí... 22 2.1.2 Databázové jazyky... 22 2.1.2.1 Definice dotazu... 23 2.2 Relační algebra a relační kalkul... 24 2.2.1 Operace relační algebry... 25 2.2.2 Další operace relační algebry... 27 2.2.3 Přepisovací jazyk relační algebry... 29 2.2.4 Relační kalkul... 30 2.2.4.1 Abeceda n-ticového relačního kalkulu... 30 2.2.4.2 Formule relačního kalkulu... 30 2.2.4.3 Přepis z relační algebry do relačního n-ticového kalkulu... 31 2.2.4.4 Přepisovací jazyk n-ticového relačního kalkulu... 32 2
2.2.4.5 Obecný tvar existenčně kvantifikovaných formulí... 34 2.2.4.6 Obecný tvar univerzálně kvantifikovaných formulí... 34 2.2.4.7 Doménový relační kalkul... 35 2.2.4.8 Atomické formule doménového relačního kalkulu... 35 2.2.4.9 Věta o ekvivalenci... 36 2.3 Řešené příklady v relační algebře a relačním kalkulu... 37 3 Modul 3... 43 3.1 Jazyk SQL... 43 3.1.1 Části jazyka SQL... 44 3.1.2 Základní příkazy DDL... 44 3.1.3 Základní příkazy DML... 46 3.1.4 Základní příkazy DQL... 48 3.2 Řešení příklady na dotazování v SQL, definování schématu a manipulaci s daty... 61 4 Modul 4... 67 4.1 QBE - Query By Example... 67 4.1.1 Agregační funkce v QBE... 69 4.1.2 Manipulace v QBE... 70 4.1.3 Inkluze... 70 4.2 Řešené příklady v QBE... 73 5 Modul 5... 76 5.1 Transakce - základní pojmy a vlastnosti... 76 5.1.1 Vlastnosti transakcí... 76 5.1.2 Globální a lokální transakce... 76 5.1.3 Distribuovaný databázový systém... 77 5.2 Dvoufázový potvrzovací protokol... 78 5.2.1 Výpadky uzlů a přerušení transakce... 79 5.3 Transakce jako jednotka zotavení z chyb... 80 5.3.1 Žurnály(log files)... 81 5.3.2 Kontrolní body- checkpoints:... 81 5.3.3 UNDO / REDO algoritmus... 81 5.4 Synchronizace... 83 5.4.1 Dvoufázový uzamykací protokol... 83 5.4.2 Globální uváznutí... 84 5.4.3 Transakce v SQL... 85 6 Modul 6... 86 6.1 Přehled architektur databázových systémů... 86 3
6.1.1 Distribuce globálních relací... 87 6.1.2 Základy replikace dat... 90 6.2 Zpracování dotazů v distribuované prostředí... 92 6.3 Metody výpočtu spojení... 98 7 Modul 7... 104 7.1 Objektově orientovaná analýza a návrh... 104 7.1.1. Úvod... 104 7.1.2 Nedostatky relačních SŘBD... 104 7.1.3 Objektově orientovaná metodika... 105 7.1.4 Další objektově orientované metodologie... 105 7.1.5 Požadavky, kladené na OODBS... 107 7.1.6 Objektově orientované SŘBD... 107 7.1.7 Hlavní přínosy objektové technologie... 108 7.1.8 Kriteria kladená na OOSŘBD... 108 7.1.9 Tři základní modely objektové metodologie... 108 7.2 Model objektů... 109 7.2.1 Základní charakteristiky... 110 7.2.1 Základní pojmy... 110 7.3 Dynamický a funkční model... 112 7.3.1 Dynamický model... 112 7.3.2 Základní pojmy... 113 7.3.3 Funkční model... 113 7.3.4 Základní pojmy... 113 7.4 Deduktivní pravidla při analýze a návrhu IS... 114 7.4.1 Úvod do deduktivních pravidel... 114 7.4.2 Stratifikace... 115 7.4.3 Všeobecné principy dobře formovaných deduktivních pravidel... 116 7.4.4 Využití deduktivních pravidel pro odvozování dat... 116 7.4.5 Příklady implementace v jazyku Chimera... 117 7.4.6 Srovnání relačního a objektového pojetí... 119 7.4.7 Využití deduktivních pravidel pro definování integritních omezení... 121 7.4.7.1 Vestavěná a generická integritní omezení... 122 7.4.7.2 Generické integritní omezení... 122 7.5 Řešené příklady deduktivních pravidel... 124 Použitá literatura... 131 4
5
1 MODUL 1 1.1 RELAČNÍ DATOVÝ MODEL Cíl: Cílem této kapitoly je, aby si čtenář zopakoval základní znalosti o relačních datových modelech, jak se s nimi již seznámil v předmětu Úvod do databází. Kapitola přináší základní ideje, na kterých je relační datový model založen, definici relačního modelu dat, základní pojmy. Čtenář si rovněž zopakuje základní manipulační prostředky, které lze v relačním datovém modelu nad daty využít. Po prostudování textu by měl mít čtenář přesnou představu o strukturách, do kterých se ukládají data v databázi. Dále by měl již naprosto přesně umět definovat pojmy uvedené v klíčových slovech. Co se týká databázových operací, čtenář by měl po přečtení této kapitoly mít základní přehled o operacích relační algebry. V následujících textech ještě bude databázovým operacím věnována značná pozornost. Pro správné navržení relačního schématu dat je nutné dodržovat pravidla normalizace, kterou si čtenář v této kapitole rovněž zopakuje, stejně jako integritní omezení schémat a pravidla pro transformaci konceptuálních schémat na datová relační schémata. Klíčová slova: RMD, databázová relace, NF, doména, primární klíč, cizí klíč, operace relační algebry, integritní omezení, transformace konceptuálních schémat. Průvodce studiem: RMD má jediný konstrukt, kterým je databázová relace. Proto při transformaci konceptuálního modelu na model relační je třeba celou složitou realitu transformovat na množinu vcelku jednoduchých relací. Již tento fakt naznačuje, že bude skutečně velmi složité a někdy dokonce nemožné realitu natolik zjednodušit. Tato úvaha vede ke snaze vývoje datových modelů založených na objektových principech. To je ovšem v této kapitole ještě téma předčasné, přesto je dobré si uvedenou skutečnost uvědomit. 1.1.1 Úvod Relační datový model (RDM) byl poprvé popsán v roce 1970 E.F. Coddem a je zatím nejrozšířenějším datovým modelem, na kterém je založen návrh a tvorba databází. Základní ideje relačního modelu RMD důsledně odděluje data, která jsou chápána jako relace, od jejich implementace. Přístup k datům je symetrický, tj. při manipulaci s daty se nezajímáme o přístupové mechanizmy k datům. Pro manipulaci s daty jsou k dispozici dva silné prostředky - relační kalkul a relační algebra. 6
Pro omezení redundance dat v relační databázi jsou navrženy pojmy umožňující normalizovat relace. Základní definice RMD Mějme množiny D 1, D 2, D 3,...D n. Z každé vyberme 1 prvek. Tím vytvoříme uspořádanou n-tici. Kartézský součin D 1 x D 2... je množina všech posloupností (x 1,x 2,...) kde x 1 je prvkem D 1, x 2 je prvkem D 2... Relace je každá podmnožina kartézského součinu. Z hlediska databázových systémů jsou množiny D 1, D 2,.. množiny hodnot atributů a označují se jako tzv.domény. Od matematické relace se liší databázová relace v několika aspektech Relace je vybavena pomocnou strukturou, které se říká schéma relace. Schéma relace se skládá ze jména relace, jmen atributů a domén. Prvky domén, ze kterých se berou jednotlivé komponenty prvků relace, jsou atomické (dále nedělitelné) hodnoty. Tomuto omezení se říká 1.normální forma relací (1NF). Schéma relace R se vytvoří nad množinou atributů A 1 :D 1,...A n :D n, kde A i jsou jména atributů a D i jsou domény. Dvojici A i :D i se říká atribut relace. Schéma relace lze zapsat R(A 1 :D 1,...A n :D n ). Relace R nad množinou A je libovolná podmnožina kartézského součinu domén D 1 x... x D n. Doména náležící atributu C se označuje jako dom(c). Domény jsou obvykle primitivní typy dat (STRING, INTEGER...). Prvkům relace se říká n-tice, přičemž n určuje řád relace. Relační schéma databáze je dvojice (R,I), kde R je množina schémat relací a I je množina integritních omezení. Jedno z významných IO na relaci R(A) je existence primárního klíče. Primární klíč je množina atributů K z A, jejichž hodnoty jednoznačně určují (identifikují) n-tice relace R. K je minimální v tom smyslu, že nelze odebrat žádný atribut, aniž by to narušilo identifikační vlastnost. Atribut, který je součástí nějakého klíče se nazývá klíčový. Atributy, které nejsou součástí žádného klíče se nazývají neklíčové. Z podstaty RMD vyplývá, že každá relace má primární klíč. Protože relace jsou množiny, nesmí relace obsahovat duplicitní prvky. Dalším důležitým IO je referenční integrita. Toto omezení popisuje vztahy mezi daty ve dvou relacích. Atribut, kterého se referenční integrita týká, se nazývá cizí klíč (foreign key). Takové dvě relace se obvykle nazývají master/ detail, resp. parent/child, resp. independent/dependent. Česky obvykle hlavní/závislá někdy taky nezávislá/závislá, nadřazená/podřízená. Cizí klíč je atribut relace, který je v nadřazené relaci primárním klíčem. Příklad: Hlavní tabulka: UČITEL(ČÍSLO, JMÉNO, PLAT, PŘÍPLATEK,...) Závislá tabulka: PŘEDMĚT(ZKRATKA, NÁZEV,...,GARANT) ČÍSLO z relace UČITEL je primárním klíčem a objevuje se v relaci PŘEDMĚT jako atribut GARANT. Atribut GARANT je cizí klíč. Jméno cizího klíče nemusí být stejné jako jméno 7
primárního klíče nadřazené relaci, ale cizí klíč musí být definován nad stejnou doménou, nad jakou je definován příslušný primární klíč nadřazené relace. Přípustnou relační databází se schématem (R, I) nazýváme množinu relací R 1,...R k takových, že jejich prvky vyhovují I. O takové množině relací říkáme, že je konzistentní. Formou reprezentace relací může být dvojrozměrná tabulka. Podmínky, které musí splňovat relační tabulka Všechny hodnoty v tabulce musí být elementární - tj. dále nedělitelné - podmínka 1NF. Sloupce mohou být v libovolném pořadí. Řádky mohou být v libovolném pořadí. Sloupce musí být homogenní, tzn. ve sloupci musí být údaje stejného typu (z jedné domény). Každému sloupci musí být přiřazeno jednoznačné jméno. V relační tabulce nesmí být dva zcela stejné řádky. Tzn., že každý řádek je jednoznačně rozlišitelný. Shrnutí: Doména je množina hodnot stejného datového typu. Tyto hodnoty popisují nějakou vlastnost objektu. Relace je každá podmnožina kartézského součinu, jejíž konkrétní n-tice vznikly vybráním příslušných prvků z domén. Atribut je pojmenování pro každé užití hodnoty z domény v relaci. Záhlaví relace obsahuje jméno relace a jména atributů v relaci. Je v čase neměnné. Tělo relace obsahuje v čase proměnnou množinu n-tic hodnot, jejichž pořadí je dáno záhlavím relace. Stupeň relace je počet atributů relace. Kardinalita relace je počet řádků relace. Primární klíč je atribut nebo skupina atributů, který jednoznačně určuje n-tice relace. Pokud je třeba použít více atributů pro jednoznačné určení n-tice, potom hovoříme o tzv. složeném primárním klíči. Pokud je více atributů, které splňují pravidlo pro primární klíč, jeden zvolíme jako primární a ostatní jsou alternativní klíče. Definice primárního klíče: Primární klíč je podmnožina atributů relace, která: 1) jednoznačně identifikuje každý prvek relace 2) 2) není redundantní, tj. žádný její atribut nelze vynechat, aniž by podmínka 1) přestala platit. Pokud více atributů může splňovat výše uvedenou definici, jedná se pak o tzv. kandidáty primárního klíče. Primární klíč v relaci smí být pouze jeden, ostatní kandidáti se stávají tzv. alternativními klíči. Kontrolní otázky: 1. Co je to databázová relace a čím se liší od relace matematické? 8
2. Jak lze vytvořit každou instanci databázové relace? 3. Čím lze identifikovat jednotlivé n-tice relace? 4. Kolik může mít relace primárních klíčů? Pojmy k zapamatování: Doména Atribut Relace Kandidát primárního klíče Primární klíč Alternativní klíč Kardinalita relace Stupeň relace Cizí klíč 1NF 1.1.2 Operace relační algebry Průvodce studiem: Operace relační algebry, ať již speciální operace (projekce, selekce a spojení) nebo operace množinové jsou základem mnoha dotazovacích jazyků a jsou základem (spolu s relačním kalkulem) pro pochopení problematiky dotazování a následně získávání informací z databáze. Jedná se o širokou problematiku, které bude věnován dostatečný prostor v následujících kapitolách, proto jsou zde umístěny pouze základní informace, které jsou opakováním z předmětu Úvod do databází. Relační algebra je nástrojem pro manipulaci s relacemi. Je to jazyk, který pracuje s celými relacemi. Operátory relační algebry se aplikují na relace a výsledkem jsou opět relace. 1.1.2.1 Nejpoužívanější operace Projekce Selekce Spojení Projekce Umožňuje potlačit označené atributy v relaci. Umožňuje přejít z relace o n sloupcích na relaci o p sloupcích, přičemž p < n. Nově vzniklá relace bude obsahovat p sloupců. Může 9
obsahovat i méně řádků než původní relace, protože duplicitní řádky se v relaci nesmějí vyskytovat. Selekce Někdy se vyskytuje termín restrikce. Operací selekce vznikne nová relace vybráním řádků z původní relace na základě logické podmínky. Podmínka je zadána Booleovským výrazem (pomocí logických spojek and, or, not), jehož atomické formule mají tvar t 1 θ t 2, kde θ je <,>,=,<=,>=,<>, t i je buď konstanta nebo jméno atributu. Spojení Spojení dvou relací vytvoří třetí relaci. Výsledná relace vždy obsahuje všechny kombinace, které vyhovují zadané podmínce. Podmínka vyjadřuje vztah mezi dvěma relacemi. Spojení relací se zajišťuje pomocí společného atributu. Jednotlivé řádky z 1.relace se spojí s příslušnými řádky z 2.relace. Relace se nespojují podle názvů atributů, ale podle jejich hodnot. Definice: Spojení relací R a S podle podmínky θ na atributu A z R a atributu B z S je relace R[ A θ B] S = { rs r R s S rr[a] θ rs[b]} kde rr[a], rs[b] jsou hodnoty atributů A, resp. B relací R, resp. S. 3 druhy spojení 1. spojení na rovnost atribut1 = atribut2 2. spojení na nerovnost atribut1 <> atribut2 3.vnější spojení - INKLUZE Funguje stejně jako spojení na rovnost s tím rozdílem, že do výsledné relace se přidají i nespojené řádky z první relace (ev. z druhé relace, ev. z obou relací). Pak příslušné atributy nejsou vyplněny (nabývají hodnoty NULL). Příklad: Relace 1 Číslo Jméno Město Ulice Věk 1 Jiří Kladno Pražská 32 19 2 Karel Praha Evropská 1 17 3 Jan Brno Tichého 43 16 4 Karel Brno Dlouhá 21 19 5 Tomáš Praha Široká 7 20 10
Relace 2 ČísloS Č-typu Rok-výroby Cena 1 101 1988 100 1 701 1989 105 2 101 1990 200 7 701 1991 300 Podmínka pro spojení na rovnost: Číslo Relace 1 = ČísloS Relace 2 Vznikne nová relace: Číslo Jméno Město Ulice Věk Č- typu Rokvýroby 1 Jiří Kladno Pražská 32 19 101 1988 100 1 Jiří Kladno Pražská 32 19 701 1989 105 2 Karel Praha Evropská 1 17 101 1990 200 Zavedeme jednoduchý jazyk pro vyjádření operací relační algebry: Cena Příklad: Z relace AUTA vybereme všechna identifikační čísla, názvy a rok výroby aut, jejichž cena je menší než 150 000 Kč. Klíčová slova budou podtržena. restrict AUTA where cena < 150000 giving MEZIVYS1 project MEZIVYS1 over ident_a, nazev_a, rok_vyr, cena giving VYSL Tuto operaci provedeme pomocí vhnízdění (nesting): project (restrict AUTA where cena < 150000) over ident_a, nazev_a, rok_vyr, cena giving VYSL 1.1.2.2 Základní množinové operace aplikované na relace Podmínky pro všechny množinové operace: Obě relace jsou stejného stupně, tj. mají stejný počet sloupců. Každý i-tý atribut z obou relací je definován na stejné doméně. Sjednocení R S = {t t R t S} 11
Sjednocení vytvoří novou relaci, která obsahuje n-tice obou výchozích relací. Pokud mají tyto relace některé n-tice shodné, ve výsledné relaci se objeví pouze jednou. Průnik R S = {t t R t S} Výsledná relace bude obsahovat pouze totožné n-tice obou relací. Množinový rozdíl R - S = {t t R t S} Nová relace bude obsahovat všechny n-tice první relace, ale pouze ty, které se nevyskytují v druhé relaci. Symetrický rozdíl Nová relace bude obsahovat všechny n-tice obou relací, s výjimkou těch, které se vyskytují v obou relacích. Kartézský součin Již není typickou množinovou operací, protože nesplňuje její 2 podmínky. R x S relace R stupně m a relace S stupně n je relace stupně m+n, která je definována: R x S = {rs r R s S} kde rs představuje prvek relace (r 1, r 2,...r m,s 1,s 2,...s n ) r,s označuje prvky relací R a S. Kartézský součin vytvoří novou relaci tak, že spojuje n-tice z obou relací systémem každý s každým. Počet n-tic (kardinalita) nové relace je součinem kardinalit obou vstupních relací. Kontrolní otázky: 1. Jaké typy operací spojení znáte? 2. Co musí platit o relacích, pokud na ně chceme uplatnit operaci sjednocení, průniku či rozdílu? 3. Jaká je kardinalita a studeň relace, která je výsledkem operace kartézský součin? 4. Ze kterých operací lze odvodit operaci spojení? 12
Projekce Selekce Spojení Sjednocení Průnik Rozdíl Kartézský součin Pojmy k zapamatování: 1.1.3 Normalizace relačních schémat 1.1.3.1 První normální forma relace Báze dat je nejjednodušší a nejpřehlednější, jsou-li relace, které ji reprezentují, definovány nad doménami, jejichž prvky jsou jednoduché (nejsou to opět relace, či jiné struktury). O takových relacích se říká, že jsou v první normální formě a příslušné atributy se nazývají jednoduchými. Relace je v první normální formě (1NF), jsou-li všechny její atributy atomické (nedělitelné) Atributy, které nejsou jednoduché, jsou složené. Některé relace v první normální formě však mají i negativní vlastnosti z hlediska redundance a konzistence dat. Problémy spojené s redundancí dat vyplývají zpravidla ze skutečnosti, že hodnota některého atributu může zcela určovat hodnoty jiných atributů. Sdružování takových atributů v jedné relaci se ukazuje jako nevhodné. Problematice dekompozice relací neboli jejich normalizaci budou proto věnovány následující odstavce. 1.1.3.2 Funkční závislosti atributů Problém, který byl nastíněn v předcházejícím odstavci, spočívá ve vzájemných závislostech atributů jedné relace. Pro tuto závislost se zpravidla používá termínu funkční závislost, i když z hlediska matematického nejde o funkci, stejně jako pojem relace zcela neodpovídá matematickému pojetí (v databázovém pojetí se totiž relace stejně jako funkční závislosti mění v čase ). Nechť R(A:D) je relační schéma a X, Y jsou jednoduché nebo složené atributy. Atribut Y je funkčně závislý na atributu X, (X Y ), platí-li pro každou instanci (n-tici) relace R, že pro libovolné dva prvky relace, které se shodují v hodnotě atributu X, platí, že se shodují i v atributu Y. Jinými slovy: Atribut Y je funkčně závislý na atributu X, je-li ke každé hodnotě atributu X přiřazena právě jedna hodnota atributu Y. Atribut Y je úplně funkčně závislý na složeném atributu X, je-li na X funkčně závislý a zároveň není funkčně závislý na žádné z jeho složek. 1.1.3.3 Druhá normální forma relace Samotný požadavek, aby se relace nacházela v první normální formě, tj. aby každý atribut relace byl definován na jednoduché doméně, nevede vždy k nejžádanějším výsledkům. 13
Relace R je ve druhé normální formě (2NF), je-li v první normální formě a jestliže pro každý neklíčový atribut platí, že je úplně funkčně závislý na primárním klíči. Proces transformace relace z nižší normální formy (zde v 1.NF) na relaci ve vyšší normální formě (zde ve 2.NF) se nazývá normalizace relace. Relace v některé z vyšších normálních forem je zároveň relací ve všech vůči ní nižších normálních formách. Je zřejmé, že vyšší normální formu relace lze vytvořit vhodnou dekompozicí relace původní. Požaduje se však, aby výchozí relace byla z výsledných komponent rekonstruovatelná, tj. aby při dekompozici nedošlo ke ztrátě informace. 1.1.3.4 Třetí normální forma relace Nechť X, Y, Z jsou atributy (jednoduché nebo složené) daného relačního schématu a nechť mezi dvojicemi atributů platí: Pak je atribut Z tranzitivně závislý na atributu X. Nutnost podmínky nezávislosti X na Y vyplývá ze skutečnosti, že v opačném případě by v každém relačním schématu se dvěma a více možnými klíči byly všechny neklíčové atributy tranzitivně závislé na kterémkoliv z klíčů. Relace R je v třetí normální formě (3NF), je-li ve druhé normální formě a platí-li, že žádný neklíčový atribut není tranzitivně závislý na žádném klíči relace R. Z definice relace ve třetí normální formě vyplývají tyto její vlastnosti Žádný neklíčový atribut relace není ani částečně ani tranzitivně závislý na nějakém klíči relace, jsou pouze úplně funkčně závislé na primárním klíči. Neklíčové atributy jsou navzájem nezávislé. Problémy, které mohou u relací v třetí normální formě nastat, mohou však vyplynout ze vzájemně částečně nebo tranzitivně závislých klíčových atributů. Kandidátní klíče, pokud nejsou jednoduché, se totiž mohou částečně překrývat. Dekompozice relací, které vedou ke třetí normální formě, mohou navíc být nejednoznačné a vést k nestejně kvalitním výsledkům. Nedostatky plynoucí ze vzájemných závislostí klíčových atributů eliminuje Boyce - Coddova normální forma BCNF, která vylučuje všechny netriviální funkční závislosti atributů kromě závislostí na klíčích relace. Schéma relace R(A:D) je v Boyce-Coddově normální formě ( BCNF), je-li v první normální formě a platí-li pro každou funkční závislost atributu A na atributu X, která není triviální, že X je klíčem v R a A je neklíčový atribut. Je zřejmé, že každé relační schéma, které je v BCNF je též ve třetí normální formě, nikoliv však naopak. Existují relační schémata ve třetí normální formě, která nejsou v BCNF. 1.1.4 Transformace konceptuálních schémat 1.1.4.1 Nejpoužívanější konstruktory E - R modelu ENTITA Obecná (bez rozlišení druhu). 14
Silná (kmenová, základní, regulární), tj. taková, která existuje nezávisle na jiných entitách. Slabá (popisná) je entita, která je identifikačně závislá na jiné entitě, resp. na jiných entitách. Vazební (asociativní) je entita, která realizuje vazbu mezi entitami. Generalizace (nadtyp). Specializace (podtyp). VZTAH n -ární vztah je vztah obecně mezi n entitami. Binární vztah existuje mezi dvěma entitami. Kardinalita vztahu vyjadřuje max. a min. počet výskytů zúčastněných entit ve vztahu. Existenční závislost (někdy také označována jako tzv. povinné členství ve vztahu) vyjadřuje tu skutečnost, že instance existenčně závislé entity nemohou existovat, aniž by vstoupily do vztahu s nadřazenou entitou. Identifikační závislost je silnější formou existenční závislosti. Identifikačně závislá entita je rovněž existenčně závislá a navíc její instance nelze identifikovat pomocí vlastních atributů a k identifikaci takové entity se používá identifikační klíč nadřazené entity. ATTRIBUT Jednoduchý, tj. dále nedělitelný. Složený z více atributů. Základní, tj. takový, který nelze odvodit z jiných atributů. Odvoditelný z jiných atributů. Vícehodnotový, tj. takový který v rámci jedné instance entity může nabývat více hodnot. KLÍČ Identifikační - slouží k identifikaci jednotlivých instancí entity. V rámci jedné entity smí být pouze jeden. Alternativní - Kandidát na identifikační klíč, který však nebyl vybrán. Slouží k rychlému vyhledávání. Cizí klíč umožňuje modelovat vztahy mezi entitami. Je to atribut entity, který je v nadřazené entitě identifikačním klíčem. Inverzní klíč slouží k rychlému vyhledávání. Jeho hodnoty v rámci jedné entity mohou být duplicitní. 1.1.4.2 Principy transformace E-R schématu do relačního Entitní a vztahové typy se převádějí na relace. Čtenář relačního schématu, který nezná konceptuální schéma tedy obecně nemusí být schopen rozlišit, která relace odpovídá entitnímu a která vztahovému typu. Převedení silného entitního typu Entita se převede na relaci. 15
Identifikační klíč se převede na primární klíč. Popisné atributy definují domény relace. Problém může nastat v souvislosti s normalizací relací. Cílem je, aby výsledná relace byla aspoň v 3. NF nebo v BCNF. Dekompozice pak způsobí nárůst relací, které nemají odpovídající entity v E-R diagramu. Do jisté míry toto lze řešit pohledy. Reprezentace vztahů vztahy 1 : 1 a) Má-li E1 i E2 nepovinné členství ve vztahu V, definují se 3 relace E1 - R1, E2 - R2, V - R. R bude obsahovat klíče schémat R1 a R2,jako cizí klíče. Libovolný z nich může v R být primárním klíčem. Další atributy v R budou odpovídat atributům ve V. b) Má-li E1 nepovinné a E2 povinné (nebo obráceně). Budou se vytvářet pouze relace R1 a R2. Existenční závislost E2 na E1 vyjádříme tak, že k R2 připojíme jako cizí klíč klíčové atributy R1. Atributy vztahu V budou umístěny do R2. c) Mají-li oba povinné členství, můžeme vytvořit jediné schéma relace R, které vznikne z těchto dvou entit. Primárním klíčem bude libovolný z identifikačních klíčů, přidáme atributy V. vztahy 1 : N Ve vztahu s kardinalitou 1 : N je entita vstupující n -ti instancemi do vztahu nazývána determinantem vztahu. a) Má-li determinant (E1) povinnou účast ve vztahu V, definujeme 2 relace R1 a R2. Ke schématu R1 připojíme klíčové atributy R2. Primární klíč R1 odpovídá identifikačnímu klíči determinantu E1. b) Má-li determinant (E1) nepovinnou účast ve vztahu V, definujeme tři relace R1, R2, R. R bude obsahovat klíče schémat R1 a R2 jako cizí klíče. Klíč schématu R1 bude v R primárním klíčem. Další atributy budou odpovídat atributům vztahu V. Reprezentace vícehodnotových atributů Příklad: Následující příklad ukazuje možnost výskytu vícehodnotového atributu v konceptuálním modelu a jeho transformaci. Analytik sestavil konceptuální schéma tak, že použil vícehodnotový atribut ZAMĚSTNANEC (OSOBNÍ ČÍSLO,... RODNÉ_ČÍSLO_DÍTĚTE: Multi) To konceptuální model připouští Jak převést takovou entitu na relace? 1. Některé relační SŘBD připouštějí tabulky s vícehodnotovými sloupci 2. Jestliže se vícehodnotový atribut váže na maximální počet výskytů m a databázový model připouští hodnotu NULL ve sloupci tabulky, budou atributy v tabulce RODNÉ_ČÍSLO_DÍTĚTE_ i pro i = 1,... m a nevyužité atributy budou mít hodnotu NULL. 3. Zavést dvě relace: 16
ZAMĚSTNANEC (OSOBNÍ ČÍSLO,...) DATA_NAROZENÍ (OSOBNÍ ČÍSLO, RODNÉ ČÍSLO DÍTĚTE) Každému dítěti bude odpovídat jedna n -tice v relaci data_narození. Konstrukce klíče je nejednoznačná a) Klíčem může bát složený klíč např. OSOBNÍ ČÍSLO, RODNÉ ČÍSLO DÍTĚTE b) Klíčem může být pouze vícehodnotový atribut RODNÉ ČÍSLO DÍTĚTE Reprezentace slabého entitního typu Slabý entitní typ je reprezentován relací, který kromě svých atributů mái atributy identifikačního vlastníka. Je třeba dbát na to, aby identifikační vlastník byl pouze jeden. Identifikační klíč je pak tvořen množinou atributů slabého entitního typu + atributy identifikačního vlastníka. 1.1.5 Integrita relačních schémat Požadavek integrity dat v databázi (jejich souladu se zobrazovaným světem objektů) vede k nutnosti definovat pro domény atributů jednotlivých relačních schémat a jejich vzájemné vztahy jistá omezení, která zabraňují možnostem atributů nabývat nereálných hodnot. Tato omezení se formulují pomocí soustavy uzavřených logických formulí v jazyce predikátové logiky. Pro relační báze dat je kromě skutečnosti, že entity i vztahy se reprezentují stejným způsobem, tj. pomocí relací, charakteristickým rysem i to, že splňují tři pravidla integrity. Prvním z těchto pravidel je pravidlo entitní integrity pro relační báze dat a spočívá v požadavku, aby primární klíč relace měl pro všechny její prvky (n-tice) svou hodnotu. Druhé pravidlo integrity je doménová integrita, která požaduje, aby hodnoty atributů odpovídaly předem definovaným doménám (množinám hodnot atributů). Základní definicí domény je datový typ atributu. Kromě toho je však možno definovat podmínky platnosti (logické formule), které musí být při vkládání dat do databáze splněny. Třetí je pravidlo referenční integrity (vztahové), které se týká možností používání "cizích" klíčů relací a spočívá v požadavku, aby ke každé definované hodnotě cizího klíče existovala odpovídající hodnota primárního klíče nadřazené relace. Tomuto tématu se budeme věnovat podrobněji. 1.1.5.1 Referenční integrita K definování referenční integrity slouží primární klíč (Primary Key) nezávislé entity a cizí klíč (Foreign Key) závislé entity. Na primární klíč jsou kladeny následující podmínky Hodnota primárního klíče musí být unikátní. Entitní typ může mít pouze jeden primární klíč. Primární klíč může být i složený klíč, tj. složený z více atributů. Každá složka primárního klíče musí být definována jako NOT NULL. Podmínky kladené na cizí klíč Cizí klíč a primární klíč se musí skládat ze stejného počtu atributů. Odpovídající atributy musí být definovány nad stejnými doménami a jejich pořadí musí být stejné. 17
Závislý entitní typ může mít více cizích klíčů z více nadřazených entit. Cizí klíč může nabývat hodnoty NULL, pokud definuje pouze existenční typ vztahu. Cizí klíč nesmí nabývat hodnoty NULL, pokud definuje identifikační typ vztahu. Cizí klíč nabývá hodnoty NULL, pokud aspoň jedna jeho složka nabývá hodnoty NULL. Pro nezávislé entitní typy je referenční integrita hlídána u operací DELETE a UPDATE. Pro závislé entitní typy je hlídána operace INSERT a UPDATE. 1.1.5.2 Způsoby zachování referenční integrity RESTRICT - při mazání a aktualizaci v nezávislém entitním typu se restriktivně vyžaduje, aby v podřízeném entitním typu byla nejdříve vymazána nebo aktualizována svázaná instance. Neníli tomu tak, mazání resp. aktualizace v nadřazeném entitním typu je zakázáno. Zápis nové instance do podřízeného entitního typu je zakázán, nenachází-li se odpovídající instance v nadřazeném entitním typu. CASCADE - způsobí kaskádovou aktualizaci resp. mazání v podřízeném entitním typu při aktualizaci resp. mazání v entitním typu nadřízeném. Tento způsob může způsobit kaskádovité mazání velkého počtu instancí, proto je třeba jeho použití bedlivě zvážit. SET NULL - při aktualizačních operacích je možno z důvodu zachování referenční integrity použít nastavení cizího klíče na hodnotu NULL. Tento způsob nelze použít u identifikačního typu vztahu, kde cizí klíč podřízeného entitního typu je součástí primárního klíče. Primární klíč (a to žádná jeho složka, pokud se jedná o složený klíč) nesmí nabývat hodnoty NULL. Příklad: Příklad demonstruje jedno z možných nastavení pravidel pro zachování referenční integrity. Typ entity/operace Identifikační vztah Existenční vztah Závislá/Delete Bez omezení Bez omezení Závislá/Insert Restrict Set Null Závislá/Update Restrict Set Null Nezávislá/Delete Cascade Set Null Nezávislá/Insert Bez omezení Bez omezení Nezávislá/Update Cascade Set Null 18
Shrnutí: Prostředkem pro správné navržení relačních schémat s důrazem na odstranění redundance dat je normalizace relačních schémat. Je založena na odhalování funkčních závislostí mezi jednotlivými atributy relace. Podmínkou je, aby byly všechny relace v relačním schématu minimálně v 3NF. Při transformaci konceptuálních schémat na relační datová schémata je třeba se držet navržených postupů a především se zabývat typy vztahů mezi jednotlivými entitami, povinným či nepovinným členstvím ve vztahu, typy atributů (vícehodnotový atribut, složený atribut, atd). Relační datové schéma disponuje mocným nástrojem pro udržování konzistence databáze a tímto nástrojem jsou integritní omezení. Existují tři typy integritních omezení, které je třeba při definici schématu databáze definovat. Jedná se o IO doménové, entitní a referenční. Kontrolní otázky: 1. Co je základní vlastností atributů navržených relací pro určení normální formy? 2. Jaké znáte normální formy a co vyjadřují? 3. Jaký je postup při transformaci E-R modelu na relační datový model? 4. Co je to referenční integrita a jak je možné ji hlídat? Pojmy k zapamatování: 1NF, 2NF, 3NF, BCNF Transformace konceptuálních schémat Doménová integrita Entitní integrita Referenční integrita Průvodce studiem: Tato kapitola byla poněkud obsáhlá, ale doufám, že jste ji bez komplikací zvládli. Přece jen se jedná o opakování, čili o věci, které by vám měly být známy. Pokud po prostudování této kapitoly ještě stále existují místa, která vám nejsou jasná, ev. máte o něčem pochybnosti, nerozpakujte se kontaktovat tutora, ev. vyvolat diskusi se svými spolužáky. Pro čtení 19
následujících kapitol je totiž bezpodmínečně nutné, abyste tuto opakovací kapitolu zvládli na výbornou! 20
2 MODUL 2 2.1 ÚVOD DO DATABÁZOVÝCH JAZYKŮ Cíl: Cílem této kapitoly je připomenout čtenáři základní pojmy predikátové logiky, se kterými budou pracovat další kapitoly. Dalším cílem je seznámit čtenáře s pojmem databázové jazyky a provést jejich rozčlenění. Čtenář po prostudování kapitoly by měl umět vyjmenovat symboly a konstrukty predikátové logiky. Dále by měl umět definovat, co to jsou dotazovací jazyky a z jakých částí se skládají a měl by umět definovat, co je to v relačním pojetí dotaz a odpověď. Klíčová slova: JDD, JMD, JRD, dotazovací jazyk, dotaz, relační algebra, relační kalkul, term, atomická formule, formule. 2.1.1 Opakování některých pojmů predikátové logiky Průvodce studium: Pro definování dotazů v relačních databázích se neobejdeme bez znalostí predikátové logiky. To základní a nejdůležitější, co potřebujete vědět z této oblasti logiky, vám předkládá kapitola 2.1.1. Samozřejmě není možné se pouštět do podrobných definic a důkazů, jsou zde uvedeny pouze základní pojmy. Pokud vám nebude cokoli jasné, bude potřeba sáhnout po učebnici nebo skriptech z logiky. Mohu doporučit [7]. 2.1.1.1 Symboly predikátové logiky 1) proměnné a, b, c, x, y... 2) n-ární funkční symboly 0-ární funkční symbol je konstanta n-ární predikátové symboly 3)logické spojky,,,, 4) kvantifikátory, 2.1.1.2. Konstrukty predikátové logiky 1) TERM Termem může být konstanta, proměnná, funkce. Vyhodnocením termu se získá prvek množiny hodnot (universa discursu). Př. sin(x), a2 - a + 1, 5, y... 2) ATOMICKÁ FORMULE 21
Se skládá z predikátového symbolu, za kterým v závorkách je term. Př. R(x), kde x je n-ticová proměnná, do které se ukládají hodnoty n atributů relace R (n-tice relace R), R je jméno relace (predikátový symbol). Vyhodnocením atomické formule se získá hodnota true nebo false. 3) FORMULE Z atomických formulí lze vytvářet formule pomocí: Logických spojek. Kvantifikátorů. Hodnota formule je vždy true nebo false. Proměnná ve formuli (n-ticová proměnná) může být buď volná nebo vázaná. Proměnná x je vázaná ve formuli A, jestliže A tvoří dosah kvantifikátoru obsahujícího x. Formule, které obsahují alespoň jednu volnou proměnnou, se nazývají otevřené. 2.1.1.3. Interpretace formulí Interpretace I se skládá z: 1) Neprázdné množiny U, která se nazývá doména. 2) Množiny n-árních funkcí f pro každý funkční symbol. 3) Množiny n-árních relací R pro každý predikátový symbol. Ohodnocení h proměnných v interpretaci I je funkce: h : Var U, kde Var je množina všech proměnných, U jsou jména prvků světa objektů. Formule A je splněna v interpretaci I, jestliže je pravdivá pro každé ohodnocení proměnných h. 2.1.2 Databázové jazyky Databázové jazyky, dodávané s příslušným systémem řízení báze dat (SŘBD), se obecně dělí na: 1) Jazyky pro definici dat JDD, angl. DDL (Data Definition Language) Jsou určeny pro správce databáze. Jazyky obsahují prostředky pro definice a modifikaci schématu databáze, definice relací a integritních omezení. Dále prostředky pro definování tzv. pohledů. 2) Jazyky pro manipulaci dat JMD, angl. DML (Data Manipulation Language) Tyto jazyky transformují jeden stav databáze do druhého a představují následující operace: Přidávání dat do databáze (INSERT). Odebírání dat z databáze (DELETE). Změna dat v databázi (UPDATE). Veškeré operace musí být vykonány tak, aby nebyla narušena integrita dat. O integritu databáze se stará SŘBD na základě definovaných integritních omezení. 3) Jazyky pro řízení dat JRD, angl. DCL (Data Control Language) Prostředky pro zpracování transakcí, prostředky administrace databáze atd. 22
4) Jazyky pro dotazování - dotazovací jazyky, angl. DQL (Data Query Language) Jazyky pro dotazování (získávání informací z databáze) jsou nejpouživanějšími. V relačních databázích dotazování vychází ze dvou teoretických základů, z relační algebry a relačního kalkulu. Vhodnou interpretací dat uložených v databází lze z databáze získat informace. Proces interpretace dat se dá jednoduše vyjádřit jako proces tvorby dotazu (formule dotazu), vyhodnocení dotazu a poskytnutí odpovědi. V relačních databázích je odpovědí relace, jejíž n- tice splňují podmínky, tj. ohodnocují formuli dotazu jako true. Rozlišujeme tyto dotazovací jazyky: a) Navigační (procedurální, preskriptivní, algebraické). Při formulaci dotazu je třeba zadat algoritmus, jako posloupnost operací prováděných nad relacemi, který zajistí výběr příslušných dat. Navigační jazyky jsou založeny na relační algebře. b) Specifikační (neprocedurální, deskriptivní, deklarativní). Požadavky na výběr se zadávají jako predikát, charakterizující výslednou relaci. Výsledek výběru dat je relace, jejíž n-tice splňují podmínky výběru uvedené ve formuli. Specifikační jazyky jsou založeny na relačním kalkulu. Každý požadavek zadaný v relační algebře se dá vyjádřit v relačním kalkulu a naopak! 2.1.2.1 Definice dotazu Dotaz typu S je funkce q, která pro každou databázi S* poskytne odpověď q(s*), případně je na S* nedefinována. V relačních databázích je q (S*) opět relace. Dotazovací jazyky obsahují: 1) Porovnávací operátory 2) Logické spojky 3) Aritmetické operátory 4) Množinové operátory 5) Relační operátory (projekce, selekce, spojení) 6) Množinové funkce (COUNT) 7) Agregační funkce (MAX, MIN, SUM...) 8) Operátory pro práci s časem Nejpoužívanější relační dotazovací jazyky: SQL, QUEL, QBE Shrnutí: Systémy řízení báze dat, založené na relačním datovém modelu, disponují poměrně velmi dobře propracovaným aparátem tzv. databázových jazyků. Databázové jazyky jsou členěny na jazyky pro definování dat, jazyky pro manipulaci s daty, jazyky pro řízení dat a dotazovací jazyky. Nejfrekventovaněji používané jsou operace dotazovacích jazyků, protože se používají k získávání informací z databáze. Dotazovací jazyky v relační modelu jsou založeny na relační algebře (vychází z množinové matematiky, kterou rozšiřuje o speciální operace) a na relačním kalkulu (vychází z predikátové logiky 1. řádu). 23
Kontrolní otázky: 1. Co je to n-ticová proměnná? 2. Co je to term a jakých hodnot může nabývat? 3. Co je to formule a jakých hodnot může nabývat? 4. Jak se člení databázové jazyky v relačních SŘBD? 5. Co je to dotaz, co je to odpověď? Pojmy k zapamatování: JDD JMD JRD Dotazovací jazyky Dotaz - odpověď Relační algebra Relační kalkul Term Atomická formule Formule 2.2 RELAČNÍ ALGEBRA A RELAČNÍ KALKUL Cíl: Kapitola Relační algebra a relační kalkul je z hlediska dalšího pochopení problematiky dotazování v prostředí relačních databází klíčovou. Čtenář po jejím prostudování by měl znát veškeré operace relační algebry a relačního kalkulu a to jak z definice, tak pomocí přepisovacího jazyka. Každý dotaz na data by měl být schopen zapsat v obou dotazovacích jazycích. Každý dotaz v relační algebře by měl umět přepsat do relačního kalkulu a opačně. Klíčová slova: Základní operace relační algebry, odvozené operace, přepisovací jazyk relační algebry, relační kalkul, přepisovací jazyk relačního kalkulu, věta o ekvivalenci. Relační algebra je procedurální jazyk. Skládá se z množiny operací, které jsou uplatňovány na jednu nebo dvě relace. Výsledkem operace relační algebry je opět relace. Soubor základních 24
operací relační algebry představuje operace sjednocení, rozdíl, součin, projekce a selekce. Ostatní operace jako je průnik, podíl a spojení jsou operace, které se dají vyjádřit pomocí základních operací a neovlivňují výběrovou schopnost relační algebry. 2.2.1 Operace relační algebry Sjednocení UNION je binární operace, která se uplatňuje na relace stejného stupně, jejich atributy jsou definovány nad týmiž doménami. Výsledná relace obsahuje řádky buď jedné nebo druhé relace. Duplicitní řádky nejsou připuštěny. Sjednocení relací R a S se označuje R S a je definováno R S = {t t R t S} Příklad: R: A B S: C D x 5 y 8 y 9 z 5 z 1 z 1 R S : x 5 y 9 z 1 y 8 z 5 Rozdíl DIFFERENCE je binární operace, která se uplatňuje na relace stejného stupně, jejich atributy jsou definovány nad týmiž doménami. Výsledná relace obsahuje řádky relace R, které neobsahuje relace S. Rozdíl relací R a S se označuje R - S a je definován R - S = {t t R t S} Příklad: R - S: x 5 y 9 25
Součin CARTESIAN PRODUCT je binární operace nad relací R stupně n a relací S stupně m. Součin se označuje R x S a je definován R x S = {rs r R s S} rs = (r 1, r 2,..., r n, s 1, s 2,..., s m ). Stupeň výsledné relace je n+m, kardinalita výsledné relace je n*m. Příklad: R: A B S: C D x 5 y 8 y 9 z 5 z 1 z 1 R x S: x 5 y 8 x 5 z 5 x 5 z 1 y 9 y 8 y 9 z 5 y 9 z 1 z 1 y 8 z 1 z 5 z 1 z 1 Projekce PROJECT Nechť R je relace stupně n. Projekcí je nazýván výběr specifikovaných atributů A i1,...a im, kde 1 ij n a je označován jako R[A]. Projekce je definována R[ A ] = { r[ A ] r R }, kde r[ A ] = (r i1,..., r im ) Příklad: R: A B C R[A]: A R[A,B]: A B a 1 x a a 1 b 2 y b b 2 c 3 z c c 3 a 4 x a 4 26
Selekce SELECTION Nechť R je relace stupně n a ϕ( r ) je výraz tvaru i θ a, a θ i resp. i θ j, kde i, j jsou indexy komponent, a je prvek domény, θ je binární predikát (např. <, =, >,,, ). Výběr z relace R podle ϕ se označuje R(ϕ) a je definován R(ϕ) = {r r R ϕ( r ) } Příklad: R: A B C R( A = a ): A B C R( A = C): A B C a 1 x a 1 x a 4 a b 2 y a 4 a c 3 z a 4 a 2.2.2 Další operace relační algebry Následující operace se dají vyjádřit pomocí základních operací relační algebry Průnik INTERSECT je binární operace, která se uplatňuje na relace stejného stupně, jejich atributy jsou definovány nad týmiž doménami. Výsledná relace obsahuje řádky jak jedné tak druhé relace. Duplicitní řádky nejsou připuštěny. Průnik relací R a S se označuje R S a je definováno R S = {t t R t S} platí: R S = R - (R -S) Příklad: R: A B S: C D x 5 y 8 y 9 z 5 z 1 z 1 R S: A B z 1 27
Spojení JOIN Nechť R je relace stupně m a S je relace stupně n. R[ i θ j] S je spojení relací R a S podle θ na i - tém atributu relace R a j - tém atributu relace S a je definováno R[ i θ j] S = { rs r R s S r[i] θ s[ j]} Platí: R[ i θ j] S = (R x S)[ i θ (m + j)], pro i { 1,2,..., m}, j {1, 2,..., n} Příklad: R: A B S: C D x 5 y 8 y 9 z 5 z 1 z 1 R[ A = C]S: A B C D y 9 y 8 z 1 z 5 z 1 z 1 Podíl QUOTIENT Mějme relaci R stupně m a relaci S stupně n, kde m > n S 0. Podíl R S je relace stupně r - s, a je definován R S = R[i 1,..., i r-s ] - ((R[i 1,..., i r-s ] x S) - R)[i 1,..., i r-s ] Příklad: R: A B C D S: X Y a b c d c d a b e f e f b c e f 28
e d c d e d e f Operaci R S rozdělíme na jednotlivé kroky 1. R[A, B]: A B a b b c e d 2. V = R[ A, B] x S: A B X Y a b c d a b e f b c c d b c e f e d c d e d e f 3. (V - R)[A, B]: A B b c 4. R[A, B] - (V - R)[A, B]: A B a b e d 2.2.3 Přepisovací jazyk relační algebry Sjednocení Union Relace1 and Relace2 Rozdíl Minus Relace1 and Relace2 Součin Cartesian Relace1 and Relace2 Projekce Project Relace over Seznam_Atributů Selekce Restrict Relace where podmínka Průnik Intersect Relace1 and Relace2 29
Spojení Join Relace1 and Relace2 over Atribut Dělení Devide Relace1 by Relace2 2.2.4 Relační kalkul Relační kalkul vychází z predikátové logiky 1. řádu a v relačních databázích se vyskytuje ve dvou formách. Jedná se o n-ticový a doménový relační kalkul. 2.2.4.1 Abeceda n-ticového relačního kalkulu 1. Individuové konstanty (prvky domén, např. '2', 'P3'...) 2. Indexové konstanty (přirozená čísla, případně jména atributů) pomocí těchto konstant se odvoláváme na jednotlivé komponenty n-ticových proměnných 3. n-ticové proměnné, jejich oborem hodnot jsou n-tice prvků domén 4. Predikátové konstanty: unární: {R/R je jméno relace} binární: =, <, >,,, 5. Logické symboly:,,,, 6. Oddělovače: [, ], (, ) Atomické formule relačního kalkulu: 1. R(s) R...unární predikát (jméno relace) s...n-ticová proměnná Tato atomická formule znázorňuje tvrzení, že hodnota n-ticové proměnné s je prvkem relace R s[i] θ u[j] s[i] θ 'a' 'a' θ s[i] s,u...n-ticové proměnné i,j...indexové konstanty 'a'...individuová konstanta θ...binární predikát n-ticové proměnné mohou být volné nebo vázané N-ticová proměnná s je vázaná ve formuli A, jestliže A tvoří dosah kvantifikátoru obsahující s. 2.2.4.2 Formule relačního kalkulu 1. Každá atomická formule je formule 2. Jsou -li Φ 1, Φ 2 formule, pak jsou formulemi i Φ 1 Φ 2, Φ 1 Φ 2, Φ 1 30
3. Je-li Φ formule a s volná proměnná, pak s (Φ) a s (Φ) jsou rovněž formule. Proměnná se stává v těchto formulích vázanou 4. Nic jiného není formule. 2.2.4.3 Přepis z relační algebry do relačního n-ticového kalkulu Sjednocení R S {t t R t S} {t R(t) S(t)} Rozdíl R - S {t t R t S} {t R(t) S(t)} Součin R x S R stupně n, S stupně m {t (n+m) ( u (n) ) ( v (m) ) (R(u) S(v) t[1] =u[1]... t [n] =u[n] t[n+1] = v[1]... t[n+m]=v[m])} Projekce R[i 1, i 2,..., i m ] {t (m) ( u) (R(u) t[1]=u[i 1 ]... t[m] =u[i m ] Selekce {t R(t) ϕ} R(ϕ) Příklad: Příklady požadavků v relačním kalkulu D1: vyučující, kteří vyučují aspoň jeden předmět {t (1) r(v(r) t[1] = r[1])} rel. algebra V[1] D2: nevyučují žádný předmět {t (1) s r(u(s) t[1] = s[1] ( V(r) t[1] r[1]))} rel. algebra U[1]-V[1] D3: vyučují předmět P2 {t (1) r(v(r) t[1] = r[1] r[2] = P2 )} rel.algebra V[2=1]{ P2 }[1] D4: vyučují alespoň jeden předmět, ale ne P2 {t (1) s r(v(s) t[1] = s[1] ( V(r) t[1] r[1] r[2] P2 ))} rel. algebra V[1]-((V[2=1]{ P2 }[1] D5: nevyučují předmět P2 31
{t (1) s r(u(s) t[1] = s[1] ( V(r) t[1] r[1] r[2] P2 ))} rel. algebra U[1]-((V[2=1]{ P2 }[1] D6: vyučují jiný předmět než P2 {t (1) r (V(r) t[1] = r[1] r[2] P2 ))} rel. algebra V[2 1]{ P2 }[1] D7: vyučují pouze předmět P2 {t (1) s r(v(s) t[1] = s[1] s[2] = P2 ( V(r) t[1] r[1] r[2] = P2 ))} rel. algebra ((V[2=1]{ P2 }[1])-((V[2 1]{ P2 })[1]) 2.2.4.4 Přepisovací jazyk n-ticového relačního kalkulu Pro přepis dotazu v relačním kalkulu slouží jednoduchý přepisovací jazyk, v němž má dotaz následující syntaxi: seznam_hodnot WHERE formule Seznam hodnot představuje především seznam atributů, spojených n-ticovou proměnnou s danou relací, dále může obsahovat agregační funkce, resp. aritmetické výrazy. Formule se skládá z atomických formulí s unárním predikátem (jména relací s příslušnými n-ticovými proměnnými), atomických formulí s binárním predikátem (porovnávací operátory), logických spojek a kvantifikátorů. Kvantifikátory v relačním kalkulu jsou: Existenční - v přepisovacím jazyku používáme klíčové slovo EXISTS Univerzální - v přepisovacím jazyku používáme klíčové slovo FORALL Příklad: Následující příklady jsou použity z publikace [5]. Mějme následující schéma databáze: KINO (NÁZEV_K, ADRESA) FILM (JMÉNO_F, HEREC, ROK) PROGRAM (NÁZEV_K, JMÉNO_F, DATUM) Veškeré následující příklady budou pracovat s výše uvedeným schématem. Příklad 1: Najděte adresy všech kin. x.adresa where KINO (x) Pro formuli KINO (x) hledáme všechna TRUE ohodnocení proměnné x a z nich bereme komponentu x.adresa V relační algebře jde o projekci KINO [ADRESA] 32
Příklad 2: Najděte herce, kteří hrají ve filmu Černí baroni. film.herec where FILM (film) and film.jméno_f = Černí baroni V relační algebře jde o selekci FILM (JMÉNO_F = Černí baroni ) Příklad 3: Proveďte spojení relací PROGRAM a KINO na rovnost. x.název_k, k.adresa, x.jméno_f, x.datum where PROGRAM (x) and exists k(kino (k) and k.název_k = x.název_k) Příklad: Dotaz s existenčním kvantifikátorem. Ve kterých kinech je možné vidět herce M. Brando. Algoritmus: 1. pro každý řádek p tabulky PROGRAM nalezneme řádky f tabulky FILM, které obsahují stejné jméno filmu. p.jméno_f = f.jméno_f 2. v řádcích f zkontrolujeme, zda f. HEREC = M. Brando 3. v případě nalezení alespoň jednoho takového řádku f splňující podmínky 1 a 2 vložíme p. NÁZEV_K do odpovědi. výraz v NRK: p.název_k where PROGRAM (p) and exists f(film (f) and p.jméno_f = f.jméno_f and f.herec = M. Brando ) Příklad: Dotaz s univerzálním kvantifikátorem. Najdi film, který dávají ve všech kinech, která něco hrají. Algoritmus: 1. zafixujeme řádek p tabulky PROGRAM 2. procházíme tabulku PROGRAM po řádcích x tak, že pro každý právě prohlížený řádek x hledáme další řádek y, pro který platí: x.název_k = y.název_k a dále platí, že p.jméno_f = y.jméno_f 3. opakujeme kroky 1 a 2 do vyčerpání tabulky PROGRAM 33
výraz v NRK: p.jméno_f where PROGRAM(p) and forall x (PROGRAM(x) and exists y (PROGRAM (y) and y.název_k = x.název_k and p.jméno_f = y.jméno_f)) 2.2.4.5 Obecný tvar existenčně kvantifikovaných formulí EXISTS x (R(x) and F (x)) (1) R(x) označuje, že proměnné se hledají v R* F (x) je podmínkou výběru 2.2.4.6 Obecný tvar univerzálně kvantifikovaných formulí FORALL x (R(x) and F (x)) (2) Výrazy (1) a (2) definují omezené kvantifikátory, které se zapisují EXISTS x Є R(G(x)) FORALL x Є R(G(x)) G(x) je formule, která neobsahuje exists a forall. Proměnná x ve formuli G splňující tuto vlastnost se nazývá volná proměnná. Příklady: 1. Zobrazte všechna kina, v nichž hrají všechny filmy s M. Brando. p.název_k where PROGRAM (p) and forall f(film(f) where f.herec = M. Brando and exists q(program(q) and q.název_k = p.název_k and q.jméno_f = f.jméno_f) 2. Najdi průměrné množství dodaných knih do knihoven mn where mn = AVG (DODÁVÁ, MNOŽSTVÍ) 3. Najdi průměrné množství různých množství dodaných knih musíme nejdříve provést projekci relace DODÁVÁ na atributu MNOŽSTVÍ a teprve pak uplatníme agregační funkci mn where mn = AVG (x.množství where DODÁVÁ (x), MNOŽSTVÍ) 4. Najdi průměrné množství dodaných knih pro každou knihovnu x.název_k, mn where DODÁVÁ (x) and mn = AVG (y where DODÁVÁ (y) and x.název_k = y.název_k, MNOŽSTVÍ) 5. Najdi průměr různých množství dodaných knih pro každou knihovnu 34
x.název_k, mn where DODÁVÁ(x) and mn = AVG (y.množství where DODÁVÁ(y) and x.název_k = y.název_k, MNOŽSTVÍ) 6. Vyber knihovny, do kterých bylo dodáno více než 50 knih x.název_k where DODÁVÁ (x) and sum (y where DODÁVÁ (y) and x.název_k = y.název_k, MNOŽSTVÍ) > 50 7. Najdi pro každou knihovnu minimální a maximální počet dodaných knih x.název_k, mi, ma where DODÁVÁ (x) and mi = min (y where DODÁVÁ(y) and y.název_k = x.název_k, MNOŽSTVÍ) and ma = max (z where DODÁVÁ(z) and z.název_k = x.název_k, MNOŽSTVÍ) 8. Najdi knihovny, kde množství do nich dodávaných knih z Čapkova knihkupectví je menší než 20. x.název_k where DODÁVÁ (x) and sum (y where DODÁVÁ (y) and x.název_k = y.název_k and x.jméno_k = "Čapkovo", MNOŽSTVÍ) <20 2.2.4.7 Doménový relační kalkul Nepoužívá n-ticové proměnné, ale jednoduché proměnné. Relace v DRK: R (A : x, B : y, C : z) x, y, z... proměnné obecně: R (A1 : t1,...an : tn ) Obor hodnot proměnných v doménovém relačním kalkulu jsou prvky domén. n-ticový kalkul využívá n-ticové proměnné, doménový kalkul využívá doménové proměnné. Doménové proměnné nejsou strukturovány, neexistují tedy indexové proměnné a indexové konstanty. Predikáty příslušnosti k relaci: n-ticový kalkul...unární predikát R(x) doménový kalkul...n-arní, n závisí na stupni relace 2.2.4.8 Atomické formule doménového relačního kalkulu 1. R(x 1,...x n ) R je jméno relace stupně n, x i, n i 1 35