Yhdistävä kysely - Conjunctive query

Vuonna tietokanta teoria , joka on yhdistetyssä kysely on rajoitettu muoto ensimmäisen kertaluvun kyselyt käyttäen loogista yhdessä operaattori. Monet ensimmäisen asteen kyselyt voidaan kirjoittaa yhdistäviksi kyselyiksi. Erityisesti suuri osa relaatiotietokannoista tehdyistä kyselyistä voidaan ilmaista tällä tavalla. Yhdistävillä kyselyillä on myös useita toivottavia teoreettisia ominaisuuksia, joita suuremmilla kyselyluokilla (esim. Relaatioalgebran kyselyt) ei jaeta.

Määritelmä

Konjunktiiviset kyselyt ovat yksinkertaisesti (verkkotunnuksesta riippumattoman) ensimmäisen asteen logiikan fragmentti, jonka antaa kaavajoukko ja joka voidaan rakentaa atomikaavoista käyttämällä konjunktiota ∧ ja eksistentiaalista kvantifiointia ∃, mutta ei käyttämällä disjunktiota ∨, negatiivista ¬ tai yleistä kvantifiointia ∀ . Jokainen tällainen kaava voidaan kirjoittaa (tehokkaasti) vastaavaksi kaavaksi liitteessä olevassa normaalimuodossa , joten tämä muoto on yleensä yksinkertaisesti oletettu.

Näin ollen yhdistävät kyselyt ovat seuraavan yleisen muodon:

,

kanssa vapaa muuttujia kutsutaan erottaa muuttujia, ja sidottu muuttujat kutsutaan mitäänsanomaton muuttujia. ovat atomikaavoja .

Esimerkkinä siitä, miksi rajoittaminen verkkotunnuksesta riippumattomaan ensimmäisen asteen logiikkaan on tärkeää, harkitse , mikä ei ole toimialueesta riippumaton; katso Coddin lause . Tätä kaavaa ei voida toteuttaa relaatioalgebran select-project-join -fragmentissa, joten sitä ei pitäisi pitää yhdistävänä kyselynä.

Yhdistävät kyselyt voivat ilmaista suuren osan kyselyistä, jotka lähetetään usein relaatiotietokannoissa . Esimerkkinä voidaan kuvitella relaatiotietokanta, joka tallentaa tietoja opiskelijoista, heidän osoitteistaan, suorittamistaan ​​kursseista ja sukupuolesta. Kaikkien miesopiskelijoiden ja heidän osoitteidensa löytäminen kurssille, johon osallistuu myös naisopiskelija, ilmaistaan ​​seuraavalla yhdistävällä kyselyllä:

(student, address) . ∃ (student2, course) .
   attends(student, course) ∧ gender(student, 'male') ∧ 
   attends(student2, course) ∧
   gender(student2, 'female') ∧ lives(student, address)

Huomaa, että koska ainoa kokonaisuus kiinnostava on miesopiskelija ja hänen osoitteensa, nämä ovat vain erottaa muuttujat, kun muuttujat course, student2vain eksistentiaalisesti määrällisesti eli mitäänsanomaton.

Fragmentit

Yhdistäviä kyselyitä, joissa ei ole erottuvia muuttujia, kutsutaan boolen yhdistäviksi kyselyiksi . Konjunktiivisessa kyselyitä jossa kaikki muuttujat erottuvat (eikä muuttujat ovat sitoutuneet) kutsutaan equi-liittymään kyselyitä , koska ne ovat vastaavia, että relaatio calculus , on equi-liittymään kyselyitä realaatioalgebralla (valitessasi kaikki sarakkeet tuloksesta ).

Suhde muihin kyselykieliin

Yhdistävät kyselyt vastaavat myös relaatioalgebran select-project-join -kyselyitä (eli relaatioalgebran kyselyitä, jotka eivät käytä operaatiounionia tai eroa) ja SQL -valintoja mistä-mistä-kyselyitä, joissa kus -ehto käyttää yksinomaan atomien tasa -arvo -olosuhteet, eli sarakkeiden nimistä ja vakioista rakennetut ehdot, joissa ei käytetä muita vertailuoperaattoreita kuin "=", yhdistettynä "ja". Erityisesti tämä sulkee pois aggregoinnin ja alikyselyiden käytön. Esimerkiksi yllä oleva kysely voidaan kirjoittaa yhdistetyn kyselyfragmentin SQL -kyselynä nimellä

