formální sémantika sql dotazování

Post on 16-Oct-2021

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Formální sémantika SQL dotazování

Elina HazaranZuzana Vytisková

6.11. 2012

podle M. Negri, G. Pelagatti, L. Sbattela, 1991

● Základní pojmy

● Formální logický model

● Pravidla pro překlad SQL dotazů do tohoto modelu

● Dokazování ekvivalence SQL dotazů

Formální model:

● ROZŠÍŘENÁ TŘÍHODNOTOVÁ PREDIKÁTOVÁ LOGIKA(Extended three-value predicate calculus = E3VPC)○ true, false, unknown

● založena na "vícedruhové" nebo "vícesortové" logice (Many-sorted logic)○ termy různého druhu

● umožňujě pokrýt všechny dotazy

SQL -> E3VPC

Pravidla umožňují převést libovolný dotaz v SQL do E3VPC formy

(Zpracována podle ANSI normy, tedy 1986)

Jsou relativně jednoduchá (je jich jen 33)

Ekvivalence dotazů

● pravidla pro převedení z E3VPC do tvaru, se kterým je možno zacházet postupy základní dvouhodnotové logiky

● situace, kdy nefunguje dobře

E3VPC - rozšíření

Symboly, které se nevyskytují v dvouhodnotové logice, ale jsou nutné pro definici SQL sémantiky:-kompaktní formy-agregační funkce-tříhodnotová logika-interpretační operátor-operátor na porovnání NULL hodnot - externí referenční operátor ↑

Struktura E3VPC výrazu

{t(v1,. . .,vn) :||P(v1,. . .,vn||α }

cílový seznam

n-tice proměnných predikátová

formule

interpretační operátor

nabývá hodnot: T(true), F(false)

Cílový seznam

- Má tvar

v1 in R1, . . ., vn in Rn

-Lze chápat jako definiční obor, nad kterým bude výhodnocen predikát-SELECT c.id FROM CLIENTS c odpovídá

c in CLIENTS

Predikátová formule

Je definována rekurzivně pomocí termů a porovnávacích operátorů:1) Term

- konstanta- vl.Al a vl↑.Al - f(A)S

2) Porovnávací operátory- = , ≠ , > , < , . . . -

Predikátová formule - pravidla

1) Atomické predikáty- t1 θ t2- T, F, U- || P ||α

2) Atomický predikát je predikátovou formulí3) ¬P, P ∨ Q, P ∧ Q 4) kvantifikator (kompaktní forma) ∀/ ∃{t(v1,...,vn):||P(v1,...,vn)||

α}Q(v1,...,vn). . . a nic jiného

Interpretace E3VPC výrazu - interpretační operátor

1) Pravdivě interpretovaný (notace || ||T)P(x) = T ⇒ Q(x) = TP(x) = F ⇒ Q(x) = FP(x) = U ⇒ Q(x) = T

2) Nepravdivě interpretovaný (notace || ||F)P(x) = T ⇒ Q(x) = TP(x) = F ⇒ Q(x) = FP(x) = U ⇒ Q(x) = F

Interpretace E3VPC výrazů - termy

Externí referenční operátorindikuje, že proměnnou nepočítáme v

daném oboru (in R), ale patří do nejbližšího vnějšího

oboru (in S)

{v in R: P(v, v ↑)}

{v in S:∀{v in R:||v.A1=v↑.B1||α}. . .}

Interpretace E3VPC výrazů - termy

Agregační funkce-dostává n-tice na vstup, výstupem je jednahodnota-pokud je daná množina prazdná vrátí NULL (kromě COUNT a COUNTD vracejí 0)-vynechají NULL hodnoty (kromě COUNT)-COUNTD, SUMD, AVGD nezapočítávají duplicitní hodnoty

Interpretace E3VPC výrazu - kvantifikátory a kompaktní formy

∀{x in R:||W(x)||α}P(x)=T prázdná množina, nebo pro všechny elementy platí P(x)=F množina není prázdná, je alespoň jeden element pro který P(x) neplatí=U jinak

∃{x in R:||W(x)||α}P(x)=F prázdná množina, nebo pro všechny elementy neplatí P(x)=T množina není prázdná, je alespoň jeden element pro který P(x) platí=U jinak

SQL syntax a tranformační pravidla

SQL SYNTAXPravidla - "generující gramatika" očíslovaná (1..50)ve formátu <QUERY> = SELECT[ALL|DISTINCT]<SELECTLIST><FRCLAUSE>[<WHCLAUSE>][<GBCLAUSE>][<HCLAUSE>]<WHCLAUSE> = WHERE <WHERE SEARCH CONDITION><SIMPLEPRED>=<COL OR VAL> <comp op> <COL OR VAL>

