Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "Databázové systémy Relační algebra."— Transkript prezentace:

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

2 Ú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

3 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)

4 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

5 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)

6 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

7 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’)}

8 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

9 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)

10 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

11 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)}

12 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)

13 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)

14 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)

15 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žší)

16 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

17 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

18 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]

19 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)

20 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))

21 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ý.


Stáhnout ppt "Databázové systémy Relační algebra."

Podobné prezentace


Reklamy Google