select l.student, l.address
from   attends a1, gender g1,
       attends a2, gender g2,
       lives l
where  a1.student = g1.student and
       a2.student = g2.student and
       l.student = g1.student and
       a1.course = a2.course and
       g1.gender = 'male' and
       g2.gender = 'female';

Datalog

Loogisen merkinnän lisäksi yhdistäviä kyselyitä voidaan kirjoittaa myös Datalog -sääntöinä . Monet kirjoittajat pitävät itse asiassa seuraavaa Datalog -merkintää yllä olevasta kyselystä:

 result(student, address) :- attends(student, course),  gender(student, male),
                             attends(student2, course), gender(student2, female),
                             lives(student, address).

Vaikka tässä merkinnässä ei ole kvantifikaattoreita, säännön alussa esiintyvät muuttujat ovat edelleen implisiittisesti yleisesti kvantifioituja , kun taas muuttujat, jotka esiintyvät vain säännön rungossa, on edelleen implisiittisesti eksistentiaalisesti kvantifioituja.

Vaikka mikä tahansa yhdistävä kysely voidaan kirjoittaa Datalog -sääntönä, kaikkia Datalog -ohjelmia ei voida kirjoittaa yhdistävänä kyselynä. Itse asiassa vain yksittäiset säännöt laajennetuista predikaattisymboleista voidaan helposti kirjoittaa vastaavaksi yhdistäväksi kyselyksi. Ongelma sen määrittämisessä, onko tietylle Datalog-ohjelmalle olemassa vastaava ei- toistuva ohjelma (joka vastaa positiivista suhteellista algebran kyselyä tai vastaavasti positiivisen eksistentiaalisen ensimmäisen kertalogiikan kaavaa tai erityistapauksessa yhdistävää kyselyä) tunnetaan Datalogin rajallisuusongelmana ja sitä ei voi päättää.

Laajennukset

Yhdistävien kyselyiden laajennukset, joissa on enemmän ilmaisuvoimaa :

Kaikkien näiden laajennusten muodollinen tutkimus on perusteltua niiden soveltamisella relaatiotietokantoihin ja kuuluu tietokantateorian piiriin .

Monimutkaisuus

Sillä tutkimus laskennallisen monimutkaisuuden arvioida conjunctive kyselyitä, kaksi ongelmaa on erotettava. Ensimmäinen on ongelma yhdistävän kyselyn arvioinnissa relaatiotietokannassa, jossa sekä kyselyä että tietokantaa pidetään osana syötettä. Tämän ongelman monimutkaisuutta kutsutaan yleensä yhdistetyksi monimutkaisuudeksi , kun taas kyselyn monimutkaisuutta arvioitaessa kyselyä relaatiotietokannassa, jossa kyselyn oletetaan olevan kiinteä, kutsutaan tietojen monimutkaisuudeksi .

Yhdistävät kyselyt ovat NP-täydellisiä yhdistetyn monimutkaisuuden suhteen, kun taas yhdistävien kyselyiden datan monimutkaisuus on hyvin alhainen rinnakkaisessa monimutkaisuusluokassa AC0 , joka sisältyy LOGSPACEen ja siten polynomiaikaan . NP-kovuus on conjunctive kyselyjä voi vaikuttaa yllättävältä, koska relaatioalgebra ja SQL tiukasti luokitella side- kyselyt ja ovat näin ollen ainakin yhtä kovaa (itse asiassa, relaatioalgebralla on PSPACE -complete suhteessa yhdistetyn monimutkaisuus ja sen vuoksi on vielä vaikeampaa laajasti monimutkaisuus-teoreettisia oletuksia). Kuitenkin tavanomaisessa sovellusskenaariossa tietokannat ovat suuria, kun taas kyselyt ovat hyvin pieniä, ja tietojen monimutkaisuusmalli voi olla sopiva vaikeuksien tutkimiseen ja kuvaamiseen.

