OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:33-relacni_datovy_model_sql:main [2011/05/29 20:40] vagabund |
temata:33-relacni_datovy_model_sql:main [2011/06/02 17:36] (aktuální) vagabund |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ~~ODT~~ | ||
+ | |||
====== Relační datový model a jazyk SQL ====== | ====== Relační datový model a jazyk SQL ====== | ||
===== Relační datový model ===== | ===== Relační datový model ===== | ||
+ | |||
+ | ==== Relační databáze ==== | ||
<box round green 90%|**Názvosloví**> | <box round green 90%|**Názvosloví**> | ||
Řádek 42: | Řádek 46: | ||
<box green round 90%|**Definice**> | <box green round 90%|**Definice**> | ||
- | Nechť <m>D_1, D_2, ..., D_n</m> jsou množiny atomických hodnot označované jako //domény//. //Relace// (databázová) na doménách <m>D_1, D_2, ..., D_n</m> je dvojice **R** = (R, R<sup>*</sup>), kde R = R(<m>A_1:D_1, A_2:D_2, ..., A_n:D_n</m>) je //schéma// relace, kde <m>A_i (A_i \ne A_j, i \ne j)</m> značí jméno atributu definovaného na doméně D<sub>i</sub> a R<sup>*</sup> <m>\subset</m> D<sub>1</sub> x D<sub>2</sub> x ... x D<sub>n</sub> je tělo relace.\\ | + | Nechť D1, D2, ..., Dn jsou množiny atomických hodnot označované jako //domény//. //Relace// (databázová) na doménách D1, D2, ..., Dn je dvojice **R** = (R, R<sup>*</sup>), kde R = R(A1:D1, A2:D2, ..., An:Dn) je //schéma// relace, kde Ai (Ai != Aj, i != j) značí jméno atributu definovaného na doméně D<sub>i</sub> a R<sup>*</sup> \subset D<sub>1</sub> x D<sub>2</sub> x ... x D<sub>n</sub> je tělo relace.\\ |
Počet atributů n relace se označuje //stupeň (řád) relace//, kardinalita těla relace m = |R<sup>*</sup>| se označuje //kardinalita relace//\\ | Počet atributů n relace se označuje //stupeň (řád) relace//, kardinalita těla relace m = |R<sup>*</sup>| se označuje //kardinalita relace//\\ | ||
- | Zjednodušené se relace zapisuje R(<m>A_1, A_2, ..., A_n</m>), třeba STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA). | + | Zjednodušené se relace zapisuje R(A1, A2, ..., An), třeba STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA). |
</box> | </box> | ||
+ | |||
+ | <note tip>Neboli viz příklad</note> | ||
<note tip>Relační databáze - data jsou v tabulkách organizovány v souladu s relačním modelem (relační model - data strukturována na základě relací, tj. tabulek)</note> | <note tip>Relační databáze - data jsou v tabulkách organizovány v souladu s relačním modelem (relační model - data strukturována na základě relací, tj. tabulek)</note> | ||
Řádek 96: | Řádek 102: | ||
</box> | </box> | ||
+ | <box green round 90%|**Definice**> | ||
+ | **Schématem relační databáze** nazýváme dvojici (R, I), kde R = {R1, R2, ..., Rk,} je množina schémat relací a I = {I1, I2, ..., Il} je množina | ||
+ | integritních omezení. Někdy jsou lokální integritní omezení rozdělena mezi jednotlivá schémata, tj. R = {(R1, I1) , (R2, I2), ..., (Rk, Ik)} | ||
+ | </box> | ||
+ | |||
+ | <note tip>Neboli každý sloupce má svoje integritní omezení, tj. omezezení kladená na data (co může obsahovat, kde musí být hodnoty, ...)</note><note important>Pokud data v relaci splňují všechny integritní omezení, potom jsou data konzistentní</note> | ||
+ | |||
+ | ==== Relační Algebra ==== | ||
+ | |||
+ | <box green round 90%|**Definice**> | ||
+ | **Relační algebra** | ||
+ | |||
+ | Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací, která zahrnuje: | ||
+ | * tradiční množinové operace (sjednocení, průnik, rozdíl, součin) | ||
+ | * speciální relační operace, mezi které patří projekce, selekce (restrikce), spojení (přirozené). | ||
+ | </box> | ||
+ | |||
+ | <note important>Tabulka je množina n-tic, proto se každý záznam vyskytuje pouze jednou.</note> | ||
+ | |||
+ | <box green round 90%|**Definice**> | ||
+ | **Operace relační algebry** | ||
+ | |||
+ | //Sjednocením// relací R1 = (R, R1*) a R2 = (R, R2*) se schématem R je relace R1 union R2 = (R, R1* ∪ R2*).\\ | ||
+ | Analogicky pro //průnik// (R1 intersect R2) a //rozdíl// (R1 minus R2).\\ | ||
+ | //Kartézským součinem relací// R1 = (R1, R1*) a R2 = (R2, R2*) je relace R1 times R2 = ( (R1,R2), R1* x R2*).\\ | ||
+ | |||
+ | </box> | ||
+ | |||
+ | <note important>Sjednocení je možné provést pouze pro tabulky se stejnými sloupci. Pokud po sjednocení dostaneme dva a více stejných řádek, bere se jenom jeden.</note> | ||
+ | |||
+ | <box green round 90%|**Definice**> | ||
+ | **Projekce** | ||
+ | Projekce relace R = (R, R*) na atributy X, Y, ..., Z je relace R[X, Y, ..., Z] se schématem (X, Y, ..., Z) a tělem zahrnujícím všechny n-tice t = (x, y, …, z) takové, že v R* existuje n-tice t’ s hodnotou atributu X rovnou x, Y rovnou y, ... Z rovnou z. | ||
+ | </box> | ||
+ | |||
+ | <note tip>Z dané tabulky vybereme jen některé sloupce</note> | ||
+ | |||
+ | <box green round 90%|**Definice**> | ||
+ | **Selekce** | ||
+ | |||
+ | Nechť θ je operátor porovnání dvou hodnot (<, >, <>, =, atd.). θ selekce (restrikce) relace R = (R, R*) na atributech X a Y je relace\\ | ||
+ | R where X θ Y,\\ | ||
+ | která má stejné schéma jako relace R a obsahuje všechny n-tice t ∈ R*, pro které platí x θ y, kde x je hodnota atributu X a y hodnota atributu Y v ntici t. Na místě atributu X, resp. Y může být konstanta. Pak jde o θ selekci na atributu X, resp. Y. | ||
+ | |||
+ | Podle definice máme jenom jednu podmínku. Selekci lze dále rozšířit o spojky and, or, not. | ||
+ | </box> | ||
+ | |||
+ | <note tip>Vybíráme jen některé řádky z tabulky podle dané podmínky</note> | ||
+ | |||
+ | <box green round 90%|**Definice**> | ||
+ | **Přirozené spojení (natural join)** | ||
+ | |||
+ | Nechť R1 = (R1, R1*) je relace se schématem R1(X1,X2,..,Xm,Y1,Y2,...,Yn) a R2 relace se schématem R2(Y1,Y2, ...,Yn, Z1,Z2,...,Zk). Uvažujme složené atributy X=(X1,X2,...,Xm), Y=(Y1,Y2,...,Yn) a Z=(Z1,Z2,...,Zk). Potom přirozené spojení relací R1 a R2 je relace | ||
+ | R1 join R2 se schématem (X, Y, Z) a tělem zahrnujícím všechny n-tice t = (x, y, z) takové, že v R1* existuje n-tice t’ s hodnotou x atributu X a hodnotou y atributu Y a v R2* existuje n-tice t’’ s hodnotou y atributu Y a hodnotou z atributu Z. | ||
+ | </box> | ||
+ | |||
+ | <note tip>Neboli spojujeme podle sloupce se stejným názvem a podle stejné hodnoty</note> | ||
+ | |||
+ | <box blue round 90%|**Příklad**> | ||
+ | **T1** | ||
+ | |||
+ | ^A^B^C^ | ||
+ | |0|a|d| | ||
+ | |1|a|e| | ||
+ | |2|b|f| | ||
+ | |||
+ | **T2** | ||
+ | |||
+ | ^C^D^E^ | ||
+ | |e|1|0| | ||
+ | |d|1|1| | ||
+ | |d|0|1| | ||
+ | |||
+ | **T1 join T2** | ||
+ | ^A^B^C^D^E^ | ||
+ | |0|a|d|1|1| | ||
+ | |0|a|d|0|1| | ||
+ | |1|a|e|1|0| | ||
+ | </box> | ||
+ | |||
+ | <note tip>minimální množina operací relační algebry - sjednocení, rozdíl, kartézský součin, projekce a selekce. Z nich lze vytvořit zbylé operace</note> | ||
+ | |||
+ | <note tip>relačně úplný jazyk - lze vyjádřit alespoň totéž co relačním jazykem</note> | ||
===== Jazyk SQL ===== | ===== Jazyk SQL ===== | ||
Řádek 261: | Řádek 350: | ||
EMBEDED SQL / dynamic SQL?? | EMBEDED SQL / dynamic SQL?? | ||
+ | |||
+ | ===== Potvrzení ===== | ||
+ | |||
+ | <doodle single|33> | ||
+ | ^ OK ^ !!! ^ | ||
+ | </doodle> | ||
+ | |||
+ | {{tag>sgs vagabund IDS relacni_databaze relacni_model sql}} | ||
+ | |||
+ | ~~DISCUSSION~~ |