Obsah

Export page to Open Document format

Relační datový model a jazyk SQL

Relační datový model

Relační databáze

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, …“

Příklad

Nechť máme tabulku STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA) asi takto:

LOGINJMENOPRIJMENIADRESA
xcerny00PetrČernýBrněnská 15 Vyškov
xnovak00JanNovákCejl 9 Brno
xnovak01PavelNovákCejl 9 Brno

domény atributů
DLOGIN = {xnovak00, xnovak01, xbanan01, xchleba11, …}
DJMENO = {Petr, Pavel, Josef, …}
DPRIJMENI = {Grupa, Sadlo, Zendulka, …}
DADRESA = {Brněnská 15 Vyškov, Cejl 9 Brno, …}

relace = tabulka
RSTUDENT \subset DLOGIN x DJMENO x DPRIJMENI x DADRESA

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

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*), 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ě Di a R* \subset D1 x D2 x … x Dn je tělo relace.

Počet atributů n relace se označuje stupeň (řád) relace, kardinalita těla relace m = |R*| se označuje kardinalita relace

Zjednodušené se relace zapisuje R(A1, A2, …, An), třeba STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA).

Neboli viz příklad

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)

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, …)

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.

Hodnota atributu CK je unikátná, to zn., že se prvek z dané domény vyskytuje nejvýše jednou

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í).

Definice

Pravidlo integrity entit

U žádné složky primárního klíče nesmí chybět hodnota.

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

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

Definice

Pravidlo referenční integrity

Relační databáze nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.

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

Neboli každý sloupce má svoje integritní omezení, tj. omezezení kladená na data (co může obsahovat, kde musí být hodnoty, …)

Pokud data v relaci splňují všechny integritní omezení, potom jsou data konzistentní

Relační Algebra

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é).

Tabulka je množina n-tic, proto se každý záznam vyskytuje pouze jednou.

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*).

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.

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.

Z dané tabulky vybereme jen některé sloupce

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.

Vybíráme jen některé řádky z tabulky podle dané podmínky

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.

Neboli spojujeme podle sloupce se stejným názvem a podle stejné hodnoty

Příklad

T1
ABC
0ad
1ae
2bf

T2

CDE
e10
d11
d01

T1 join T2

ABCDE
0ad11
0ad01
1ae10

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

relačně úplný jazyk - lze vyjádřit alespoň totéž co relačním jazykem

Jazyk SQL

SQL = structured query language, je standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích

Příkazy e mohou více či méně lišit pro konkrétní databázi

SQL příkazy se dělí na čtyři základní skupiny:

Příkazy pro definici dat

Lze označit jako DDL – Data Definition Language

CREATE - slouží pro vytváření nových objektů

- například: tabulku, index, pohled, proceduru

Vytvoření pohledu

CREATE VIEW <nazev pohledu>
AS
<SELECT prikaz>

Vytvoření indexu

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC]
[,...n])

ALTER - slouží pro upravení objektů

DROP - pro smazání objektů

Příkazy pro manipulaci s daty

Slouží pro manipulaci s daty.

DELETE - maže data z tabulky

DELETE from users where (age < 13)

UPDATE - aktualizuje data

UPDATE users set city = 'Brno', wtf = 'FIT' where (surname = 'Novák')

INSERT - vkládáme nová data

INSERT into users (name, surname, age) values ('Jiri', 'Janda', 22)

SELECT - nejčastější příkaz

Transakce a prava jsme prakticky neprobírali.

Spojování tabulek - operace join

Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).

Vnitřní spojení - Nejjednodušší variantou je tzv. INNER JOIN (pozn. INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis). Ten odpovídá kartézskému součinu tabulek a aplikaci predikátu na tento součin.

JOIN) je zvláštním případem vnitřního spojování, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Pro nemožnost konkrétněji definovat ve spojovacích tabulkách, ale pouze strukturou, není tento typ tolik používán.

Vnější spojení - Vnější spojování (OUTER JOIN) generuje výstupní množinu omezenou o spojovací podmínky podobně jako vnitřní spojování, pokud však není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu vnějšího spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin. Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.

Částečné vnější spojování - Pro částečné vnější spojování jsou definována klíčová slova LEFT a RIGHT, která definují, která vstupní množina má zahrnuté všechny řádky v množině výstupní, tj. která vstupní množina není doplňována o NULL hodnoty

Lze použít i FULL OUTER JOIN.

SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení

Databázové pohledy

Pohled je virtuální databázová struktura, která může obsahovat data z nula až více tabulek.

V prohlížeči máte záložky, na ploše zástupce a v databázi? V databázi jsou pohledy. Z pohledů lze především vybírat data (k čemuž slouží nejčastěji), a někdy do nich lze i data vkládat. Databázové systémy by se bez pohledů obešly - podobně, jako byste se na ploše obešli bez zástupců nebo v prohlížeči bez záložek. Ale práce s nimi může být mnohem pohodlnější.

· *Pohledy mohou obsahovat výrazy (jako jsou vestavěné funkce MySQL nebo uživatelsky definované funkce).

Pohledy s klauzulemi DISTINCT, GROUP BY, HAVING, s agregačními funkcemi a spojující několik tabulek, umožňují jen čtení.

create view vwPracovnici as select * from pracovnici;

- Od tohoto okamžiku můžete pohled použít jako tabulku, ve smyslu:

select * from vwPracovnici;
create view vwPrumernyVek as select avg(vek) as prumer from pracovnici;

- Vrátí průměrný věk (výsledek bude obsahovat vždy jen jeden řádek). Neboli pohled může obsahovat agregační funkci.

Používáme pohledy, pokud

Procedury a triggery

Procedura - Uložená procedura je sada příkazů SQL, které jsou:

Procedury mohou dělat to, co normální příkazy:

Příklad:

create procedure sp_vratradky (od int, do int)
begin
select * from software where id between od and do;
end

A zavolat pomocí příkazu:

call sp_vratradky 10, 20)

Triggery - Trigger je uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce, nebo taky pouze ten spoustec, ktery ma navazanou uálost, a poté proceduru.

create trigger trSaveRows
before delete
on bezpecna
for each row
begin
insert into bezpecna_zaloha(id, jmeno, plat, cas_odstraneni,
uzivatel)
values (old.id, old.jmeno, old.plat, now(), user());
end;

EMBEDED SQL / dynamic SQL??

Potvrzení

33
Celé jménoOK!!!
Díky za materiály2014-06-13 00:05:26 
jozef 2018-05-28 12:19:40
a 2018-06-12 21:15:07
'SELECT * FROM users; 2019-05-26 18:11:52
weird 2021-06-13 19:04:38
 14