Databázové systémy Relační algebra.

Slides:



Advertisements
Podobné prezentace
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
Advertisements

Databázové systémy Relační algebra, kalkuly
A5M33IZS – Informační a znalostní systémy Dotazovací jazyk SQL - I.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
Aplikační a programové vybavení
Ing. Monika Šimková. Máme-li data reprezentovat v databázi, jak vybereme jejich strukturu na konceptuální úrovni? Konceptuální modelování analyzuje požadavky.
Databáze.
YDASYS1 Ing. Monika Šimková.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
YDASYS Ing. Monika Šimková.
A5M33IZS – Informační a znalostní systémy Relační databázová technologie.
PRÉCIS OD NESTRUKTUROVANÝCH KLÍČOVÝCH SLOV JAKO DOTAZŮ K STRUKTUROVANÝM DATABÁZÍM JAKO ODPOVĚDÍM Martin Lacina.
Úvod do Teorie množin.
Martin Kirschbaum 4.A,  určitá uspořádaná množina informací (dat) uložená na paměťovém médiu  Databázový program - umožňuje tvořit, editovat,
Relační datový model Základní ideje
1IT Relační datový model
Databáze Jiří Kalousek.
Cvičení 13 Ing. Pavel Bednář
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Analýza informačního systému
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Fakulta životního prostředí Katedra informatiky a geoinformatiky
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Fakulta elektrotechniky a informatiky
Relační databáze.
1IT D OTAZOVACÍ JAZYKY V RELAČNÍCH DATABÁZÍCH Ing. Jiří Šilhán.
Konceptuální návrh databáze
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Informatika pro ekonomy II přednáška 10
SQL – základní pojmy Ing. Roman Danel, Ph.D.
Predikátová logika.
Fakulta elektrotechniky a informatiky
Databázové systémy Přednáška č. 3.
Výroková logika.
Úvod do databázových systémů
Databázové systémy Přednáška č. 4.
Aplikační a programové vybavení
Databázové systémy Tomáš Skopal
Databázové modelování
Databázové systémy Relační model.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Cvičení 02 Relační algebra Ing. Pavel Bednář
Aplikační a programové vybavení
Relace, operace, struktury
Databázové systémy Informatika pro ekonomy, př. 18.
Množiny.
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Databázové systémy SQL Výběr dat.
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
XML data na disku jako databáze Kamil Toman
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
REŠERŠNÍ STRATEGIE Mgr. Anna Vitásková.
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
Databázové systémy Normalizace dat.
Úvod do databází zkrácená verze.
● Databaze je soubor dat,slouží pro popis reálného světa(např.evidence čkolní knihovny..) ● Relační databaze je databáze založená na relačním modelu.
Základy RA RA = matematický základ pro relační modul DBS jazyk SQL Relační DBS = Relační algebra + Relační model Doména = množina hodnot stejného typu/významu.
Význam relací Typy relací Vytvoření relace Nastavení relace Podtypy relace Referenční integrita.
Úvod do databázových systémů
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Relační databázová technologie
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Informatika pro ekonomy přednáška 8
Matematická logika 5. přednáška
Relační model databáze
Databázové systémy Normální formy.
Přednáška 7 SQL – JOIN.
A5M33IZS – Informační a znalostní systémy
Transkript prezentace:

Databázové systémy Relační algebra

Úvod Relační algebra a Relační kalkul – teoretická východiska dotazovacích jazyků Relační algebra relační algebra je nástroj 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 Relační kalkul vychází z predikátové logiky 1.řádu v relačních databázích se vyskytuje ve dvou formách n-maticový relační kalkul doménový relační kalkul

Definice relačního datového modelu Mějme množiny D1,D2...Dn. Z každé vybereme 1 prvek tzn. vytvoříme uspořádanou n-tici. Kartézský součin D1xD2.... x .... Dn je množina všech posloupností. Z hlediska databázového systému se množiny D označují jako množiny hodnot atributů, tvz. domény. Odlišnosti databázové od matematické relace relace je vybavena pomocnou strukturou, které se říká schéma relace, schéma relace se skládá ze jména relace a 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)

Dotazování v relačním modelu Smyslem každé databáze je poskytovat data – ta jsou získávána formulováním dotazů na databázi dotaz je formulován v dotazovacím jazyce dotazovací jazyk musí být natolik silný, aby umožnil získat libovolnou (smysluplnou) podmnožinu dat z relací (tabulek) každý dotazovací jazyk využívá symbolů popisujících schémata relací jako základní konstrukty jazyka

Relační algebra Je to množina operací (unárních, či binárních) na relacích se schématy, jejichž výsledkem je opět relace (a její schéma) pro úplnost budeme k relaci R* vždy uvažovat i její schéma R(A) (název a (typované) atributy), tj. dvojici <R*, R(A)> výsledek operace lze opět použít jako operand jiné operace, tj. takto lze zkonstruovat složitější operaci/dotaz Přejmenování atributů - (unární) R*<ai  bi, aj  bj, ... > = <R* , Rx((A – {ai, aj, ...})  {bi, bj, ...})> pouze se přejmenují atributy schématu, s daty se nic neděje (tj. výsledkem je stejná relace a stejné schéma, pouze příslušné atributy mají jiná jména)

Relační algebra Množinové operace (binární) Sjednocení <R1, R1 (A)>  <R2, R2 (A)> = <R1  R2 , Rx(A)> Průnik <R1, R1 (A)>  <R2, R2 (A)> = <R1  R2 , Rx(A)> Rozdíl <R1, R1 (A)> – <R2, R2 (A)> = <R1 – R2 , Rx(A)> Kartézský součin <R1, R1 (A)>  <R2, R2 (B)> = <R1  R2 , Rx({R1}A{R2}  B)> Sjednocení, průnik a rozdíl vyžadují kompatibilní schémata obou operandů. Kartézský součin má vlastní schéma, složené z atributů obou schémat. Pokud budeme chtít výsledek uložit použijeme konstrukci NazevVysledku := <operace na relacích> Pokud je schéma jasné z kontextu, budeme používat zjednodušené značení R1 operace R2

Příklad – množinové operace FILM(JMENO_FILMU, JMENO_HERCE) AMERICKE_FILMY = {(‘Titanic’, ‘DiCaprio’), (‘Titanic’, ‘Winslet’), (‘Top Gun’, ‘Cruise’)} NOVE_FILMY = {(‘Titanic’, ‘DiCaprio’), (‘Titanic’, ‘Winslet’), (‘Samotáři’, ‘Macháček’)} CESKE_FILMY = {(‘Pelíšky’, ‘Donutil’), (‘Samotáři’, ‘Macháček’)} Dotazy: VSECHNY_FILMY := AMERICKE_FILMY  CESKE_FILMY = {(‘Titanic’, ‘DiCaprio’), (‘Titanic’, ‘Winslet’), (‘Top Gun’, ‘Cruise’), (‘Pelíšky’, ‘Donutil’), (‘Samotáři’, ‘Macháček’)} STARE_AMERICKE_A_CESKE_FILMY := (AMERICKE_FILMY  CESKE_FILMY) – NOVE_FILMY ={(‘Top Gun’, ‘Cruise’), (‘Pelíšky’, ‘Donutil’)} NOVE_CESKE_FILMY := NOVE_FILMY  CESKE_FILMY = {(‘Samotáři’, ‘Macháček’)}

Relační algebra Projekce umožňuje potlačit atributy v relaci, umožňuje přejít z relace o n sloupcích na relaci o p sloupcích, kde p<n, (může obsahovat i méně řádků, protože duplicitní se nesmí vyskytovat). Unární operace <R*[C], R(A)> = <{u[C]  R*}, R(C)>, kde C  A u[C] je prvek relace zbavený hodnot atributů A – C případné duplicitní prvky jsou odstraněny

Relační algebra Selekce (Restrikce) - vybrání nových řádků z původní relace pomocí logických spojek Unární operace <R*(), R(A)> = <{u | u  R* a (u)}, R(A)> výběr těch prvků u relace R*, které splňují logickou podmínku (u) podmínka je zadána Boolským výrazem (tj. pomocí spojek and, or, not)

Relační algebra Spojení (join) - spojení dvou relací vytvoří třetí relaci, výsledná relace obsahuje všechny kombinace které vyhovují dané podmínce. Podmínka vyjadřuje: vztah mezi dvěma relacemi, druhy spojení rovnost, nerovnost, inkluze (spojení s tím rozdílem že do výsledné relace se přidají i nespojené řádky z první (ev. z druhé relace, ev. z obou relací), příslušné atributy, které nejsou vyplněny, nabývají hodnoty NULL. Binární operace <R*, R(A)><S*, S(B)> = <{u | u[A]  R* a u[B]S*},Rx(A  B)> spojení prvků relace přes stejné hodnoty atributů sdílených mezi A a B pokud A  B = , přirozené spojení je vlastně kartézský součin (spojuje se přes prázdnou množinu, tj. libovolně – „všechno se vším“) lze vyjádřit pomocí kartézského součinu, selekce a projekce

Příklad – selekce, projekce, přir.spojení FILM(JMENO_FILMU, JMENO_HERCE) HEREC(JMENO_HERCE, ROK_NAROZENI) FILMY = {(‘Titanic’, ‘DiCaprio’), (‘Titanic’, ‘Winslet’), (‘Top Gun’, ‘Cruise’)} HERCI = {(‘DiCaprio’,1974), (‘Winslet’,1975), (‘Cruise’, 1962), (‘Jolie’, 1975)} Projekce: HERECKE_ROCNIKY := FILMY_HERCI[ROK_NAROZENI] = {(1974), (1975), (1962)} Selekce: MLADI_HERCI := HERCI(ROK_NAROZENI > 1970) [JMENO_HERCE] = {(‘DiCaprio’), (‘Winslet’), (‘Jolie’)} Spojení (přirozené): FILMY_S_HERCI := FILMY  HERCI = {(‘Titanic’, ‘DiCaprio’, 1974), (‘Titanic’, ‘Winslet’, 1975), (‘Top Gun’, ‘Cruise’, 1962)}

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ázána instance. Jinak mazání resp. aktualizace v nadřazeném entitním typu je zakázáno. CASCADE způsobí aktualizace resp. mazání v podřízeném ent. typu, resp. mazání v typu nadřazeném. Tento typ může způsobit kaskádovité mazání velkého počtu instancí. SET NULL - nastavení cizího klíče na NULL (nejde pokud je to zároveň PK)

Vnější spojení Dosud uvedené operace spojení nazýváme vnitřní spojení (inner join) Vnější spojení využívá doplnění nulových hodnot k těm prvkům, které nebylo možno „normálně“ spojit (tj. neobjevily se ve vnitřním spojení): Levé vnější spojení (left outer join) R L S = (R  S)  (R  (NULL, NULL, ...)) Pravé vnější spojení (right outer join) R R S = (R  S)  ((NULL, NULL, ...)  S) kde R, resp. S obsahují n-tice nespojitelné s S, resp. R Plné vnější spojení (full outer join) R F S = (R L S)  (R R S)

Příklad – všechny typy spojení tabulka Lety tabulka Letadla Let Společnost Destinace Počet cestujících OK251 CSA New York 276 LH438 Lufthansa Stuttgart 68 OK012 Milano 37 AC906 Air Canada Torronto 116 KL1245 KLM Amsterdam 130 Letadlo Kapacita Boeing 717 106 Airbus A380 555 Airbus A350 253 Dotaz: Kterými letadly mohou letět všichni cestující v daném letu tak, aby počet neobsazených míst v letadle byl menší než 200? Vnitřní spojení – chceme právě ty lety a ta letadla, která vyhovují danému kritériu: Lety [Lety.PocetCestujich  Letadla.Kapacita AND Lety.PocetCestujich > Letadla.Kapacita - 200] Letadla Levé/pravé/plné vnější spojení – chceme vedle letů-letadel specifikovaných vnitřním spojením taky ty lety a ta letadla, která danému kritériu nevyhovují ani v jednom případě. Let Společnost Destinace Počet cest. Letadlo Kapacita OK251 CSA New York 276 NULL LH438 Lufthansa Stuttgart 68 Boeing 717 106 Airbus A350 253 OK012 Milano 37 AC906 Air Canada Torronto 116 KL1245 KL Amsterdam 130 Airbus A380 555 levé vnější spojení plné vnější spojení vnitřní spojení pravé vnější spojení levé/pravé polospojení (bez prvního a posledního řádku + po odstranění duplicit)

Vyhodnocení dotazu v relační algebře Logické pořadí vyhodnocení operací v dotazu: pro vyhodnocení operace se musí nejprve vyhodnotit její operandy – vede to k průchodu syntaktickým stromem do hloubky např. (...((S1 op1 S2) op2 (op4 S3)) op5 S4 op6 S5) konstrukce stromu (parsování dotazu) se řídí prioritou operací, závorkami, případně konvencí levé/pravé asociativity Precedence operací (priorita) projekce R[] (nejvyšší) selekce R() kart. součin  spojení, dělení ,  rozdíl – sjednocení, průnik ,  (nejnižší)

Příklad – vyhodnocení dotazu Do kterých destinací může přiletět Boeing? (tak, aby se cestující daného letu vešli do letadla) (Lety[Destinace, Pocet_cestujicich] [Pocet_cestujicich <= Kapacita] (Letadla(Letadlo = ‘Boeing*’)[Kapacita]))[Destinace] Destinace Stuttgart Milano projekce [Destinace,Pocet_cestujicich] selekce (Letadlo = ‘Boeing*’) projekce [Kapacita] spojení [Pocet_cestujicich <= Kapacita] projekce [Destinace] Destinace Počet cestujících New York 276 Stuttgart 68 Milano 37 Torronto 116 Amsterdam 130 Destinace Počet cestujících Kapacita Stuttgart 68 106 Milano 37 Kapacita 106 Letadlo Kapacita Boeing 717 106 Let Společnost Destinace Počet cestujících OK251 CSA New York 276 LH438 Lufthansa Stuttgart 68 OK012 Milano 37 AC906 Air Canada Torronto 116 KL1245 KLM Amsterdam 130 Letadlo Kapacita Boeing 717 106 Airbus A380 555 Airbus A350 253

Ekvivalentní výrazy Tentýž dotaz lze vyjádřit různými výrazy: nahradíme-li „redundantní“ operace základními (např. dělení, přirozené spojení) využijeme-li komutativity, distributivity a asociativity (některých) operací Selekce: kaskáda selekcí: (...((R(1))(2))...)(n) ≡ R(1  2  ...  n) komutativita selekcí: (R(1))(2) ≡ (R(2))(1) Projekce: kaskáda projekcí: (...(R[A1])[A2])...)[An] ≡ R[An], kde An An-1  ...  A2  A1 Spojení a kart. součin komutativita: R  S ≡ S  R, R [] S ≡ S [] R, atd. asociativita: R  (S  T) ≡ (R  S)  T, R [] (S [] T) ≡ (R [] S) [] T, atd. kombinace, např: R [] (S [] T) ≡ (R [] T) [] S

