formální sémantika sql

54
NDBI001 - Dotazovací jazy ky I 1 Formální sémantika SQL Aleksey Rembish Tatsiana Maksimenka

Upload: upton

Post on 19-Jan-2016

66 views

Category:

Documents


2 download

DESCRIPTION

Formální sémantika SQL. Aleksey Rembish Tatsiana Maksimenka. Obsah. Formalizace SQL: tříhodnotový kalkul E3VPC; Formální definice gramatiky jazyka SQL; Překlad SQL-dotazů na E3VPC; Ekvivalence dotazů SQL. E3VPC. = Extended 3-valued tuple predicate calculus - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 1

Formální sémantika SQL

Aleksey Rembish

Tatsiana Maksimenka

Page 2: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 2

Obsah

1. Formalizace SQL: tříhodnotový kalkul E3VPC;

2. Formální definice gramatiky jazyka SQL;

3. Překlad SQL-dotazů na E3VPC;

4. Ekvivalence dotazů SQL.

Page 3: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 3

E3VPC

= Extended 3-valued tuple predicate calculus

• rozšíření 2-hodnotového n-ticového kalkulu (2VPC);

• jednoduchá struktura;

• snadnější manipulace s dotazy (nap. optimalizace);

• schopnost vyjádřit všechno, co lze vyjádřit v SQL.

Page 4: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 4

E3VPC – Přiklad

Schéma:

Oddělení (id, počet_zaměstnanců, lokace, manažer)

Zaměstnanec (id, oddělení_id, bydliště)

SQL:

SELECT d.manažer

FROM Oddělení d

WHERE d.lokace = ALL

SELECT e.bydliště

FROM Zaměstnanec e

WHERE e.oddělení_id = d.id

GROUP BY d.manažer

HAVING

AVG(d.počet_zaměstnanců) > 500

E3VPC:{dOddělení: || { eZaměstnanec: ||e.oddělení_id = d.id||F

} d.lokace = e.bydliště AVG(d.počet_zaměstnanců) { dOddělení: || {eZaměstnanec: ||e.oddělení_id = d.id||F

} d.lokace = e.bydliště d.manažer d.manažer ||F} > 500

||F}

Page 5: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 5

E3VPC – Výrazy

E3VPC výraz je { t(v1, ..., vn): || P(v1, ..., vn) ||α }, kde

• v1, ..., vn jsou n-ticové proměnné;

• t(v1, ..., vn) je cílový seznam výrazu ve tvaru v1R1, …, vnRn

R1, …, Rn jsou relace;

• P(v1, ..., vn) je formule;

• ||a||α je unární operátor interpretace, α{T, F}.

Page 6: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 6

E3VPC – Operátory

• =, , <, jsou obvyklé operátory s klasickým významem (pokud jeden z operandů je null, výsledek je unknown);

je porovnávání s hodnotou null (vypadá jak operátor “=“, kromě případu, kdy oba operandy mají hodnotu null, pak výsledek je true;

• a je unární operátor vnější vazby;• ||a||α je unární operátor interpretace, α{T, F}.

Page 7: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 7

E3VPC – Termy

• Konstanta je term;• Jestli v je proměnná a A je atribut, potom v.A a v.A jsou

taky termy;• Jestli S je E3VPC-výraz, A je atribut a f je agregační

funkce, tak f(A)S je taky term.

f {COUNT, AVG, SUM, MIN, MAX, COUNTD, AVGD, SUMD}

COUNTD, AVGD a SUMD jsou funkce, které vybírají jenom unikátní atributy před vyhodnocením (DISTINCT v SQL)

Page 8: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 8

E3VPC – Formule

• Pokud t1, t2 jsou termy, je operátor porovnání, tak t1 t2 je atomická formule;

• T (true), F (false) a U (unknown) jsou atomické formule;

• Jestli P je atomická formule, potom ||P||α je taky atomická formule;

• Kdy P a Q jsou atomické formule, tak P, PQ, PQ jsou taky;

• Jestli S je výraz a Q je formule, tak S Q a S Q jsou taky formule;

• Žádné další výrazy nejsou E3VPC-formule.

Page 9: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 9

Interpretace E3VPC formulí

• Výsledkem vyhodnocení formule P muže byt jedna ze třech hodnot: true, false nebo unknown;

• Výsledkem vyhodnocení formule ||P||α muže byt true nebo false: ||P||T interpretuje unknown jako true

(pozitivní interpretace); ||P||F interpretuje unknown jako false

(negativní interpretace).

Page 10: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 10

Interpretace formálně

• Nechť P(x) je E3VPC-formule a Q(x) je 2VPC-formule.• Q(x) je pozitivní interpretovaný 2-hodnotový ekvivalent

P(x), značíme ||P||T, jestliže pro každé x platí: P(x) T Q(x) T; P(x) F Q(x) F; P(x) U Q(x) T.

• Q(x) je negativní interpretovaný 2-hodnotový ekvivalent P(x), značíme ||P||F, jestliže pro každé x platí: P(x) T Q(x) T; P(x) F Q(x) F; P(x) U Q(x) F.

Page 11: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 11

Operátor vnější vazby

• Operátor vnější vazby “” mění rozsah platnosti proměnné.

• v se odkazuje na proměnnou na nejbližší vyšší úrovni.

• Přiklad: máme výraz{ v S: { v T: || v.a = v.b ||T } }

Ve výrazu “v.a = v.b ” první “modrá” vS a druhá “červená” vT, jelikož je použit operátor “”.

• Ten operátor očividně zjednodušuje převod SQL dotazů.

Page 12: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 12

Význam E3VPC výrazu

E3VPC výraz:{v1 R1, ..., vn Rn: Q(v1, ..., vn)}

• Výsledkem vyhodnocení výrazu bude množina n-tic, vybraných z relací R1, ..., Rn, které po dosazení za příslušné proměnné v1, ..., vn splňují formuli Q.

• Q musí být formule 2VPC.• Předpokládá se, že n-tice v relacích jsou

navzájem různé.• Vrací celé n-tice, nelze vrátit jejich části.

Page 13: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 13

Kvantifikace

U = {x S: P(x)} Q(x) (x) x S P(x) Q(x)

E = {x S: P(x)} Q(x) (x) x S P(x) Q(x)

označíme-li M = {x S: P(x)}, pak platí:• U true (x M) Q(x) true• U false (x M) Q(x) false• U unknown jinak

• E true (x M) Q(x) true• E false (x M) Q(x) false• E unknown jinak

Page 14: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 14

Gramatika SQL

• Syntaxí řízený překlad SQL dotazu na výraz E3VPC.

• Potřebujeme tedy popsat syntax SQL pomocí gramatiky.

• Pro přehlednost zjednodušíme popis SQL výrazů gramatikou.

Page 15: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 15

Zjednodušení

1. Výrazy „boolean expression of“ nebo „list of“ jsou zkratkou pro množinu zřejmých pravidel.

2. Aritmetické výrazy s atributy nejsou uvažovány.

3. Používání aliasů relací je povinné.

4. Do některých pravidel jsou zavedeny další neterminály, případně jsou některá pravidla rozdělena do více menších.

Page 16: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 16

Gramatika SQL (pod)dotazu

• vrací n-tici:<QUERY> ::= SELECT [ALL | DISTINCT]

<SELECT LIST><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>]

• vrací hodnotu nebo sloupec:<SUBQ> ::= SELECT [ALL | DISTINCT]

<COL OR VAL><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>]

• vrací výsledek agregační funkce:<AF SUBQ> ::= SELECT [ALL | DISTINCT]

<FUNCTION><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>]

Page 17: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 17

