1 / 62

Formální sémantika SQL

Daniel Matteoni, Pavel Kadlec. Formální sémantika SQL. Formální model tříhodnotového kalkulu E3VPC Gramatika SQL Převod SQL na E3VPC Ekvivalence SQL dotazů. Obsah. Ekvivalence SQL dotazů Optimalizace dotazů Určení výpočetní síly jazyka. Proč formalizovat SQL?. E3VPC.

blithe
Download Presentation

Formální sémantika SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Daniel Matteoni, Pavel Kadlec Formální sémantika SQL

  2. Formální model tříhodnotového kalkulu E3VPC • Gramatika SQL • Převod SQL na E3VPC • Ekvivalence SQL dotazů Obsah

  3. Ekvivalence SQL dotazů • Optimalizace dotazů • Určení výpočetní síly jazyka Proč formalizovat SQL?

  4. E3VPC

  5. Rozšíření 2-hodnotového n-ticového predikátového kalkulu • Využívá tříhodnotovou logiku • Jednoduchá struktura • Snadnější manipulace s daty (např. optimalizace) • Schopnost vyjádřit vše, co lze vyjádřit v SQL Extended three-valued Tuple Predicate Calculus - E3VPC

  6. E3VPC výraz má strukturu: {t(v1, ..., vn): ||P(v1, ..., vn)||α} v1, ..., vnn-ticové proměnné t(v1, ..., vn) cílový seznam výrazu (specifikuje strukturu výsledku výrazu) v1R1, ..., vn Rn, R1, ..., Rn jsou relace P(v1, ..., vn) predikátová formule || · ||αinterpretační operátor α{T, F} E3VPC - Výrazy

  7. Konstanta je term • Pro každou proměnnou v a atribut a jsou v.a a v.a termy • Pokud S je E3VPC výraz, a atribut a F je agregační funkce, potom F(a)S je term, kde F  {COUNT, AVG, SUM, MIN, MAX,COUNTD, AVGD, SUMD} Funkce xxxD odpovídají funkcím xxx DISTINCT E3VPC - Termy

  8. =, , <,  mají klasický význam • Pokud jeden z operandů má hodnotu null, výsledek je unknown  porovnává s hodnotou null • Liší se od operátoru ‘=‘ v tom, že výsledek porovnání dvou operandů s hodnotou null dává výsledek true ·unární operátor vnější vazby || · ||α unární operátor interpretace, α{T,F} E3VPC - Operátory

  9. 5 1 Null 5 True False unknown 1 False True unknown Null unknown unknown True  příklad

  10. t1, t2 termy,  operátor porovnaní, potom t1 t2 je atomická formule • T, F, U (True, False, Unknown) jsou atomické formule • P je atomická formule, potom ||P|| je atomická formule • atomická formule je formule • P, Q jsou formule, potom P, P Q a P Q jsou formule • P je výraz, Q jeformule, potom PQ a PQ jsou formule • Žádné další výrazy nejsou formule E3VPC – Formule

  11. ||.||T interpretuje unknown jako true • ||.||F interpretuje unknown jako false • Výsledkem vyhodnocení formule ||P||α je jedna z hodnot true, false Interpretace E3VPC formulí

  12. P(x) je E3VPC formule, Q(x) je 2VPC formule • Q(x) je pozitivně interpretovaný 2-hodnotový ekvivalent P(x), značíme ||P||T, pokud pro každé x: 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, pokud pro každé x: P(x) = T => Q(x) = T P(x) = F => Q(x) = F P(x) = U => Q(x) = F Interpretace formálně

  13. Operátor vnější vazby  mění rozsah platnosti proměnné • v se odkazuje na proměnnou na nejbližší vyšší úrovni • Kupříkladuve výrazu {vS: {v R: || v.a = v.b ||T} ... } je proměnná v dvakrát – na levé straně operátoru '=' se jedná o v R, na pravé straně je díky operátoru vnější vazby vS Vnější vazba

  14. {v1 R1, ..., vkRk: Q(v1, ..., vk)} • Výsledkem vyhodnocení výrazu je množina n-tic vybraných z relací R1, ..., Rk, které po dosazení za příslušné proměnné v1, ..., vk 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é Význam E3VPC výrazu

  15. U := {xR: P(x)} Q(x) E := {xR: P(x)} Q(x), kde P(x) je formule 2VPC Nechť M = {xR: P(x)}, potom platí: Kvantifikace U true (x M) Q(x) =true Ufalse (x M) Q(x) =false U=unknown v ostatních případech E true (x M) Q(x) =true Efalse (x M) Q(x) =false Eunknown v ostatních případech

  16. Gramatika SQL

  17. Cíl • Syntaxí řízený překlad dotazu SQL na výraz E3VPC • Je potřeba popsat syntaxi SQL gramatikou

  18. Výrazy „Boolean expression of“ a „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é • Některá pravidla byla rozdělena a byly zavedeny další neterminály Úpravy SQL

  19. 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>] Gramatika SQL (pod)dotazu

  20. <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(<alias>.<column>) <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 Pravidlo <SELECT LIST>

  21. <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 je možné je možné vnořit pouze do klauzulí WHERE, HAVING, za [NOT] IN, EXISTS, SOME a ALL Pravidla <* CLAUSE>

  22. <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 AFPRED> | <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> Pravidlo<WHERE CONDITION>

  23. Bez agregační funkce v poddotazu: <SOME QUANTIFIED PRED>::=<COL OR VAL><comp op>SOME<SUBQ> <ALL QUANTIFIED 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 QUANTIFIED AF PRED>::= <COL OR VAL><comp op>SOME<AF SUBQ> <ALL QUANTIFIED 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> Pravidla <* [AF] PRED>

  24. <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> <H SIMPLE PRED>::=<SIMPLE PRED> <H COMPLEX PRED>::=<COMPLEX PRED> <H AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL> <H AF FUNCTION PRED>::=<FUNCTION><comp op><FUNCTION> Pravidlo<HAVING CONDITION>

  25. <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 NOT IN AF PRED> | <AF COMPLEX COMP PRED> | <AF COMPLEX COMP AF PRED> Pravidlo<H AF COMPLEX PRED>

  26. Bez agregační funkce 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> Pravidla <AF * [AF] PRED>

  27. Překlad SQL => E3VPC

  28. Pravidla překladu • Překladové pravidlo pro symbol w • w::= posloupnost symbolů • Sevšemi pravidly gramatiky SQL jsou spojena překladová pravidla • Explicitní – pravidla popsaná metajazykem • Implicitní – ostatní pravidla • Některá syntaktická pravidla mohou mít i více překladových pravidel.Rozlišíme je indexem: i • Použití závisí na kontextu.

  29. Překlad terminálů • Je-li w terminál, pak 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í

  30. Implicitní překlad • BuďLHS::=RHS syntaktické pravidlo, w1, ..., wk neterminály na jeho pravé straně v pořadí zleva doprava. • Nechť neexistuje explicitní pravidlo překladu pro LHS::=RHS. • Pak LHS ::= w1...wk • syntaktické pravidlo: • <WHERE CLAUSE>::=WHERE <WHERE CONDITION> • překlad: • <WHERE CLAUSE> ::= <WHERE CONDITION>

  31. Pravidla popsaná metajazykem 1<FUNCTION> ::= odpovídající jméno agregační funkce a v závorkách její parametr “boolean expression of <X>” ::= odpovídající výraz v E3VPC, v němž jsou predikátové formule nahrazeny svými překlady “list of <X>” ::= seznam přeložených neterminálů oddělených čárkami <COL OR VAL> ::= proměnná.atribut nebo konstanta

  32. negativní interpretace • <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 <QUERY> syntaktické pravidlo: <QUERY> ::= SELECT [ALL | DISTINCT] <SELECT LIST><FROM CLAUSE> [<WHERE CLAUSE>][<GROUP BY CLAUSE>][<HAVING CLAUSE>] pravidlo překladu: <QUERY> ::= {<FROM CLAUSE>: ||<WHERE CLAUSE><HAVING CLAUSE>||F}

  33. <* 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: <FROM CLAUSE> ::= “list of <TABLE REFERENCE>” <TABLE REFERENCE> ::= <alias>  <table> <WHERE CLAUSE> ::= <WHERE CONDITION> <HAVING CLAUSE > ::= < HAVINGCONDITION> <GROUP BY CLAUSE> ::= <alias>.<column><alias>.<column> [<alias>.<column><alias>.<column>] ... zbývá definovat: <WHERE CONDITION>, <HAVING CONDITION>

  34. <* CONDITION> implicitní překlad a překlad popsaný metajazykem: <WHERE CONDITION>::=“boolean expression of <WHERE PRED>” <WHERE CONDITION>::= “boolean expression of <WHERE PRED>” <WHERE PRED>::=<SIMPLE PRED> | <COMPLEX PRED> <SIMPLE PRED>::=<COL OR VAL><comp op><COL OR VAL> <SIMPLE PRED>::=<COL OR VAL><comp op><COL OR VAL> <COMPLEX PRED>::= ... | <ALL QUANTIFIED PRED> | ... <COMPLEX PRED>::= ... | <ALL QUANTIFIED PRED>| ... <HAVING CONDITION>::=“boolean expression of <HAVING PRED>” <HAVING PRED>::= ... | <H AF COLUMN PRED> | ...  <HAVING PRED>::= ... |  <H AF COLUMN PRED> | ... zbývá tedy přeložit: <ALL QUANTIFIED PRED>, <H AF COLUMN PRED>, ...

  35. <ALL QUANTIFIED PRED>, ... <ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQ> 1<SUBQ><COL OR VAL> <comp op> 2<SUBQ> <SOME QUANTIFIED PRED>::=<COL OR VAL><comp op>SOME<SUBQ> 1<SUBQ><COL OR VAL> <comp op> 2<SUBQ> <COMPLEX IN PRED>::=<COL OR VAL>IN<SUBQ> 1<SUBQ><COL OR VAL> = 2<SUBQ> <COMPLEX NOT IN PRED>::=<COL OR VAL>NOT IN<SUBQ> 1<SUBQ><COL OR VAL> 2<SUBQ> <EXISTS PRED>::=EXISTS <SUBQ> 1<SUBQ> ...

  36. <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: 1<SUBQ> = {<FROM CLAUSE>: ||<WHERE CLAUSE><HAVING CLAUSE>||F} výsledek poddotazumusí být jenom jedna hodnota: 2<SUBQ> = <COL OR VAL>

  37. <H AF COLUMN PRED>, ... <H AF COLUMN PRED>::=<FUNCTION><comp op><COL OR VAL> 1<FUNCTION> {<FROM CLAUSE>:||<WHERE CLAUSE> <GROUP BY CLAUSE>||F} <comp op> <COL OR VAL> <H AF FUNCTION PRED>::=<FUNCTION><comp op><FUNCTION> 1<FUNCTION> {<FROM CLAUSE>:||<WHERE CLAUSE> <GROUP BY CLAUSE>||F} <comp op> 1<FUNCTION> {<FROM CLAUSE>:||<WHERE CLAUSE> <GROUP BY CLAUSE>||F} <H SIMPLE PRED>::=<SIMPLE PRED> {<FROM CLAUSE>:||<WHERE CLAUSE> <GROUP BY CLAUSE>||F} <SIMPLE PRED> ...

  38. Příklad dept(id, nofemp, location,manager) emp(empId, deptId, residence) SQL:SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  39. <QUERY> • <QUERY> ::= {FRCLAUSE||WHCLAUSEHCLAUSE||F} • FRCLAUSE::<alias name>intable name • WHCLAUSE::WHERE SEARCH COND • HCLAUSE ::= HAVING SEARCH COND{d in DEPT:||WHERE SEARCH CONDHAVING SEARCH COND||F} • SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  40. WHERE SEARCH COND • WHERE SEARCH COND::= ..::= ALL QUANTIFIED PRED • <ALL QUANTIFIED PRED>::=<COL OR VAL><comp op>ALL<SUBQ> • ALL QUANTIFIED PRED::1<SUBQ><COL or VAL><comp op>2<SUBQ>1<SUBQ> d.location = 2<SUBQ> • <SUBQ> = {FRCLAUSE:||WHCLAUSE>HCLAUSE>||F}1<SUBQ> => {e in EMP: ||e.deptId = d.id||F } • <SUBQ> = <COL or VAL>2<SUBQ> => e.residence • SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  41. WHERE SEARCH COND • {e in EMP: ||e.deptID = d.id||F } d.location = e.residence • SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  42. HAVING SEARCH COND • <HAVING SEARCH COND> = ”Boolean expression of <HPRED>” • <HPRED> = <HAFCOLUMN PRED>|... • <HAFCOLUMN PRED>::= • <FUNCSPEC> • {<FRCLAUSE>: ||<WHCLAUSE><GBCLAUSE>||F} <comp op><COL or VAL>AVG(d.nofemp){<FRCLAUSE>:||<WHCLAUSE><GBCLAUSE>||F} > 500 • SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  43. HAVING SEARCH COND • AVG(d.nofemp){<FRCLAUSE>:||<WHCLAUSE><GBCLAUSE>||F} > 500 • AVG(d.nofemp) • {d in DEPT:: • ||{e in EMP: ||e.deptID = d.id||F } d.location = e.residence •  • <GBCLAUSE>||F} > 500 • SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  44. <GBCLAUSE> • <GBCLAUSE> = <alias name><column name> <alias name><column name>d.manager dmanager • SELECTd.manager FROM dept dWHERE d.location = ALL SELECT e.residence FROM emp e WHERE e.deptId = d.idGROUP BY d.managerHAVING AVG(d.nofEmp)>500

  45. HAVING SEARCH COND AVG(d.nofemp){d in DEPT::||{e in EMP: ||e.deptID = d.id||F } d.location = e.residence<GBCLAUSE>||F} > 500 AVG(d.nofemp){d in DEPT::||{e in EMP: ||e.deptID = d.id||F } d.location = e.residenced.manager dmanager||F} > 500

  46. Dokončení příkladu SQL: schéma: SELECTd.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 dept(id, nofEmp, location, manager) emp(id, deptId, residence) 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}

  47. Ekvivalence SQL dotazů

  48. Úkol • Zjišťujeme, zda dané SQL výrazy jsou ekvivalentní. • Uděláme to přes E3VPC • SQL výrazy přeložíme di E3VPC a zjistíme ekvivalenciE3VPC výrazů. • Jak to provedeme?

  49. 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: {xS: P(x)} Q(x), {xS: P(x)} Q(x) Kanonická forma E3VPC výrazu

  50. S kanonickým výrazem lze pracovat ve 2VPC. • Ve 2VPC umíme zjistit ekvivalenci dvou výrazů. • Má každý E3VPC výraz svůj kanonický tvar? • Ano – následuje lemma, jejichž násobnou aplikací dostaneme kanonickou formu výrazu Pozorování

More Related