KEYWORDS - tučněUPPERCASE - neterminálylowercase - terminály

Převáděcí pravidlaNěkterým pravidlům SQL syntaxe odpovídá přepis do formy E3VPC.Přepisuje se neterminál X z levé strany TR <X>na zřetězení přepisů TR<Y1>... TR<Yn> doplněné o další symboly E3VPCkde <Yi> je terminál nebo neterminál podle pravé strany pravidla, případně "zděděný" neterminál X.

<TABLE REFERENCE>=<table name><correlation name>-> <correlation name> in <table name>

Specifické vlastnosti překladu (1)

● nepovinné prvky se převedou na prázdný výraz

● implicitní pravidlo převádí zřetězení prvků na zřetězení jejich překladů

● terminály se nepřekládají - stávají se z nich jména proměných

● <COL OR VAL> je v SQL neterminál, převádí se na terminál

● SQL pravidla typu "booleovská hodnota" <P> se převedou na "booleovská hodnota" TR <P>

Specifické vlastnosti překladu (2)

● Dvojice TR1 a TR2 se překládá přímo○ TR1 <FUNC SPEC> se překládá rovnou na jméno

funkce + proměnná.atribut○ TR2 <FUNSPEC> se překládá rovnou jako 0

respektive NULL - vždy se vyskytují pohromadě, první vede na vyhodnocení agregační funkce, druhá dodává hodnotu pro případ prázdné množiny

● obecně odpovídá jednomu syntaktickému pravidlu jedno převáděcí ->stejná čísla

● vnější SELECTLIST se nepřevádí (slouží v SQL jen pro vypsání výsledku; nemá vliv)

Stručné zdůvodnění pravidel- základní struktura (1)

● Základem každého dotazu/poddotazu je formule ve tvaru{ TR <FRCLAUSE> : || TR <WHCLAUSE> ∧ TR <HCLAUSE> ||F } která definuje množinu ntic vracenou dotazem

● SELECT je zpracováván v FALSE-intepretaci, což odpovídá tomu, že prvky s hodnotou UNKNOWN nesplňují podmínku "vyber takové, pro které platí"

Stručné zdůvodnění pravidel - základní stuktura (2)

● GROUP BY nepatří do základního tvaru - neovlivňuje výslednou množinu

● Předpokládá se, že každá ntice obsahuje unikátní identifikátor; nejsou řešeny duplicity (pokud není implicitně řečeno) - odpovídá ALL

● SELECTLIST poddotazů je převáděn kompletně (výběr sloupce, agregace) - má vliv na výsledek vnější funkce

Stručné zdůvodnění pravidel- složené predikáty

= takové, které zahrnují poddotaz● pravidla 20 a 38 jsou symetrická - stejné

zpracování v sekci WHERE <COMPLEXPRED> i HAVING <HACOMPLEXPRED>

● oddělená pravidla pro jednoduché poddotazy (výstupem je celý list) <SUBQ> a pro poddotazy, kde výstupní seznam obsahuje funkci <AFSUBQ>

● všechny čtyři kombinace jsou převáděny strukturou TR1.... TR2

Stručné zdůvodnění pravidel-klíčové slovo DISTINCT

● Po agregačních funkcích - je zahrnuto do zpracování funkce

● Ve výsledku poddotazu - není potřeba samostatně, je vyřešeno přítomností kvantifikátoru v pravidlech pro poddotazy

Stručné zdůvodnění pravidel- prázdné množiny

● Prázdné množiny jako výsledek poddotazu○ pro ∀ je výsledek TR1 TRUE○ pro ∃ je výsledek TR1 FALSE○ jednoduché funkce fungují díky TR2 přímo○ funkce <AFSUBQ> typu obsahují v příslušných

pravidlech speciální term TR3● Pravidla pro práci se složenými

porovnávacími predikáty obsahují speciální term pro korektní zpracování prázdných množin

Příklad

SELECT d.managerFROM DEPT dWHERE d.location = ALL

SELECT e.residenceFROM EMP eWHERE e.d# = d.d#

GROUP BY d.managerHAVING AVG(d.nofemp) >500

Řešení● 1-15:

● <WHERE..>

● TR1

● TR2

● <WHERE..>

Řešení - dokončení

● <HAVING..>

● <GB..>

● =>

Ekvivalence SQL dotazů

Postup:● převod obecného E3VPC výrazu do

kanonického tvaru● porovnání pomocí dvouhodnotové

predikátové logiky