Ongelma luetellaan kaikki vastaukset kuin Boolen konjunktiivinen kysely on tutkittu yhteydessä luettelointi algoritmeja , sen kanssa, että (alle noin laskennallinen kovuus oletuksia ) kyselyistä, jonka laskentaa voidaan suorittaa lineaarisen ajan esikäsittely ja vakio viive jokainen ratkaisu. Nämä ovat erityisesti asyklisiä yhdistäviä kyselyitä, jotka täyttävät myös free-connectx- ehdon.

Muodolliset ominaisuudet

Konjunktiivisessa kyselyt ovat yksi suurista menestystarinoista tietokannan teorian , että monia mielenkiintoisia ongelmia, jotka ovat laskennallisesti vaikeaa tai undecidable suuremmille luokkien kyselyt ovat toteutettavissa yhdistetyssä kyselyitä. Harkitse esimerkiksi kyselyn suojausongelmaa. Kirjoitamme kahdelle saman kaavan tietokantasuhteelle vain ja vain, jos jokainen esiintyvä tuple esiintyy myös . Annetaan kyselyn ja relaatiotietokannan Esimerkiksi , kirjoitamme tulos suhde arvioida kyselyn ilmentymän yksinkertaisesti . Kun otetaan huomioon kaksi kyselyä ja yksi tietokantakaava , kyselyn sisällyttämisongelma on ongelma päätettäessä, onko kaikkien mahdollisten tietokanta -esiintymien kohdalla syöttötietokantakaavan mukainen . Kyselyn rajoittamisen pääasiallinen sovellus on kyselyn optimointi: Kahden kyselyn vastaavuuden päättäminen on mahdollista yksinkertaisesti tarkistamalla keskinäinen suojaus.

Kyselyn suojausongelma ei ole ratkaistavissa suhteellisessa algebrassa ja SQL: ssä, mutta se on ratkaistavissa ja NP-täydellinen liitännäiskyselyissä. Itse asiassa käy ilmi, että liitännäiskyselyiden kyselyn suojausongelma on täsmälleen sama ongelma kuin kyselyn arviointiongelma. Koska kyselyt ovat yleensä pieniä, NP-täydellisyyttä pidetään yleensä hyväksyttävänä. Yhdistelmäkyselyjen kyselynrajoitusongelma vastaa myös rajoitusten tyytyväisyysongelmaa .

Asykliset yhdistävät kyselyt ovat tärkeä luokka konjunktiivisista kyselyistä, joilla on polynomi-ajan yhdistetty monimutkaisuus . Kyselyn arviointi ja siten kyselyn sisällyttäminen on LOGCFL -täydellinen ja siten polynomiajassa . Yhdistelmäkyselyjen syklisyys on kyselyiden rakenteellinen ominaisuus, joka määritellään kyselyn hypergraafin suhteen : yhdistävä kysely on asyklinen silloin ja vain, jos sen leveys on hypertree. , tämä käsite vastaa kyselyn muuttujien riippuvuuskaavion puuleveyttä (eli kuvaaja, jossa kyselyn muuttujat ovat solmuja ja suunnattu reuna kahden muuttujan välillä vain ja ainoastaan, jos on olemassa atomikaava tai kysely ) ja konjunktiivinen kysely on asyklinen silloin ja vain, jos sen riippuvuuskäyrä on asyklinen .

Tärkeä yleistys acyclicity on käsite rajoitetun hypertree-leveys , joka on mitta siitä, kuinka lähellä asykliset hypergraph on, analoginen rajoitettu treewidth sisään kuvaajat . Rajoitetun puun leveyden yhdistävillä kyselyillä on yhdistetty LOGCFL- monimutkaisuus.

Rajoittamattomilla yhdistävillä kyselyillä puutiedoista (ts. Relaatiotietokanta, joka koostuu puun binaarisesta lapsisuhteesta sekä unaarisista suhteista puusolmujen merkitsemiseksi) on monimutkainen polynominen aika.

Viitteet

Ulkoiset linkit