n-ticový (řádkový) relační kalkul

37
07/04/22 Databázové systémy UIN010 N-ticový (řádkový) N-ticový (řádkový) relační kalkul relační kalkul Hodnoty proměnných n-tice relací (řádky) Konstanty hodnoty atributů Unární funkční symboly atributová jména Predikátové symboly jména relací Termy konstanty, proměnné, indexované n-tice x[A] Atomické formule P(x) – rozsahové formule, dále a b, kde a, b jsou indexované n-tice Formule jako výše, ale s využitím omezených kvantifikátorů

Upload: raja

Post on 26-Jan-2016

41 views

Category:

Documents


0 download

DESCRIPTION

N-ticový (řádkový) relační kalkul. Hodnoty proměnných n-tice relací (řádky) Konstanty hodnoty atributů Unární funkční symboly atributová jména Predikátové symboly jména relací. Termy konstanty, proměnné, indexované n-tice x[A] Atomické formule - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

N-ticový (řádkový) relační kalkulN-ticový (řádkový) relační kalkulN-ticový (řádkový) relační kalkulN-ticový (řádkový) relační kalkulHodnoty proměnných

n-tice relací (řádky)Konstanty

hodnoty atributůUnární funkční symboly

atributová jménaPredikátové symboly

jména relací

Termykonstanty, proměnné, indexované n-tice x[A]

Atomické formuleP(x) – rozsahové formule, dále a b, kde a, b jsou indexované n-tice

Formulejako výše, ale s využitím omezených kvantifikátorů

Page 2: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Tvar zápisu v NRKTvar zápisu v NRKTvar zápisu v NRKTvar zápisu v NRK

{(t1,…tk): P1(r1) & … Pn(rn) & V(r1,…rn)}, kde

• k n 1

• Pi(ri) jsou rozsahové formule pro právě všechny volné proměnné formule V

• V neobsahuje žádné rozsahové formule

• Tj jsou proměnné nebo indexové proměnné pokrývající všechny volné proměnné formule V

Page 3: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Příklady v NRKPříklady v NRKPříklady v NRKPříklady v NRKPříjmení všech učitelů

{(t[PŘ]): U(t)}

Učitelé katedry algebry

{(t[KU], t[PŘ], t[KA]): U(t) & t[KA] = “Algebra”}

Příjmení učitelů katedry algebry

{(t[PŘ]): U(t) & t[KA] = “Algebra”}

Názvy vyučovaných předmětů

{(t[NP]): P(t) & R(u)(t[KP] = u[KP])}

Učitelé, kteří nic neučí

{(t[KU],t[PŘ],t[KA]) : U(t)R(u)(t[KU]=u[KU])}

Page 4: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Příklady v NRKPříklady v NRKPříklady v NRKPříklady v NRKPředměty vyučované KSI i KSVI

{(t[KP]) : R(t) & R(u)(t[KP]=u[KP]) & U(x)(t[KU]=x[KU] & x[KA]='KSI') &U(y)(u[KU]=y[KU] & y[KA]='KSVI')}

Kódy učitelů, kteří učí každý den rozvrhu

{(t[KU]) : R(t) &R(u)R(v) (v[DT]=u[DT] & t[KU]=v[KU])}

Kódy učitelů, kteří učí každý den, kdy učí Novák (kód 358)

{(t[KU]) : R(t) &R(u)R(v) (u[KU]=358 v[DT]=u[DT] & t[KU]=v[KU])}

Zaměstnanci s platem vyšším než plat jejich vedoucího

{(t[ČZ]) : ZAM(t) & ZAM(u)(t[ČV]=u[ČZ] & t[Plat]>u[Plat])}

Page 5: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Doménový relační kalkulDoménový relační kalkulDoménový relační kalkulDoménový relační kalkulRozdíly oproti NRK:

• proměnné nemají za hodnoty n-tice, ale jednotlivé prvky z domén, tj. jednoduché hodnoty atributů

• nepoužívají se rozsahové formule, ale tzv. modelové predikáty, kde predikátový symbol odpovídá vždy nějaké relaci/tabulce a umístěním proměnné v příslušné pozici „deklarujeme“ její typ

Page 6: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Příklady v DRKPříklady v DRKPříklady v DRKPříklady v DRKUčitelé katedry algebry