Pravidlo <SELECT LIST><SELECT LIST> ::= “list of <SELECT ELEMENT>”<SELECT ELEMENT> ::= <COL OR VAL> | <FUNCTION><COL OR VAL> ::= <alias>.<column> | <literal><FUNCTION> ::= <COUNT> | <AGGR> <COUNT> ::= <COUNT DISTINCT> | COUNT(*)<COUNT DISTINCT>::=

COUNT (DISTINCT <alias>.<column>)<AGGR> ::= <AGGR DISTINCT> | <AGGR ALL><AGGR DISTINCT> ::=

<AGGR NAME>(DISTINCT <alias>.<column>)<AGGR ALL> ::= <AGGR NAME>([ALL]<alias>.<column>)<AGGR NAME> ::= AVG | MAX | MIN | SUM

• seznam hodnot, sloupců nebo výsledků agregačních funkcí• nelze vnořit SELECT

Page 18: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 18

Pravidla <*CLAUSE>

<FROM CLAUSE> ::= FROM “list of <TABLE REFERENCE>”

<TABLE REFERENCE> ::= <table> <alias>

<WHERE CLAUSE> ::= WHERE <WHERE CONDITION><HAVING CLAUSE> ::= HAVING <HAVING CONDITION><GROUP BY CLAUSE> ::= GROUP BY “list of

<alias>.<column>”

• do klauzule FROM nelze vnořit SELECT• SELECT lze vnořit jen do klauzulí WHERE, HAVING za

[NOT] IN, EXISTS, operátor [SOME | ALL]

Page 19: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 19

Pravidlo <WHERE CONDITION>

Podmínka WHERE je seznam jednoduchých a/nebo složených predikátů:

<WHERE CONDITION> ::= “boolean expression of <WHERE PRED>”<WHERE PRED> ::= <SIMPLE PRED> | <COMPLEX PRED><SIMPLE PRED> ::= <COL OR VAL><comp op><COL OR VAL>

<COMPLEX PRED> ::= <SOME QUANTIFIED PRED> | <SOME QUANTIFIED AF PRED> |<ALL QUANTIFIED PRED> | <ALL QUANTIFIED AF PRED> |<COMPLEX IN PRED> | <COMPLEX IN AF PRED> |<COMPLEX NOT IN PRED> | <COMPLEX NOT IN AF PRED> |<COMPLEX COMP PRED> | <COMPLEX COMP AF PRED> |<EXISTS PRED>

Page 20: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 20

Pravidla <*PRED> a <*AF PRED>

Bez agregační funkcí v poddotazu:<SOME Q. PRED> ::= <COL OR VAL><comp op>SOME<SUBQ><ALL Q. PRED> ::= <COL OR VAL><comp op>ALL<SUBQ><COMPLEX IN PRED> ::= <COL OR VAL>IN<SUBQ><COMPLEX NOT IN PRED> ::= <COL OR VAL>NOT IN<SUBQ><COMPLEX COMP PRED> ::= <COL OR VAL><comp op><SUBQ>

Analogicky s agregační funkcí v poddotazu:<SOME Q. AF PRED> ::= <COL OR VAL><comp op>SOME<AF SUBQ> <ALL Q. AF PRED> ::= <COL OR VAL><comp op>ALL<AF SUBQ><COMPLEX IN AF PRED> ::= <COL OR VAL>IN<AF SUBQ><COMPLEX NOT IN AF PRED> ::= <COL OR VAL>NOT IN<AF SUBQ><COMPLEX COMP AF PRED> ::= <COL OR VAL><comp op><AF

SUBQ>

<EXISTS PRED> ::= EXISTS <SUBQ>

Page 21: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 21

Pravidlo <HAVING CONDITION>

Podmínka HAVING je seznam jednoduchých resp. složených predikátů, porovnání výsledků agregačních funkce s hodnotou nebo jinou agregační funkcí:

<HAVING CONDITION> ::= “boolean expression of <HAVING PRED>”<HAVING PRED> ::= <H SIMPLE PRED> | <H COMPLEX PRED> |

<H AF COLUMN PRED> | <H AF FUNCTION PRED> | <H AF COMPLEX PRED>

<HAVING SIMPLE PRED> ::= <SIMPLE PRED><HAVING COMPLEX PRED> ::= <COMPLEX PRED>

<HAVING AF COLUMN PRED> ::=<FUNCTION><comp op><COL OR VAL>

<HAVING AF FUNCTION PRED> ::=<FUNCTION><comp op><FUNCTION>

Page 22: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 22

Pravidlo <H AF COMPEX PRED>

<H AF COMPLEX PRED> ::= <AF SOME Q. PRED> | <AF SOME Q. AF PRED> |<AF ALL Q. PRED> | <AF ALL Q. AF PRED> |<AF COMPLEX IN PRED> | <AF COMPLEX IN AF PRED> |<AF COMPLEX NOT IN PRED> | <AF COMPLEX IN AF PRED> |<AF COMPLEX COMP PRED> | <AF COMPLEX COMP AF PRED>

Page 23: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 23

Pravidla <AF * PRED> a <AF * AF PRED>

Bez agregační funkcí v poddotazu:<AF SOME Q. PRED> ::= <FUNCTION><comp op>SOME<SUBQ><AF ALL Q. PRED> ::= <FUNCTION><comp op>ALL<SUBQ><AF COMPLEX IN PRED> ::= <FUNCTION>IN<SUBQ><AF COMPLEX NOT IN PRED> ::= <FUNCTION>NOT IN<SUBQ><AF COMPLEX COMP PRED> ::= <FUNCTION><comp op><SUBQ>

Analogicky s agregační funkcí v poddotazu:<AF SOME Q. AF PRED> ::= <FUNCTION><comp op>SOME<AF SUBQ> <AF ALL Q. AF PRED> ::= <FUNCTION><comp op>ALL<AF SUBQ><AF COMPLEX IN AF PRED> ::= <FUNCTION>IN<AF SUBQ><AF COMPLEX NOT IN AF PRED> ::= <FUNCTION>NOT IN<AF SUBQ><AF COMPLEX COMP AF PRED> ::= <FUNCTION><comp op><AF SUBQ>

<EXISTS PRED> ::= EXISTS <SUBQ>

Page 24: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 24

Pokračování

• Překlad SQL-dotazů na E3VPC;

• Ekvivalence dotazů SQL.

Page 25: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 25

Překlad SQL E3VCP

Page 26: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 26

Pravidla překladu

• Výsledek překladu symbolu w je řetezec symbolů TR<w>.

• S některými pravidly gramatiky SQL jsou spojena překladová pravidla.

• Překladové pravidlo pro symbol w definuje TR<w>.

• Některá syntaktická pravidla mohou mít více pravidel. Rozlišíme je indexem: TRi.

• Použití závisí na kontextu.

Page 27: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 27

Překlad terminálů a neterminálů

• Je-li w terminál, pak TR<w>::= w.• Význam přeložených SQL terminálů v

E3VPC:<alias> proměnná<column> atribut<table> relace<literal> konstanta<comp op> operátor porovnání

Page 28: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 28

Implicitní překlad

• Bud‘ LHS::=RHS syntaktické pravidlo,

w1,…,wk neterminály na jeho pravé straně v pořadí zleva doprava.

• Necht‘ neexistuje pravidlo překladu pro LHS::=RHS.• Pak TR<LHS>::= TR<w1>… TR<wk>

Syntaktické pravidlo:<WHERE CLAUSE>::= WHERE <WHERE CONDITION>

Překlad do E3VPC:TR<WHERE CLAUSE>::=TR<WHERE CONDITION>

Page 29: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 29

Pravidla popsaná metajazykem

TR1<FUNCTION>::=

odpovídající jméno agregační funkce a v závorkách její parametr

TR2<FUNCTION>::=

hodnota odpovídající funkce pro prázdnou množinu

TR“boolean expression of <X>“::=

odpovídající výraz v E3VPC, v němž jsou predikáty nahrazeny svými

překlady

TR“list of<X>“::=

seznam přeložených neterminálů oddělených čárkami

TR<COL OR VAL>::=

konstanta nebo proměnná.atribut

Page 30: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 30

TR<QUERY>Syntaktické pravidlo:<QUERY> ::=

SELECT [ALL | DISTINCT] <SELECT LIST><FROM CLAUSE>[<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>]

pravidlo překladu:TR<QUERY> ::=

{TR<FROM CLAUSE>: ||TR<WHERE CLAUSE> TR<HAVING CLAUSE>||F}

• negativní interpretace (false-interpreted)• <GROUP BY CLAUSE> se projeví až při překladu <HAVING CLAUSE>

a při překladu agregačních funkcí• <SELECT LIST> není použit – jedná se o vnější SELECT

Page 31: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 31

TR<* CLAUSE>

<FROM CLAUSE> ::= FROM “list of <TABLE REFERENCE>”<TABLE REFERENCE> ::= <table> <alias>

<WHERE CLAUSE> ::= WHERE <WHERE CONDITION><HAVING CLAUSE> ::= HAVING <HAVING CONDITION><GROUP BY CLAUSE> ::= GROUP BY “list of <alias>.<column>”

pravidla překladu spojená s těmito syntaktickými pravidly:TR<TABLE REFERENCE> ::= <alias> <table>TR<GROUP BY CLAUSE> ::= <alias>.<column> <alias>.<column>

[ <alias>.<column> <alias>.<column>] ...

zbývá definovat:TR<WHERE CONDITION>, TR<HAVING CONDITION>

Page 32: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 32

TR<* CONDITION>

implicitní překlad a překlad popsaný metajazykem:

<WHERE CONDITION>::=“boolean expression of <WHERE PRED>”<WHERE PRED>::=<SIMPLE PRED> | <COMPLEX PRED><SIMPLE PRED>::=<COL OR VAL><comp op><COL OR VAL><COMPLEX PRED>::= ... | <ALL QUANTIFIED PRED> | ...

<HAVING CONDITION>::=“boolean expression of <HAVING PRED>”<HAVING PRED>::= ... | <H AF COLUMN PRED> | ...

zbývá tedy přeložit:<ALL QUANTIFIED PRED>, <H AF COLUMN PRED>, ...

Page 33: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 33

TR<ALL QUANTIFIED PRED>, ...

<ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQTR1<SUBQ><COL OR VAL> <comp op>TR2<SUBQ>

<SOME QUANTIFIED PRED>::=<COL OR VAL><comp op>SOME<SUBQ>TR1<SUBQ><COL OR VAL> <comp op> TR2<SUBQ>

<COMPLEX IN PRED>::=<COL OR VAL>IN<SUBQ>TR1<SUBQ><COL OR VAL> = TR2<SUBQ>

<COMPLEX NOT IN PRED>::=<COL OR VAL>NOT IN<SUBQ>TR1<SUBQ><COL OR VAL> TR2<SUBQ>

<EXISTS PRED>::=EXISTS <SUBQ> TR1<SUBQ>…

Page 34: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 34

TR<SUBQ><SUBQ> ::=

SELECT [ALL | DISTINCT] <COL OR VAL><FROM CLAUSE>[<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>]

výsledek poddotazu může být množina hodnot:

TR1<SUBQ> = {TR<FROM CLAUSE>: ||TR<WHERE CLAUSE> TR<HAVING CLAUSE>||F}

výsledek poddotazu musí být jenom jedna hodnota:TR2<SUBQ> = <COL OR VAL>

Page 35: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 35

PříkladSyntaktické pravidlo:

<ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQ>

překlad:

TR1<SUBQ><COL OR VAL><comp op> TR2<SUBQ>

WHERE d.location = ALL

SELECT e.residence

FROM emp e

WHERE e.deptId = d.id

{e emp: || e.deptId = d.id ||F} d.location = e.residence

Page 36: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 36

TR<H AF COLUMN PRED>, ...<H AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL>

TR1<FUNCTION>{TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F}

<comp op> <COL OR VAL>

<H AF FUNCTION PRED>::=<FUNCTION><comp op><FUNCTION>TR1<FUNCTION>{TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F}

<comp op> TR1<FUNCTION>{TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F}

<H SIMPLE PRED>::=<SIMPLE PRED>{TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F}TR<SIMPLE PRED>

Page 37: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 37

PříkladSyntaktické pravidlo:<H AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL>

překlad:TR1<FUNCTION>

{TR<FROM CLAUSE>: || TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F}<comp op>

<COL OR VAL>

HAVING AVG(d.nofEmp) > 500

AVG(d.nofEmp){TR<FROM CLAUSE>: ||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F} > 500

ještě je třeba použít dříve získaných výsledků…

Page 38: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 38

• Překlady získané dříve (na vyšší úrovni):TR<FROM CLAUSE>::= d deptTR<WHERE CLAUSE>::={e emp: ||e.deptId = d.id||F} d.location =

e.residenceTR<GROUP BY CLAUSE>::= d.manager d.manager

• SQL:SELECT d.managerFROM dept dWHERE d.location = ALL

SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp) > 500

• Celkový překlad neterminálu <H AF COLUMN PRED>:AVG(d.nofEmp){d dept:|| ({e emp: || e.deptId = d.id ||F} d.location = e.residence)

d.manager d.manager||F} > 500

Page 39: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 39

Dokončení příkladuSQL: schéma:

SELECT d.manager dept(id, nofEmp, location, manager)FROM dept d emp(id, deptId, residence)WHERE d.location = ALL

SELECT e.residenceFROM emp eWHERE e.deptId = d.id

GROUP BY d.manager HAVING AVG(d.nofEmp) > 500

E3VPC:{d dept: ||({e emp: ||e.deptId = d.id||F} d.location = e.residence) AVG(d.nofEmp) {d dept: ||( {e emp: || e.deptId = d.id||F} d.location =

e.residence) d.manager d.manager||F} > 500 ||F}

Page 40: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 40

Ekvivalence SQL dotazů

Page 41: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 41

Úkol

• Chceme zjístit, zda dva dané SQL výrazy jsou ekvivalentní

• Uděláme to pomocí E3VPC

1) Oba SQL dotazy přeložíme do E3VPC

2) Porovnáme a zjístíme ekvivalenci E3VPC výrazů.

Page 42: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 42

Kanonická forma E3VPC výrazu

Definice: řekneme, že E3VPC výraz je kanonický, pokud:

1) Interpretační operátor je aplikován na každou atomickou formuli

2) Interpretační operátor není aplikován na jinou než atomickou formuli

3) Neobsahuje zkrácené kvantifikované výrazy:{xS: P(x)} Q(x), {xS: P(x)} Q(x)

Page 43: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 43

Pozorování

• S kanonickým výrazem lze pracovat ve 2VPC.

• Ve 2VPC umíme zjistit ekvivalenci dvou výrazů.

• Každý E3VPC výraz má svůj kanonický tvar, který dostaneme násobnou aplikací následujícího lemmatu.

Page 44: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 44

Lemma 1

1) ||P(x) v Q(x)|| ||P(x)|| v ||Q(x)||

2) ||P(x) Q(x)|| ||P(x)|| ||Q(x)|| 3) ¬||P(x)|| ||¬P(x)||¬

4) || ||P(x)|| || ||P(x)||