Příklad – dělení relací Které společnosti létají do všech destinací? Lety[Společnost, Destinace]  Lety[Destinace] Společnost Lufthansa Společnost Destinace CSA New York Lufthansa Stuttgart Milano Torronto Air Canada KLM Amsterdam dělení Destinace New York Stuttgart Milano Torronto Amsterdam Let Společnost Destinace Počet cestujících OK251 CSA New York 276 LH438 Lufthansa Stuttgart 68 OK012 Milano 37 LH123 Torronto 132 AC906 Air Canada 116 69 56 LH19 62 KL24 KLM 115 LH52 Amsterdam 164 KL1245 130 projekce [Destinace] projekce [Společnost, Destinace]

Relační kalkul Využití aparátu predikátové logiky 1. řádu pro dotazování rozšíření o „databázové“ predikáty, jejichž dvojí forma definuje doménový kalkul (DRK) – pracuje s daty na úrovni atributů n-ticový kalkul (NRK) – pracuje s daty na úrovni n-tic (prvků relace/řádků) výsledkem dotazu v DRK / NRK je opět relace (a její schéma). Formulací kalkulu se vlastně provádí logická analýza dotazu. Prvky jazyka: termy – proměnné a konstanty predikátové symboly – jednak standardní binární predikáty {<, >, =, , ≤, }, jednak predikáty rozlišující DRK a NRK formule atomické – R(t1, t2, ...), kde R predikátový symbol a ti je term složené – výrazy, kterými lze kombinovat atomické/složené formule logickými spojkami ,,,, kvantifikátory:  (existenční - EXISTS), (všeobecný-FORALL)

Příklad - relační kalkul Mějme relace: KNIHKUPEC(JMENO_K,ADRESA...) KNIHOVNA(NAZEV_K,...) DODAVA(JMENO_K,NAZEV_K,...) Najdi jména a adresy knihkupců, kteří dodávají knihy do všech knihoven. Zapsáno v n-ticovém relačním kalkulu: x.JMENO_K, x.ADRESA where KHIHKUPEC(X) and forall y(KNIHOVNA(y) implies exists z(DODAVA(z) z.JMENO_K=x.JMENO_K and z.NAZEV_K=y.NAZEV_K)) Zapsáno pomocí existenčního kvantifikátoru: x.JMENO_K, x.ADRESA where KNIHKUPEC(x) and not exits y(KNIHOVNA(y) imlies not exists z(DODAVA(z) z.JMENO_K=x.JMENO_K and z.NAZEV_K=y.NAZEV_K))

Dotazovací jazyky Dva typy: Navigační (procedurální), 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. Specifikační (neprocedurální - deklarativní) - požadavky na výběr se zadávají jako prediká, 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. Dotazovací jazyk, kterým lze vyjádřit všechny konstrukce relační algebry (tj. všechny dotaz, které lze popsat relační algebrou) se nazývá relačně úplný.