{(r,s): t U(KU:r, PŘ:s, KA:t) & t='Algebra'}

Příjmení učitelů katedry algebry

{(s): U(PŘ:s, KA:'Algebra') }

Názvy vyučovaných předmětů

{(n): k(P(KP:k, NP:n) & R(KP:k))}

Zaměstnanci s platem vyšším než plat jejich vedoucího

{(z): p č (ZAM(ČZ:z,Plat:p,ČV:č) & q ZAM(ČZ:č, Plat:q) & p>q))}

Učitelé, kteří nic neučí {(r,s,t) : U(KU:r,PŘ:s,KA:t)&R(KU:r)}

Page 7: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Příklady v DRKPříklady v DRKPříklady v DRKPříklady v DRKPředměty vyučované KSI i KSVI

{(k): u(R(KP:k,KU:u) & U(KU:u,KA:'KSI')) & v(R(KP:k,KU:v) & U(KU:v,KA:'KSVI')) }

Kódy učitelů, kteří učí každý den rozvrhu

{(k): dR(DT:d) R(KU:k,DT:d))}

Kódy učitelů, kteří učí každý den, kdy učí Novák (kód 358)

{(k):dR(KU:358, DT:d) R(KU:k,DT:d))}

Page 8: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PřipomenutíPřipomenutíPřipomenutíPřipomenutí

Systém řízení bází dat (SŘBD)

- umožňuje definovat a udržovat data v databázi

• jazyk pro definici dat (JDD)

– běžné typy dat (viz. programovací jazyku) + možnost vytváření složitějších struktur

– využívá typy dat vycházející z databázového modelu

• jazyk pro manipulaci dat (JMD)

– konstrukty pro vkládání, odstraňování a modifikaci dat

– prostředky pro tvorbu dotazů (obvykle označovány jako dotazovací jazyky)

DBS = databáze + SŘBD

Page 9: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Jazyk SQLJazyk SQLJazyk SQLJazyk SQL• neprocedurální jazyk (popisuje co požadujeme a nikoli jak to získat)

• je něčím více než pouhým dotazovacím jazykem

Bude nás zajímat:

- definice dat v SQL

- manipulace dat v SQL

- integritní omezení v SQL

- pohledy

- systémový katalog

- přístupová práva

- relační úplnost SQL

Page 10: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Definice dat v SQLDefinice dat v SQLDefinice dat v SQLDefinice dat v SQLDeklarace relačního datového typu odpovídá vlastně popisu dvourozměrné tabulky s označenými sloupci.

Definice schématu

CREATE SCHEMA

Příkazy pro práci se schématy

CREATE TABLEALTER TABLE DROP TABLE

Page 11: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Definice dat v SQLDefinice dat v SQLDefinice dat v SQLDefinice dat v SQLCREATE TABLE

- definujeme seznam jmen sloupců a odpovídajících typů dat

CREATE TABLE Filmy

(k_filmu CHAR(4) NOT NULL

název_f CHAR(40) NOT NULL rok_v NUMBER NOT NULL

režisér CHAR(20));

Po vyvolání tohoto příkazu se vytvoří prázdná tabulka Filmy a schéma se zaznamená do tzv. systémového katalogu.

Page 12: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Typy dat v SQL (SQL92)Typy dat v SQL (SQL92)Typy dat v SQL (SQL92)Typy dat v SQL (SQL92)• datové typy numerické, znakové řetězce, bitové řetězce, temporální

data a časové intervaly

Numerické typy

INTEGER, SMALLINT, NUMERIC, DECIMAL

FLOAT, REAL, DOUBLE PRECISION

Znakové řetězce

CHARACTER (CHAR), CHARACTER VARYING (VARCHAR)

Temporální data

DATE (rrrr-mm-dd)

Integritní omezení

NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

Page 13: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Definice dat v SQLDefinice dat v SQLDefinice dat v SQLDefinice dat v SQLALTER TABLE

- příkaz umožňující změnu již vytvořené tabulkyADD, DROP, ALTER

ALTER TABLE Filmy ADD Herec CHAR(40)

DROP TABLE

- příkaz pro odstranění tabulky z databázeCASCADE, RESTRICT

DROP TABLE Filmy CASCADE

CREATE SCHEMA

- pro definici databázového schématu- je obvykle následován definicí tabulek, IO, práv přístupu atd.

CREATE SCHEMA Půjčovna_filmů

Page 14: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Indexy v SQLIndexy v SQLIndexy v SQLIndexy v SQL= struktury umožňující rychlejší přístup k řádkům tabulek při zpracování

uživatelského požadavku

- index lze definovat pro jeden či kombinaci sloupců

- pro schéma jedné tabulky lze definovat libovolné množství indexů

- pouze jeden je definován jako CLUSTER, podle něj jsou data uspořádána (i fyzicky na disku)

CREATE [UNIQUE] INDEX jméno_indexu

ON jméno_tabulky (jméno_atr1 [uspořádání][, jméno_atr2 [uspořádání]] …) [CLUSTER]

CREATE INDEX Prvni ON Filmy (k_filmu) DESC CLUSTER

DROP INDEX Prvni

Page 15: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PříkladPříkladPříkladPříkladCREATE TABLE Rezervace

(R_nazev_f VARCHAR(20) NOT NULL,

R_rod_c NUMBER NOT NULL,

R_datum_rez DATE NOT NULL,

PRIMARY KEY (R_nazev_f, R_rod_c),

FOREIGN KEY (R_nazev_f) REFERENCES Filmy,

FOREIGN KEY (R_rod_c) REFERENCES Zakaznici);

Integritní omezeníNOT NULL – test na neprázdnostUNIQUE – test na jedinečnostCHECK – test (sloupce či tabulky) na zvolenou podmínkuDEFAULT – defaultní hodnota pro daný sloupecPRIMARY KEY, FOREIGN KEY – definice prim. a ciz. klíčů

Page 16: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Manipulace dat v SQLManipulace dat v SQLManipulace dat v SQLManipulace dat v SQL• příkazy pro výběr dat (SELECT)• příkazy aktualizační (INSERT, DELETE, UPDATE)• další speciální příkazy

Příkaz SELECT- základním konstruktem pro výběr dat je SELECT-FROM-WHERE blok

• klauzule SELECT – obsahuje seznam sloupců vytvářejících schéma tabulky

• klauzule FROM – obsahuje seznam tabulek, nad kterými je dotaz definován

• klauzule WHERE – obsahuje podmínku, kterou musí splňovat vyhledávaná data

- neeliminuje z výsledku duplicitní hodnoty! (ALL, DISTINCT)

SELECT [{DISTINCT|ALL}][{*|jméno_atr1[,jméno_atr2]…}|]FROM jméno_rel1[, jméno_rel2] …[WHERE podmínka][ORDER BY specifikace_řazení]

Page 17: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PříkladyPříkladyPříkladyPříkladyNázvy kin

SELECT nazev_kFROM Kina;

Názvy kin bez duplicity

SELECT DISTINCT nazev_kFROM Kina;

Dvojice jaké filmy, které kino promítá?

SELECT DISTINCT k_filmu, k_kina FROM ProgramORDER BY k_filmu ASC;

Všechny informace o promítáních po 5.4.2002

SELECT *FROM ProgramWHERE datum_prom > ‘5.4.2002’;

Page 18: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PříkladyPříkladyPříkladyPříkladyVšechny informace o promítáních od 1.4.2002 do 5.4.2002

SELECT *FROM ProgramWHERE datum BETWEEN ‘1.4.2002’ AND ‘5.4.2002’;

Názvy filmů, které jsou promítány

SELECT DISTINCT nazev_f FROM Filmy, ProgramWHERE Filmy.k_filmu = Program.k_filmu;

Dvojice filmů se stejným režisérem?

SELECT X.k_filmu AS První, Y.k_filmu AS DruhýFROM Filmy X, Filmy YWHERE X.reziser = Y.reziser AND X.k_filmu <> Y.k_filmu;

Page 19: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

AritmetikaAritmetikaAritmetikaAritmetika jednoduché výpočty na hodnotách vstupujících do výsledné tabulky

Jaké budou ceny promítání při navýšení o 20%?

SELECT k_kina, k_filmu, cena*1.2

FROM Promítání;