5) ||(x S): P(x)|| (x S):||P(x)||

6) ||(x S): P(x)|| (x S):||P(x)||,kde P(x), Q(x) jsou formule, S je relace, , {T,F}

Page 45: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 45

Lemma 2

1)||{xS: ||P(x)||} Q(x)||

(xS): ||P(x)|| ||Q(x)||

2) ||{xS: ||P(x)||} Q(x)||

(xS): ||¬P(x)||¬ v ||Q(x)||,

Kde P(x), Q(x) jsou formule,

S je relace, , {T,F}

Page 46: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 46

Množina kritické ekvivalence

TR<Q1> = {x R: ||P(x)||F}

TR<Q2> = {x R: ||P(x)||T}

Page 47: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 47

Jednoduché dotazy

Jednoduchý dotaz – bez negace a kvantifikace

Pravidlo 3

TR<Q1> = {x R: ||P(x)||F}

TR<Q1> = {x R: ¬||P(x)||F} {x R: ¬||P(x)||T}

Pravidlo 4

TR<Q2> = {x R: ||P(x)||F}

TR<Q2> = {x R: || ||P(x)||T ||F} {x R: ||P(x)||T}

Page 48: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 48

Univerzální kvantifikátor

1) ||¬ {y S: ||Q(x,y) P(y)||}||

2) ||¬ {y S: ||Q(x,y)||}P(y) ||

3) ||¬ {y S: ||P(x,y)||}P(y) ||

4) {y S: ||Q(x,y)||} ¬P(y)||

5) {y S: ||P(y)||} ¬Q(x,y)||Kde = False a závisí na obecné strutkuře výrazu obsahující predikat

Page 49: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 49

Univerzální kvantifikátor II

Kanonické E3VPC formy:1’) y S: || ¬Q(x,y)||¬ v ||¬P(y)||¬

2’) y S: || ¬Q(x,y)||¬ v ||¬P(y)||

3’) y S: || ¬Q(x,y)|| v ||¬P(y)||¬

4’) = 2’)5’) = 3’)

Page 50: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 50

Existenční kvantifikátor

1) || {y S: ||Q(x,y)P(y)||}||

2) || {y S: ||Q(x,y)||}P(y)||

3) || {y S: ||P(y)||}Q(x,y)||

4) ||¬ {y S: ||Q(x,y)||}¬P(y)||

5) ||¬ {y S: ||P(y)||}¬Q(x,y)||

Page 51: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 51

Existenční kvantifikátor II

Kanonické E3VPC formy:

)y S: || Q(x,y) || || P(y) ||

)y S: || Q(x,y) || || P(y) ||

)y S: || Q(x,y) || || P(y) ||

4.) = 2.5.) = 4.

= F

Page 52: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 52

Ekvivalence SQL dotazů• SQL dotazy, které neobsahují univerzální

kvantifikátor nikdy nevedou na množinu kritické ekvivalence

• SQL dotazy obsahující univerzální kvantifikátor vždy vedou na množinu kritické ekvivalence

• Počet různých interpretací dotazů se stejnou kanonickou strukturou s alespoň jedným univerzálním kvantifikátorem se zvětšuje s každým dalším kvantifikátorem (univerzálním i existenčním)

Page 53: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 53

Závěr

• Definovali jsme jazyk E3VPC

• Ukázali jsme si gramatiku SQL.

• Víme, že lze sestrojit syntaxí řízený překladač SQL E3VPC.

• Ukázali jsme překlad některých částí SQL dotazů

• Umíme rozhodnout, zda jsou dva SQL dotazy ekvivalentní

Page 54: Formální sémantika SQL

NDBI001 - Dotazovací jazyky I 54

Literatura

M. Negri, G.Pelagatti, L. Sbattella:

“Formal Semantics of SQL Queries” in ACM Transactions on Database Dystems, Vol.17, No.3, Sept.

1991, p. 513–534.