. . . použití třihodnotové predikátové logiky ukazuje, že i když dva dotazy jsou ekvivalentní v dvouhodnotové interpretaci, můžou se lišit v reálném SQL

Kanonický E3VPC výraz

● s každým atomickým predikátem je asociován interpretační operátor

● výraz neobsahuje žadné další interpretační operátory

● výraz neobsahuje kompaktní formy

s kanonickým výrazem můžeme dál pracovat pomocí dvouhodnotové logiky (důvod: každý atomický predikát má interpretační operátor, a interpretována třihodnotová logika je dvouhodnotová, jak již bylo ukázáno)

Transformace E3VPC výrazu do kanonické formy

1. ||P(x) ∨ Q(x)||α ⇔ ||P(x)||α ∨ ||Q(x)||α

2. ||P(x) ∧ Q(x)||α ⇔ ||P(x)||α ∧ ||Q(x)||α

3. ||¬P(x)||α ⇔¬||P(x)||¬α

4. || ||P(x)||α||β ⇔ ||P(x)||α

5. ||∃ x in R: P(x)||α ⇔ ∃ x in R: ||P(x)||α

6. ||∀ x in R: P(x)||α ⇔ ∀ x in R: ||P(x)||α

Neplatí:P ∨ ¬P ⇔ 1 a P ∧ ¬P ⇔ 0nedefinují jak posunout interpretační operátor z podvýrazu do každého atomického predikátu, takže je nepotřebujeme

Eliminace kompaktních forem

Věta 1.

||∃{x in R: ||P(x)||α}Q(x)||β ⇔ ∃ x in R: ||P(x)||α ∧ ||Q(x)||β

Věta 2.

||∀{x in R: ||P(x)||α}Q(x)||β ⇔ ∀ x in R: ||¬P(x)||¬α ∨ ||Q(x)||β

Ekvivalence SQL dotazů - tříhodnotová logika

Problém: Interpretace unknown: dva dotazy, které se v kanonickém tvaru liší jen o typ interpretace (T nebo F)

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

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

. . . jsou ekvivalentní?

Ekvivalence SQL dotazů - množina kritické ekvivalence

-SQL dotazy, u kterých se může výše uvedený problém projevit, tvoří množinu kritické ekvivalence (critical equivalence set).-Nastává při převodu E3VPC výrazu na kanonický tvar (kvůli pravidlům 3 a 4)

Jaké typy dotazů v SQL tam patří?

Množina kritické ekvivalence - jednoduchý dotaz

NE Pravidlo 3:TR<Q1> = {x in R: ||¬P(x)||F}

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

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

TR<Q2> = {x in R: || ||P(x)||T||F} ⇒{x in R: ||P(x)||T}...ale v SQL neexistuje dotaz jako Q2

Množina kritické ekvivalence - univerzální kvantifikace

ANO

Q1: SELECT * FROM R x WHERE NOT EXISTS SELECT * FROM S y WHERE x.Ai = y.Bi ∧ y.Bj ≠ 'P'Q2: SELECT * FROM R x WHERE NOT x.Ai IN SELECT y.Bi FROM S y WHERE x.Bj ≠ 'P'

Množina kritické ekvivalence - univerzální kvantifikace

E3VPC:1) ||¬∃ {y in S: ||Q(x,y) ∧ P(y)||α}||β

2) ||¬∃ {y in S: || P(y)||α}Q(x,y)||β

Kanonický tvar:1)∀ y in S: ||¬Q(x,y)||¬α ∨ ||¬P(y)||¬α

2)∀ y in S: ||¬Q(x,y)||β ∨ ||¬P(y)||¬α

Jsou ekvivalentní právě když β = ¬α, což obecně nemusí platit (a neplatí v uvedeném příkladu, kde β = α = F)

Množina kritické ekvivalence - existenční kvantifikace

ANOE3VPC:1) ||∃{y in S:||Q(x,y) ∧ P(y)α}||β

2) ||∃{y in S:||P(y)||α}Q(x,y)||β

Kanonický tvar:1) ∃ y in S: ||Q(x,y)||α ∧ ||P(y)||α

2) ∃ y in S: ||Q(x,y)||β ∧ ||P(y)||α

Jsou ekvivalentní právě když α = β (α je vždy F, β může být T pokud predikát je části univerzálně kvantifikovaného predikátu)

Ekvivalence SQL dotazů - závěr

(1) SQL dotazy, které neobsahují univerzální kvantifikátor nikdy nepatří do množiny kritické ekvivalence(2) SQL dotazy, které obsahují univerzální kvantifikátor vždy patří do množiny kritické ekvivalence

Děkujeme za pozornost

top related