Formálna sémantika SQL dotazov M. Hrivík, L. Tomasy
Niečo z histórie Jazyk SQL: Vznikol začiatkom 70 rokov minulého storočia V dielňach IBM (konkrétne pánmi Donaldom D. Chamberlinom and Raymondom F. Boyceom) Pod názvom SEQUEL (Structured English Query Language), ktorý bol registrovanou obchodnou známkou leteckej spoločnosti UK-based Hawker Siddeley (preto názov zmenený na SQL Structure Query Language) Okamžite začali univerzitné projekty relačných databáz MIT projekt RDMS University of Berkeley projekt Ingres (QUEL -> SQL)
Niečo z histórie Komerčná sféra nezaostávala V druhej polovici 70. rokov spoločnosť Relational Software, Inc. (dnes známa ako Oracle) začala práce na relačnom databázovom systéme pre Americké námorníctvo a CIA (neskor aj pre iné vládne agentúry) Projekt vyústil v lete '79 do finálnej verzie Oracle V2 prvý komerčný SQL-based databázový produkt. Nespalo ani IBM (tvorca SQL) a vydalo v krátkej dobe niekoľko SQL-based DB produktov založených na IBM System R System/38, SQL/DS, DB2
Niečo z histórie SQL zažilo komerčný úspech, čo zohľadnil American National Standards Institute (ANSI) Štandardizuje sa v podstate doteraz SQL-86, SQL-89, SQL-92, SQL:1999, SQL 2003, SQL 2006, SQL:2008 SQL je jednoznačne úspešný jazyk, preto sa pozrieme hlbšie na jeho sémantiku
Čo nás čaká ďalej Jazyk SQL používa trojhodnotovú logiku Klasická predikátová logika používa len dve hodnoty (TRUE/FALSE) Potrebujeme formálny model! E3VPC Extended 3-valued tuple predicate calculus Niečo o tomto modele nám povie kolega Miro.
E3VPC K definícii sémantiky SQL slúži formálny model E3VPC, rozšírený trojhodnotový n-ticový predikátový kalkulus. (Extended three-valued Tuple Predicate Calculus). založený na klasickom dvojhodnotovom predikátovom kalkule obsahuje rozšírenia potrebné k definícii sémantiky SQL: kompaktné tvary agregácie trojhodnotovú logiku interpretačný operátor operátor rovnosti pre NULL operátor externej referencie 9.11.2010 6
Štruktúra E3VPC výrazov Štruktúra výrazu v E3VPC je následovná: {t v 1,...,v n : P v 1,..., v n } n-tica premenných v i cieľový zoznam t predikátová formula P interpretačný operátor ǁ...ǁα, kde α nadobúdajúci jednu z hodnôt T (TRUE) resp. F (FALSE) 9.11.2010 7
Cieľový zoznam t(v 1,...,v n ) udáva štruktúru výsledku výrazu definovaný je ako v 1 in R 1,..., v n in R n, kde v i in R i je rozsahová formula ohraničujúca premennú v i v relácii R i relácie sú považované za množiny navzájom rôznych prvkov E3VPC a preto každá n-tica obsahuje svoj unikátny identifikátor Cieľový zoznam určuje, ktoré premenné sa objavia vo výsledku výrazu a do ktorých relácií tieto premenné patria. 9.11.2010 8
Predikátová formula I Definovaná rekurzívne pomocou termov a operátorov porovnávania následovne: (1) Termy konštanta je term; pre premennú v i a atribut A j sú v i.a j a v i.a j termy ( je operátor externej referencie) ; pre výraz S, atribut A a agregačnú funkciu f je f(a)s term f {COUNT, AVG, SUM, MIN, MAX, COUNTD, AVGD, SUMD}. (2) Operátory porovnávania =,,, symboly pre operátory s ich zvyčajným významom (pozor, pre porovnávanie hodnoty NULL výsledok nie je definovaný); symbol operátoru rovnosti pre NULL (výsledok TRUE ak majú oba porovnávané termy hodnotu NULL). 9.11.2010 9
Predikátová formula II (3) Atomický predikát pre termy t 1, t 2 a operátor porovnávania θ je t 1 θ t 2 atomický predikát; T (TRUE) je atomický predikát F (FALSE) je atomický predikát U (UNKNOWN) je atomický predikát (4) Ak P je atomický predikát, potom ǁPǁ α je atomický predikát, kde ǁ...ǁ α interpretačný operátor. (5) Atomický predikát je predikátová formula. 9.11.2010 10
Predikátová formula III (6) Nech P a Q sú predikátové formule. Potom P, P Q a P Q sú predikátové formule. (7) Nech { t(v 1,...,v n ): ǁP(v 1,...,v n )ǁ α } je výraz E3VPC a Q(v 1,...,v n ) je predikátová formula, potom predikáty { t(v 1,...,v n ): ǁP(v 1,...,v n )ǁ α }Q(v 1,...,v n ) { t(v 1,...,v n ): ǁP(v 1,...,v n )ǁ α }Q(v 1,...,v n ) sú predikátové formule. (8) Žiadne iné formule nie sú predikátové formule. 9.11.2010 11
Interpretácia výrazov v E3VPC Výsledkom vyhodnotenia výrazu je množina n-tic voľných premenných (premenné cieľového zoznamu) splňujúcich predikátovú formulu. vyhodnocovanie ako v n-ticovom predikátovom kalkule rozdiel je v trojhodnotovej logike (,, ) vo formulách používame interpretačný operátor, ktorý prevedie trojhodnotový predikát do dvojhodnotového výsledok výrazu { x in R: P(x) } je nedefinovaný, pretože nie je známe, či n-tica x' splňujúca P(x') = U do výsledku patrí alebo nepatrí; (Poznámka: { x in R: P(x) } nie je platný výraz v E3VPC, interpretačný operátor ǁ...ǁ α je vo výraze povinný) 9.11.2010 12
Interpretačný operátor Nech P(x) je trojhodnotová a Q(x) dvojhodnotová predikátová formula. Interpretácia hodnôt UNKNOWN je definovaná následovne. DEF 1. Q(x) je pravdivo-interpretovaný dvojhodnotový ekvivalent P(x) (znač. ǁP(x)ǁ T ), ak pre každé x platí: P x =T Q x =T P x =F Q x =F P x =U Q x =T DEF 2. Q(x) je nepravdivo-interpretovaný dvojhodnotový ekvivalent P(x) (znač. ǁP(x)ǁ F ), ak pre každé x platí: P x =T Q x =T P x =F Q x =F P x =U Q x =F 9.11.2010 13
Termy, operátor Termy sú definované zvyčajným induktívnym spôsobom až na operátor externej referencie ( ). Operátor umožňuje modifikovať, ktoré pravidlá sa majú vzťahovať na premennú (určené formulou v i in R i ). vo výraze { v in R:P(v, v ) } indikuje operátor, že premenná v nemá byť zvažovaná v rozsahu hodnôt určených formulou v in R v patrí do rozsahu hodnôt najbližšiej nadradenej formule v in {v in S : {v in R: v.a 1 = v. B 1 }...} Prínos: Značné zjednodušenie prekladu SQL dotazov! 9.11.2010 14
Interpretácia agregačných funk. Agr. funkcia f na atribúte A pre výraz S (znač. f(a)s). agr. funkcie aplikované na množinu n-tic vracajú jednu hodnotu vracajú NULL ak sú aplikované na prázdnu množinu (okrem COUNT, COUNTD, tie vracajú 0) n-tice obsahujúce NULL hodnotu v atribute A nie sú použité pri agregácii (okrem COUNT) COUNTD, SUMD, AVGD navyše vyradzujú identické hodnoty na zvolenom atribúte pred ich konečným vyhodnotením 9.11.2010 15
Kvantifikované predikáty sú založené na kompaktných tvaroch, ktoré uľahčujú čítateľnosť výrazov užitočné pri popise štruktúry SQL dotazov význam zápisu v kompaktnom tvare { x in R: ǁW(x)ǁ α } P(x) pre všetky n-tice x patriace do množiny { x in R:ǁW(x)ǁ α } platí P(x) { x in R: ǁW(x)ǁ α } P(x) existuje najmenej jedna n-tica v množine { x in R: ǁW(x)ǁ α }, pre ktorú platí P(x) ak je množina { x in R: ǁW(x)ǁ α } prázdna, hodnota formuly s univerzálnym kvant. je TRUE, pri existenčnom kvant. je FALSE k rozšíreniu definície kompaktných tvarov na trojhodnotovú logiku je potrebný interpretačný operátor 9.11.2010 16
Kvantifikované predikáty Význam kvant. predikátov v E3VPC je def. následovne: { x in R: ǁW(x)ǁ α } P(x) = T ak je množina prázdna alebo pre všetky prvky platí P(x) = T = F ak nie je množina prázdna a aspoň jeden prvok x' splňuje P(x') = F = U inak (množina je neprázdna, neexistuje prvok x' taký, že P(x') = F a aspoň jeden prvok x'' splňuje P(x'') T, teda P(x'') = U) { x in R: ǁW(x)ǁ α } P(x) = F ak je množina prázdna alebo pre všetky prvky platí P(x) = F = T ak nie je množina prázdna a aspoň jeden prvok x' splňuje P(x') = T = U inak (množina je neprázdna, neexistuje prvok x' taký, že P(x') = T a aspoň jeden prvok x'' splňuje P(x'') F, teda P(x'') = U) 9.11.2010 17
Preklad SQL do E3VPC Preklad SQL dotazu do E3VPC je syntaxou riadená transformácia definovaná množinou prekladových pravidiel gramatiky SQL jazyka Každý preklad TR X neterminálu X na ľavej strane prepisovacieho pravidla je postupnosť prekladov TR Y 1..TR Y n kde Y i sú terminály alebo neterminály pravej strany prepisovacieho pravidla Vo všeobecnosti existuje len jedno prekladové pravidlo pre každé pravidlo SQL gramatiky Avšak niekedy môžeme mať viac prekladov pre jedno pravidlo TR X Riešime indexom (ďalší level), miesto použijeme TRj X, kde špecifikuje prekladovú funkciu
Gramatika SQL jazyka
Preklad SQL do E3VPC Základná štruktúra prekladu SQL dotazu vyzerá nasledovne: {TR FRCALUSE : TR WHCLAUSE TR HCLAUSE F } Kde je selekce? Selekce je daná klauzulami WHCLAUSE a HCLAUSE, avšak len platnosť podmienok. Projekce ako ju poznáme z SQL je v E3VPC zbytočná, pretože sa jedná už len o výber m-tice z n-tice, m <= n Kde je GROUP BY? Je skrytá v HCLAUSE, pretože grupovanie ovplyvňuje vyhodnocovanie HAVING a agregačných fukcií
Prekladové pravidlá
Ukážme si to na príklade Definujme si dve relace: DEPT(D_ID,NoEmp,location,manager) EMP(E_ID,D_ID,residence) Neriešme tu teraz typy ani integritné obmedzenia. Na daných relacích chceme nasledujúci dotaz: Mená manažérov oddelení, ktorých všetci zamestnanci bývajú na rovnakom mieste ako je umiestnené ich oddelenie, tak, že priemerný počet zamestnancov oddelení, ktoré manažuje rovnaký manažér, je vyšší ako 500.
Príklad V SQL by ten dotaz vyzeral asi takto: SELECT d.manager FROM DEPT d WHERE d.location = ALL SELECT e.residence FROM EMP e WHERE e.d_id = d.d_id GROUP BY d.manager HAVING AVG(d.NoEmp)>500
Príklad Preklad do E3VPC: Použijeme pravidlá 1-15 z prekladovej tabuľky a dostaneme hrubý základ {d in DEPT : TR WHERE SEARCH COND TR HAVING SEARCH COND F } Pomocou pravidla 23 môžeme zasubstituovať WHERE klauzulu TR1 SUBQ d.location=tr2 SUBQ A TR1 SUBQ ->{e in EMP : e.d ID =d.d ID F TR2 SUBQ ->e.residence
Príklad Celá WHERE klauzula potom vyzerá nasledovne {e in EMP : e.d_id=d.d_id F }d.location=e.residence Preklad HAVING SEARCH COND môžeme byť uskutočnený pomocou pravidla 36 AVG d.noemp {TR FRCLAUSE : TR WHCLAUSE TR GBCLAUSE F } 500 A tiež AVG d.noemp {d in DEPT : {ein EMP : e.d_id=d.d_id F }d.location=e.residence TR GBCLAUSE F } 500 GBCLAUSE preložíme pravidlom 15 d.manager =d. manager
Príklad A sme na konci {d in DEPT : AVG d.noemp {d in DEPT : {ein EMP : e.d_id=d.d_id F }d.location=e.residence d.manager=d.manager F } 500 F }
Ekvivalencia SQL dotazov Ekvivalencia dotazov je analyzovaná po ich trasformácii do ekvivalentného kanonického tvaru, ktorý sa ďalej riadi pravidlami dvojhodnotového predik. kalkulu. transformačné pravidlá zachovávaju ekvivalenciu výrazov v dvojhodnotovom kalkule je rovnosť výrazov dobre známa, preto považujeme definíciu transformácií za postačujúce riešenie problému, či sú dva SQL dotazy ekvivalentné Kanonický výraz je výraz E3VPC, kde: interpret. operátor je asociovaný ku atomickému predikátu iné interpret. operátory sa vo výraze nevyskytujú výraz neobsahuje kompaktné tvary 9.11.2010 27
Trasformácia do kanon. tvaru využíva obecné pravidlá dvojhodnotového kalkulu jediné neplatné pravidlá pre trojhodnotový predikát P sú tautológia a kontradikcia doplňujúce pravidlá pre interpretačný operátor sú: 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. xin R: P x xin R : P x 6. xin R: P x x in R: P x - distribúcia OR a AND (1 a 2), vynímanie negácie (3), idempotentné pravidlo (4) a distribúcia kvantifikátorov (5 a 6) 9.11.2010 28
Odstránenie kompakt. tvarov I výrazy produkované SQL dotazmi obsahujú kompaktné tvary (nie sú kanonické) ich eliminácia by vyžadovala dlhú postupnosť krokov; následujúce vety robia transformáciu priamočiarou VETA 1 {xin R: P x }Q x xin R: P x Q x VETA 2 {x in R: P x }Q x x in R : P x Q x 9.11.2010 29
Odstránenie kompakt. tvarov II Dôkaz 1: {xin R: P x }Q x xin R : P x Q x (pravidlo pred. kalkulu) x in R : P x Q x (pravidlo 5) x in R : P x Q x (pravidlo 2) x in R : P x Q x (pravidlo 4) Dôkaz 2: {x in R: P x }Q x x in R: P x Q x (pravidlo pred. kalkulu) xin R: P x Q x (pravidlo 6) xin R: P x Q x (pravidlo 1) xin R: P x Q x (pravidlo 3) xin R: P x Q x (pravidlo 4) 9.11.2010 30
Trojhodnotovosť a ekvivalencia Má interpretácia UNKNOWN hodnôt jazykom SQL efekt na ekvivalenciu SQL dotazov? Množina nebezpečných ekvivalencií SQL dotazy preložené a trasformované do kanonického tvaru majúce totožnú štruktúru len odlišné interpretačné operátory asociované s niektorým jednoduchým predikátom. Pr. Nech Q 1 a Q 2 sú SQL dotazy preložené do E3VPC TR Q 1 ={xin R: P x F } TR Q 2 ={x in R: P x T } výsledky sú identické len ak databáza neobsahuje NULL hodnoty, obecne n-tica x' taká, že P(x') = U je zahrnutá vo výsledku Q 2 ale nie v Q 1 a preto Q 1 a Q 2 tvoria množinu nebezpečných ekvivalencií 9.11.2010 31 Ktoré konštrukcie SQL môžu spôsobiť tento efekt?
Množina nebezp. ekvivalencií prekladové pravidlá produkujú len nepravdivo-interpretované predikáty (ǁ...ǁ F ) situácia ako pri Q 1 a Q 2 priamo pri preklade nenastane problémom môže ale byť transformácia výrazov do ich kanonického tvaru v skutočnosti existujú dve transformácie, ktoré môžu potenciálne viesť k vzniku mn. nebezpečných ekvivalen. pravidlo 3 prevod ǁ...ǁ α na ǁ...ǁ α (ǁ...ǁ F ǁ...ǁ F ) pravidlo 4 prevod ǁǁ...ǁα ǁ β na ǁ...ǁ α (ǁǁ...ǁ T ǁ F ǁ...ǁ T ) tieto pravidlá môžu generovať pravdivo-interpretované predikáty (ǁ...ǁ T ) 9.11.2010 32
Nebezpečné SQL dotazy I vyšetríme existenciu dotazov v SQL, ktoré patria do množiny nebezpečných ekvivalencií (ďalej MNE) Jednoduché dotazy (bez hniezdenia a kvantifikátorov) Dva jednoduché dotazy Q 1 a Q 2 nevytvárajú MNE. Aby ju tvorili, musia byť tvaru TR Q 1 ={x in R: P x F } TR Q 2 ={x in R : P x F } {xin R : P x T } alebo TR Q 1 ={x in R: P x F } TR Q 2 ={x in R : P x T F } {x in R : P x T } ale žiadny dotaz v SQL nie je tvaru Q 2 a preto takáto situácia nemôže nastať. 9.11.2010 33
Nebezpečné SQL dotazy II Univerzálna kvantifikácia Predikát obsahujúci môže byť v SQL vyjadrený 5 rôznymi spôsobmi (v dvojhodnotovej interpr. sú ekvival.). Ich preklad je (1) { y in S : Q x, y P y } (2) { y in S : Q x, y }P y (3) { y in S : P y }Q x, y (4) { y in S : Q x, y } P y (5) { y in S : P y } Q x, y,kde vždy α = F, lebo v SQL je vyhľadávacia podmienka interpretovaná ako FALSE a β závisí od štruktúry dotazu. Po transformácii do ekvivalentného kanonického tvaru máme (1') y in S : Q x, y P y (2' a 4') yin S : Q x, y P y (3' a 5') yin S : Q x, y P y 9.11.2010 34
Nebezpečné SQL dotazy III Výsledné kanonické výrazy sú ekvivalentné len ak β = α a to obecne nemusí neplať (existencia MNE). Existenčna kvantifikácia Predikát obsahujúci môže byť v SQL vyjadrený 5 rôznymi spôsobmi, po preklade (pre α a β rovnaké úvahy ako pri ) (1) { y in S : Q x, y P y } (2) { y in S : Q x, y }P y (3) { y in S : P y }Q x, y (4) { y in S : Q x, y } P y (5) { y in S : P y } Q x, y Po transformácii do kanonického tvaru dostaneme (1') y in S : Q x, y P y (2' a 4') yin S : Q x, y P y (3' a 5') yin S : Q x, y P y 9.11.2010 35
Nebezpečné SQL dotazy IV Na rozdiel od univ. kvantifikácie sú tieto tri výrazy ekvivalentné len ak α = β. Pretože vždy α = F, MNE môže vzniknúť len ak je kvantif. predikát obsiahnutý v dotaze, ktorý tvorí preklad s β = T (t.j. -kvan. predik. je zložkou (P Q) -kvan. predikátu) Komplexný predikát porovnávania V SQL je vyjadrený jediným spôsobom a preto jeho preklad vytvára len jednu triedu ekvivalencií. Všeobecné SQL dotazy (zhrnutie) (1) SQL dotazy bez nepatria do MNE (2) SQL dotazy obsahujúce vždy tvoria MNE (3) počet rôznych interpretácií predikátov v dotazoch s rovnakou kanonickou štruktúrou a aspoň jedným predikátom vzrastá pri existencií ďalších kvant. predikátov v -kvantifiko- vanom predikáte 9.11.2010 36
Ďakujeme za pozornosť - Ukázali sme si formálny model s rovnakou silou ako SQL - Tiež sme si ukázali, ze 2 pravdivostné hodnoty sú nám málo - 3 hodnoty potrebujeme aj pre rozhodnutie o ekvivalencii dvoch SQL dotazov 9.11.2010 37