Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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_1D_2, ..., D_n</m> jsou množiny atomických hodnot označované jako //domény//. //Relace// (databázová) na doménách <m>D_1D_2, ..., D_n</m> je dvojice **R** = (R, R<sup>*</sup>), kde R = R(<m>A_1:D_1A_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ť D1D2, ..., Dn jsou množiny atomických hodnot označované jako //domény//. //Relace// (databázová) na doménách D1D2, ..., Dn je dvojice **R** = (R, R<sup>*</sup>), kde R = R(A1:D1A2: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_1A_2, ..., A_n</m>), třeba STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA). +Zjednodušené se relace zapisuje R(A1A2, ..., 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~~
temata/33-relacni_datovy_model_sql/main.1306694408.txt.gz · Poslední úprava: 2011/05/29 20:40 autor: vagabund
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki