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/03/29 12:27]
sgs
temata:33-relacni_datovy_model_sql:main [2011/06/02 17:36] (aktuální)
vagabund
Řádek 1: Řádek 1:
-=====Relační datový model a jazyk SQL=====+~~ODT~~
  
-====Jazyk SQL====+====== Relační datový model a jazyk SQL ====== 
 + 
 +===== Relační datový model ===== 
 + 
 +==== Relační databáze ==== 
 + 
 +<box round green 90%|**Názvosloví**> 
 + 
 +  * relace = databázová tabulka 
 +  * atributy = sloupce tabulky 
 +  * hodnota atributu = hodnota n-tice 
 +  * obor hodnot atributu = doména (v praxi se doméně říká též datový typ) 
 +  * aktivní doména = aktuálně se nacházející hodnoty z domény (to, co je aktuálně v tabulce) 
 +  * n-tice = řádky 
 +  * "tabulka STUDENT se sloupci JMENO, PRIJMENI, ..." = "relace STUDENT s atributy JMENO, PRIJMENI, ..." 
 + 
 +</box> 
 + 
 +<box round blue 90%|**Příklad**> 
 + 
 +Nechť máme tabulku STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA) asi takto: 
 + 
 +^LOGIN^JMENO^PRIJMENI^ADRESA^ 
 +|xcerny00|Petr|Černý|Brněnská 15 Vyškov| 
 +|xnovak00|Jan|Novák|Cejl 9 Brno| 
 +|xnovak01|Pavel|Novák|Cejl 9 Brno| 
 + 
 +**domény atributů**\\ 
 +D<sub>LOGIN</sub> = {xnovak00, xnovak01, xbanan01, xchleba11, ...}\\ 
 +D<sub>JMENO</sub> = {Petr, Pavel, Josef, ...}\\ 
 +D<sub>PRIJMENI</sub> = {Grupa, Sadlo, Zendulka, ...}\\ 
 +D<sub>ADRESA</sub> = {Brněnská 15 Vyškov, Cejl 9 Brno, ...}\\ 
 + 
 +**relace = tabulka**\\ 
 +R<sub>STUDENT</sub> <m>\subset</m> D<sub>LOGIN</sub> x D<sub>JMENO</sub> x D<sub>PRIJMENI</sub> x D<sub>ADRESA</sub>\\ 
 +\\ 
 +neboli podmnožina kartézského součinu jednotlivých domén\\ 
 + 
 +  * schéma tabulky - záhlaví tabulky 
 +  * tělo tabulky - její obsah,tj. řádky, tj. n-tice 
 +  * domény mohou obsahovat pouze atomické hodnoty (vícehodnotové se převádí na skalární redundancí zbylých sloupců) 
 + 
 +</box> 
 + 
 +<box green round 90%|**Definice**> 
 +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//\\ 
 + 
 +Zjednodušené se relace zapisuje R(A1, A2, ..., An), třeba STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA).  
 +</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> 
 + 
 + 
 +<box green round 90%|**Definice**> 
 +Integritní omezení = omezení kladená na data 
 +  * obecná omezení - musí platit vždy bez ohledu na aplikaci (např. PK, FK) 
 +  * specifiká omezení - závislá na aplikace (maximální délka řetězce, maximální hodnota, ...) 
 +</box> 
 + 
 +<box green round 90%|**Definice**> 
 +**Kandidátní klíč (candidate key)** 
 + 
 +Atribut CK relace R se nazývá kandidátním klíčem, když splňuje tyto dvě časově nezávislé vlastnosti: 
 +  * Hodnoty atributu CK v relaci R jsou unikátní (jednoznačné), tj. neexistují žádné dvě n-tice relace se stejnou hodnotou tohoto atributu. 
 +  * Atribut CK je vzhledem k jednoznačnosti hodnot v R minimální (neredukovatelný), tj. je-li CK složeným atributem, nelze vypustit z něho žádnou složku, aniž by přestala být splněna unikátnost hodnot. 
 +</box> 
 + 
 +<note tip>Hodnota atributu CK je unikátná, to zn., že se prvek z dané domény vyskytuje nejvýše jednou</note> 
 + 
 +<box green round 90%|**Definice**> 
 +**Primární klíč (primary key)** 
 + 
 +//Primárním// klíčem je jeden z kandidátních klíčů (vybraný), zbývající kandidátní klíče se nazývají //alternativní// (někdy také sekundární). 
 +</box> 
 + 
 +<box green round 90%|**Definice**> 
 +**Pravidlo integrity entit** 
 + 
 +U žádné složky primárního klíče nesmí chybět hodnota. 
 +</box> 
 + 
 +<box green round 90%|**Definice**> 
 +**Cizí klíč (foreign key)** 
 + 
 +Atribut FK relace R2 se nazývá cizí klíč, právě když splňuje tyto časově nezávislé vlastnosti: 
 +  * Každá hodnota FK je buď plně zadaná nebo plně nezadaná. 
 +  * Existuje relace R1 s kandidátním klíčem CK takovým, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1 
 +</box> 
 + 
 +<note tip>Neboli hodnota je hodnota nebo NULL, za druhé pro každou hodnota FK musí existovat příslušní PK. Jinak FK vytváří logické vazby mezi tabulkami/relacemi</note> 
 + 
 +<box green round 90%|**Definice**> 
 +**Pravidlo referenční integrity** 
 + 
 +Relační databáze nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče. 
 +</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 =====
 **SQL = structured query language**, je standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích **SQL = structured query language**, je standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích
  
Řádek 165: Řá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.1301394423.txt.gz · Poslední úprava: 2011/03/29 12:27 autor: sgs
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki