Formální sémantika SQL Aleksey Rembish Tatsiana Maksimenka NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I Obsah Formalizace SQL: tříhodnotový kalkul E3VPC; Formální definice gramatiky jazyka SQL; Překlad SQL-dotazů na E3VPC; Ekvivalence dotazů SQL. NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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: d.manažer d.manažer ||F} > 500 ||F} NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
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
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) U Q(x) F. NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I Zjednodušení Výrazy „boolean expression of“ nebo „list of“ jsou zkratkou pro množinu zřejmých pravidel. Aritmetické výrazy s atributy nejsou uvažovány. Používání aliasů relací je povinné. 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
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
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
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
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
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
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
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
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
NDBI001 - Dotazovací jazyky I Pokračování … Překlad SQL-dotazů na E3VPC; Ekvivalence dotazů SQL. NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I Překlad SQL E3VCP NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I 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
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
NDBI001 - Dotazovací jazyky I 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
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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
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
TR<ALL QUANTIFIED PRED>, ... <ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQ TR1<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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I Příklad Syntaktické 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
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> <H SIMPLE PRED>::=<SIMPLE PRED> {TR<FROM CLAUSE>:||TR<WHERE CLAUSE> TR<GROUP BY CLAUSE>||F} TR<SIMPLE PRED> … NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I Příklad Syntaktické 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
NDBI001 - Dotazovací jazyky I Překlady získané dříve (na vyšší úrovni): TR<FROM CLAUSE>::= d dept TR<WHERE CLAUSE>::={e emp: ||e.deptId = d.id||F} d.location = e.residence TR<GROUP BY CLAUSE>::= d.manager d.manager SQL: SELECT d.manager FROM dept d WHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.id GROUP BY d.manager HAVING 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
NDBI001 - Dotazovací jazyky I Dokončení příkladu SQL: schéma: SELECT d.manager dept(id, nofEmp, location, manager) FROM dept d emp(id, deptId, residence) WHERE d.location = ALL SELECT e.residence FROM emp e WHERE 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
Ekvivalence SQL dotazů NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I Ú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
Kanonická forma E3VPC výrazu Definice: řekneme, že E3VPC výraz je kanonický, pokud: Interpretační operátor je aplikován na každou atomickou formuli Interpretační operátor není aplikován na jinou než atomickou formuli Neobsahuje zkrácené kvantifikované výrazy: {xS: P(x)} Q(x), {xS: P(x)} Q(x) NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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
Množina kritické ekvivalence TR<Q1> = {x R: ||P(x)||F} TR<Q2> = {x R: ||P(x)||T} NDBI001 - Dotazovací jazyky I
NDBI001 - Dotazovací jazyky I 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
Univerzální kvantifikátor ||¬ {y S: ||Q(x,y) P(y)||}|| ||¬ {y S: ||Q(x,y)||}P(y) || ||¬ {y S: ||P(x,y)||}P(y) || {y S: ||Q(x,y)||} ¬P(y)|| {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
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
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
Existenční kvantifikátor II Kanonické E3VPC formy: 1.)y S: || Q(x,y) || || P(y) || 2.)y S: || Q(x,y) || || P(y) || 3.)y S: || Q(x,y) || || P(y) || 4.) = 2. 5.) = 4. = F NDBI001 - Dotazovací jazyky I
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
NDBI001 - Dotazovací jazyky I 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
NDBI001 - Dotazovací jazyky I 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. NDBI001 - Dotazovací jazyky I