Pro kino Blaník kódy filmů, které promítá a cenu promítání v eurech.

SELECT k_filmu, cena/31.2

FROM Promítání X, Kina Y

WHERE X.k_kina = Y.k_kina AND X.nazev_k = ‘Blaník’;

Pozn. je-li jeden z operandů NULL, je výsledkem operace opět NULL

Page 20: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Agregační funkceAgregační funkceAgregační funkceAgregační funkce• funkce, které množině specifických prvků přiřadí reálné číslo (např.

funkce COUNT umožňující získat počet prvků množiny)

• argumentem agregační funkce je obecně relace, ve skutečnosti se však jedná pouze o množinu hodnot, tedy unární relaci

COUNT, SUM, MAX, MIN, AVG

Syntaxe aplikace agregační funkce na sloupec:

agregační_funkce([{ALL|DISTINCT}] jméno_sloupce)

Pozn. SUM() = NULL

AVG() = NULL

COUNT() = NULL

Pozor! Použití agregační funkce za SELECT vylučuje použití dalšího sloupce.

Page 21: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PříkladyPříkladyPříkladyPříkladyPočet kin

SELECT COUNT (*) AS počet_kinFROM Kina;

Kolik je promítáno filmů?SELECT COUNT (DISTINCT k_filmu) AS počet_promítaných_filmůFROM Promítání;

Počet kin s kapacitou větší než 200SELECT COUNT (*) AS počet_kin_s_kapacitouFROM KinaWHERE kapacita > 200;

Jaká je průměrná cena za vstupenku na film Apollo 13?SELECT AVG(Cena) AS průměrná_cenaFROM Promítání X, Filmy YWHERE X.k_filmu = Y.k_filmu AND Y.nazev_f = ‘Apollo 13’;

Page 22: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Konstrukt GROUP BYKonstrukt GROUP BYKonstrukt GROUP BYKonstrukt GROUP BY• použití agregačních funkcí lze rozšířit na možnost aplikace na

podmnožiny tabulky zkonstruované dle výběrového kritéria• tabulka se konceptuálně rozdělí na skupiny, pro které je hodnota

zvoleného sloupce konstantní• řádky obsahující v tomto sloupci hodnotu NULL se seskupí do jedné

skupiny získáváme tzv. seskupenou tabulku

• každá skupina přispívá do výsledné tabulky jedním řádkem• jména sloupců, podle nichž se seskupení provádí jsou dána za

vyhrazeným slovem GROUP BY

SELECT …FROM …WHERE …GROUP BY jméno_atr1[{,[jméno_atr2]…}|]

Page 23: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PříkladyPříkladyPříkladyPříkladyKolik filmů natočili jednotliví režiséři?

SELECT reziser, COUNT(k_filmu)FROM FilmyGROUP BY reziser;

Kteří režiséři natočili alespoň tři filmy?SELECT reziserFROM FilmyGROUP BY reziser HAVING COUNT(k_filmu) > 2;

Jaká je průměrná cena vstupenek u jednotlivých filmů?SELECT X.k_filmu, nazev_f, AVG(Cena)FROM Filmy X, Promítání YWHERE X.k_filmu = Y.k_filmuGROUP BY k_filmu;

Page 24: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Další predikáty SQLDalší predikáty SQLDalší predikáty SQLDalší predikáty SQLPredikát LIKE

- umožňuje pracovat s podřetězci hodnot sloupců typu CHAR a VARCHAR

jméno_sloupce LIKE znaková_konstanta

Hodnoty sloupce nazev_f libovolné délky začínající na PS

nazev_f LIKE ‘PS%’

Dvoupísmenové názvy kin začínající písmenem A

nazev_k LIKE ‘K_’

Minimálně třípísmenové názvy filmů s písmenem ‘a‘ na druhém místě

nazev_f LIKE ‘_a_%’

Adresy kin obsahující slovo Praha

adresa LIKE ‘%Praha%’

Page 25: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Další predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLPredikát IN

- predikát pro práci s množinami

jméno_sloupce [NOT] IN poddotaznebo

jméno_sloupce [NOT] IN (seznam hodnot)

Adresy kin, ve kterých dávají film s kódem 6524SELECT Adresa FROM KinaWHERE k_kina IN (SELECT k_kina FROM Promítání

WHERE k_filmu = ‘6524’);

