20112 ullman181 (2)

20112 ullman181 (2)



5 JĘZYK RAZ DANYCH SOL

5.10.4. Negacja warstwowa

Zapytania, które stanowią definicje relacji rekurencyjnych, nie mogą być dowolnymi zapytaniami SQL. Podlegają one pewnym ograniczeniom, z których najważniejsze polega na tym, że negacja relacji wzajemnie rekurencyjnych musi być warstwowa, zgodnie z definicjami z p. 4.4.4. W punkcie 5.10.5 omówimy zasady rozszerzenia uwarstwienia na inne struktury, które występują w języku SQL, ale których nie ma w Datalogu, takie jak na przykład agregaty'.

PRZYKŁAD 5.55

Rozważmy ponownie zadanie z przykładu 4.39, polegające na odszukaniu tych par miast (x, y\ które można połączyć ciągiem rejsów linii lotniczych UA, ale których nie można połączyć rejsami linii AA. Aby wyrazić koncepcję podróżowania potencjalnie nieskończonym ciągiem rejsów jednych linii lotniczych, trzeba skorzystać z rckurcncji. Jednak w tym zadaniu trzeba użyć także operatora negacji, po wyliczeniu bowiem relacji UAłćtczy i AAłączy trzeba policzyć ich różnicę, a więc pojawia się problem uwarstwienia.

1)    WITH

2)    Trójki AS SF.LEC7 linia, z, do FROM Rejsy,

3)    RECURSIVE Dostępne(linia, z, do) AS

4)    Trójki

5)    UNION

6)    (SELECT Trójki . linia,

Trójki.z, Dostępne.do

7)    FROM Trójki, Dostępne

8)    W HF. RE Trój ki. do = Dostępno z AND

Trójki.linia = Dostępne.linia

9)    }

10)    {SELECT z, do FROM Dostępne WHERE linia = 'UA'

11)    EXCEPT

12)    (SELECT z, do FROM Dostępne WHERE

linia 'AA');

RYSUNEK 5.24

Zapytanie uwarstwione miast połączonych rejsami jednej lub dwóch linii

W SQL3 można postępować w takich sytuacjach podobnie jak w Datalogu, trzeba tylko uprzednio zastąpić postać nieliniową rekurencji postacią lewo- lub prawostronnie liniową, tak jak to zrobiono w przykładzie 5.53. Jednakże, aby opisać różnice w sposobie wykonywania, zdefiniujemy rckuren-cyjnic nic tylko pojedynczą relację Dostępne O ir.ia, z, do), której krotki (/, r, d) oznaczają, że można dolecieć z miasta z do miasta d rejsami linii lotniczych /. Określimy także relację Trójki (linia, z, do}, która jest rzutem relacji Rejsy na trzy odpowiednie składowe. Zapytanie zostało przedstawione na rys. 5.24.

Definicja relacji Dostępne, zapisana w wierszach od 3) do 9), jest sumą dwóch termów. Podstawowym termem jest relacja Trójki, określona w wierszu 4). Term indukcyjny został przedstawiony jako zapytanie w w ierszach od 6) do 9) i stanowi on złączenie relacji Trój ki z relacją Dostępne. W wyniku przetworzenia tych termów- do relacji Dostępne zostaną dołączone krotki (/, z, d), które znaczą, że z miasta z do miasta d można dolecieć jednym lub kilkoma, ale rejsami tylko linii lotniczych /.

Samo zapytanie zostało zapisane w wierszach od 10) do 12). Po przetworzeniu instrukcji w wierszu 10) otrzymuje się wszystkie połączenia liniami UA, a w 12) te, które są możliwe poprzez, rejsy linii lotniczych AA. Wynikiem jest różnica tych dwóch zbiorów połączeń.

PRZYKŁAD 5.56

Na rysunku 5.24 negacja została zapisana za pomocą EXCEPT w wierszu II) i jest ona uwarstwiona, ponieważ jest wykonywana dopiero po zakończeniu rckurcncji występującej w wierszach od 3) do 9). Natomiast w przykładzie 4.40 negacja nic była uwarstwiona, jej bezpośrednie tłumaczenie na SQL3 zostało przedstawione na rys. 5.25. Tutaj f.xcf,pt występuje wewnątrz definicji rekurencyjnej. Tak zapisane zapytanie dotyczy tylko wartości P, mimo że trzeba pytać także o wartość Q oraz pewrne przekształcone wartości

zP'\Q.

i)

WITH

2)

RECURS1VE P(x) AS

3)

(SELECT *

FROM

R)

4)

F.XCEP?

5}

(SELECT *

FROM

0),

6)

RECURSIVE Q(x) AS

7)

(SELECT *

FROM

R>

8)

EXCEPT

9)

(SELECT *

FROM

P)

10)

SELECT * FROM P;

RYSUNEK 5.25

Zapytanie nic warstwo we, niedozwolone w SQI,3


Sposób korzystania z EXC£PT, który został przedstawiony na rys. 5.25 w w ierszach od 4) do 8), nie jest dopuszczalny w $QL3, ponieważ w obu przypadkach drugi argument jest relacją wzajemnie rekurencyjną z relacją definiowaną. A więc stosuje się tu negację, która nie jest uwarstwiona, a za-


Wyszukiwarka

Podobne podstrony:
73749 ullman167 (2) 5. JĘZYK MA7. DANYCH SQL d) Schemat relacji Rezultat. c) Stosowną definicję dzie
70987 ullman154 (2) .5 l*ł 5. JĘZYK BAZ DANYCH SQL MĆwiczenie 5.3.6. Można już było uprzednio dostrz
ullman138 (2) 5_Język baz danych SQL Język SQL stanowi najbardziej popularny mechanizm definiowania
ullman154 (2) .5 l*ł 5. JĘZYK BAZ DANYCH SQL MĆwiczenie 5.3.6. Można już było uprzednio dostrzec, że
ullman138 (2) 5_Język baz danych SQL Język SQL stanowi najbardziej popularny mechanizm definiowania
ullman146 (2) 5. JĘZYK BAZ DANYCH SQL zmienną krotkową i kropką. A więc zmienna krotkowa jest inną n
ullman156 (2) J 18 5. JEŻYK BAZ DANYCH SOL Zauważmy, że w tym zapytaniu wcale nie ma klauzuli WHERE,
ullman165 (2) 5. JEŻYK BAZ DANYCH SOL Teraz deklarując schemat relacji Film, możemy /.definiować atr
ullman172 (2) o_>u 5. JĘZYK BAZ DANYCH SQI. ^tytui arok - 19?9 ^cytui, rok ^nazwoStudi* - Paramo
ullman176 (2) 5. jęZYK. BAZ DANYCH SQL Złączenie naturalne w języku $QL2 ma dokładnie takie same wła
10 przymiotnikową kultura cielesna, które jednoznacznie definiowało, że idzie tu o cielesną istotę

więcej podobnych podstron