formální sémantika sql
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 PresentationTRANSCRIPT
NDBI001 - Dotazovací jazyky I 1
Formální sémantika SQL
Aleksey Rembish
Tatsiana Maksimenka
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.
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.
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}
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}.
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}.
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)
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.
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).
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.
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ů.
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.
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
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.
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.
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>]
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
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]
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>
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>
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>
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>
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>
NDBI001 - Dotazovací jazyky I 24
Pokračování
…
• Překlad SQL-dotazů na E3VPC;
• Ekvivalence dotazů SQL.
NDBI001 - Dotazovací jazyky I 25
Překlad SQL E3VCP
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.
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í
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>
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
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
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>
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>, ...
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>…
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>
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
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>
…
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ů…
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
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}
NDBI001 - Dotazovací jazyky I 40
Ekvivalence SQL dotazů
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ů.
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)
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.
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}
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}
NDBI001 - Dotazovací jazyky I 46
Množina kritické ekvivalence
TR<Q1> = {x R: ||P(x)||F}
TR<Q2> = {x R: ||P(x)||T}
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}
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
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’)
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)||
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
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)
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í
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.