Názvy filmů, které natočili Hřebejk, Zelenka nebo SvěrákSELECT nazev_f FROM FilmyWHERE reziser IN (’Hřebejk’,’Zelenka’,’Svěrák’);

Page 26: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Další predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLPozn. Poddotaz můžeme užít i s porovnávacími operátory, máme-li zaručeno, že

výsledkem poddotazu je právě jedna hodnota.

Adresy kin, ve kterých dávají film Gladiátor natočený roku 2000

SELECT Adresa FROM Kina

WHERE k_kina IN (SELECT k_kina FROM Promítání P

WHERE P.k_filmu = (SELECT

F.k_filmu

FROM Filmy F

WHERE F.nazev_f = „Gladiátor“

AND rok_v = 2000));

Pozn. jméno_atributu IN () vrací false

jméno_atributu IN (tabulka obsahující prázdné řádky) vrací unknown

Page 27: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Další predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLKonstrukt > ALL

~ „větší něž všechny prvky ze specifikované množiny“

- k dispozici jsou i další porovnávací predikáty před ALL

Jaké je nejdražší promítání dne 2.4.2002?

SELECT * FROM Promítání

WHERE Cena > All (SELECT Cena FROM Promítání

WHERE datum = ‘2.4.2002’);

Pozn. jméno_atributu ALL () vrací TRUE

jméno_atributu ALL (tabulka obsahující prázdné řádky) vrací unknown

Page 28: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Kvantifikace v SQLKvantifikace v SQLKvantifikace v SQLKvantifikace v SQL• SQL nemá univerzální kvantifikátor, obsahuje však konstrukt EXISTS,

který simuluje existenční kvantifikátor!

• EXISTS je test na neprázdnost množiny specifikované za EXISTS.

[NOT] EXISTS poddotaz

Jména filmů, kteří se v některém kině promítají

SELECT nazev_f FROM Filmy FWHERE EXISTS (SELECT * FROM Promítání

WHERE k_filmu = F.k_filmu);

Názvy kin, která nic nehrají

SELECT nazev_k FROM Kina KWHERE NOT EXISTS (SELECT * FROM Promítání

WHERE k_kina = K.k_kina);

Page 29: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Množinové operaceMnožinové operaceMnožinové operaceMnožinové operaceUNION, INTERSECT, EXCEPT

- tabulky musí být kompatibilní (stejný počet sloupců, stejný typy dat odpovídajících si sloupců)

Výraz_dotazu UNION [ALL] výraz_dotazu [ORDER BY specifikace_třídění]

- UNION eliminuje duplikáty z výsledku bez zadání DISTINCT

Filmy, které natočil režisér Hřebejk nebo jsou promítány 2.4.2002

(SELECT k_filmu FROM Filmy WHERE reziser = ‘Hřebejk’)UNION(SELECT k_filmu FROM PromítáníWHERE datum = ‘2.4.2002’);

Page 30: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Použití prázdných hodnotPoužití prázdných hodnotPoužití prázdných hodnotPoužití prázdných hodnotFilmy, u nichž chybí záznam o režisérovi

SELECT k_filmu FROM FilmyWHERE reziser IS NULL;

Jaký zaměstnanec žijící v Praze má nejvyšší plat? (s pomocí ALL)

SELECT k_zamestnance FROM ZamestnanciWHERE plat > ALL (SELECT Z.Plat FROM Zamestnanci Z

WHERE Z.Adresa LIKE ‘%Praha%’);

Jaký zaměstnanec žijící v Praze má nejvyšší plat? (s pomocí MAX)

SELECT k_zamestnance FROM ZamestnanciWHERE plat > (SELECT MAX(Z.Plat) FROM Zamestnanci Z

WHERE Z.Adresa LIKE ‘%Praha%’);

Page 31: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Spojení tabulekSpojení tabulekSpojení tabulekSpojení tabulek• přirozené spojení

SELECT * FROM R NATURAL JOIN S;

• spojení křížem (kartézský součin)SELECT * FROM R CROSS JOIN S;

• spojení přes podmínkuSELECT * FROM R JOIN S ON A > B;

• spojení přes vyjmenované sloupceSELECT * FROM R JOIN S USING (A, B);

• vnitřní vs. vnější spojeníSELECT * FROM R INNER(LEFT, RIGHT) JOIN S USING (A, B);

– vnější spojení slouží k přidání některých řádků, které se s ničím nespojily, do výsledku

Page 32: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Aktualizace v SQLAktualizace v SQLAktualizace v SQLAktualizace v SQLINSERT, DELETE, UPDATE

DELETE FROM Filmy WHERE reziser = ‘Hřebejk’;

UPDATE Filmy SET reziser ‘Zelenka’WHERE k_filmu = ‘B12’;

INSERT INTO Filmy (k_filmu, nazev_f) VALUES (‘B04’,’Jáchyme, hoď ho do stroje’);

CREATE TABLE Pocet_filmu(reziser CHAR(20)počet INT);INSERT INTO TABLE Počet_filmu

SELECT reziser, COUNT(k_filmu)FROM FilmyGROUP BY reziser;

Page 33: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Referenční integritaReferenční integritaReferenční integritaReferenční integrita= logické vztahy mezi dvěma tabulkami – hlavní a vedlejší

- sloupec ve vedlejší tabulce = cizí klíč – sloupec odkazující do hlavní tabulky

INSERT

- omezené vložení řádku do vedlejší tabulky

DELETE, UPDATE

- kaskádové odstranění řádků (ON DELETE CASCADE)

- nahrazení cizího klíče prázdnou hodnotou (SET NULL)

- nahrazení cizího klíče implicitní hodnotou (SET DEFAULT)

- odstranění řádku z hlavní tabulky s upozorněním (NO ACTION)

FOREIGN KEY (k_filmu) REFERENCES Filmy ON UPDATE CASCADE

Page 34: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PohledyPohledyPohledyPohledy= virtuální tabulky

- slouží především pro dotazování – umožňuje značné zjednodušení zápisu dotazů (obdobně jako rozčlenění programu do procedur)

CREATE VIEW Prazaci

AS SELECT k_zamestnance, jmeno_z FROM Zamestnanci

WHERE Adresa LIKE ‘%Praha%’;

SELECT k_zamestnance FROM Prazaci

WHERE Plat > 10000;

DROP VIEW Prazaci;

Page 35: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Systémový katalogSystémový katalogSystémový katalogSystémový katalog• slouží k uchovávání informací o relačním schématu databáze, o indexech,

o pohledech apod.

• opět přístupný s pomocí SQL

SYSTABLES(name, creator, colcount, …)

SYSCOLUMNS(name, tbname, coltype, …)

SYSINDEXES(name, tbanem, creator, …)

Které tabulky obsahujíc sloupec k_filmu?SELECT tbname FROM SYSCOLUMNS WHERE name = ‘k_filmu’;

Jaké sloupce má tabulka Kina?SELECT name FROM SYSCOLUMNSWHERE tbname = ‘Kina’;

Page 36: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

Přístupová právaPřístupová právaPřístupová právaPřístupová právaOchrana dat pro

- výběr dat (SELECT)- modifikaci (INSERT, DELETE, UPDATE)- odkazování (REFERENCES)

GRANT {ALL PRIVILEGES | privilegium1[, privilegium2, …]} ON objektTO {PUBLIC identifikátor1[,identifikátor2, …]} [WITH GRANT OPTION]

Privilegia

SELECT | DELETE | INSERT | UPDATE |REFEREBCES [(jméno_atr1[, jméno_atr2]…)]

- klauzule WITH GRANT OPTION umožňuje udílet privilegia uživatelům od těch, kteří jsou uvedeni za TO

- při definici práv je možné využívat také pohledy – přidělovat práva až na úrovni prvků tabulky

Page 37: N-ticový (řádkový) relační kalkul

04/21/23 Databázové systémy UIN010

PříkladyPříkladyPříkladyPříklady

Odebrání práv

- pomocí REVOKE a zadání požadavků podobně jako u GRANT

REVOKE SELECTON FilmyTO Jana;

GRANT UPDATE (adresa) GRANT SELECT ON Filmy ON Filmy TO Lenka; TO PUBLIC;

GRANT ALL PRIVILEGES ON Prazaci TO Jana;