Operator różnicy zbiorów (np. EXCEPT
W niektórych wariantach SQL) jest jednym z wielu podstawowych operatorów algebry relacyjnej. Istnieją jednak bazy danych, które nie obsługują bezpośrednio operatora różnicy setów, ale które obsługują LEFT JOIN
(rodzaj połączenia zewnętrznego), aw praktyce można tego użyć zamiast operacji ustawiania różnicy, aby osiągnąć ten sam efekt.
Czy to oznacza, że moc ekspresyjna języka zapytań jest taka sama, nawet bez operatora różnicy, o ile LEFT JOIN
operator jest utrzymywany? Jak udowodnić ten fakt?
Odpowiedzi:
W algebrze relacyjnej najpierw przedstawimy nieformalną definicję lewego (zewnętrznego) złączenia i przejdziemy do udowodnienia, że to zmiana nazwy, selekcji, łączenia i rzutowania może tworzyć różnicę, a także, że różnicę, selekcję i łączenie można wykorzystać do zbudowania różnicy lewe (zewnętrzne) połączenie. W rzeczywistości skończymy w odwrotnej kolejności: pokażemy, jak konstruować lewe złączenia za pomocą różnic, a następnie pokażemy, jak konstruować różnice za pomocą lewych złączeń.
Niech i mają odpowiednio schematy i , gdzie i są zestawami atrybutów w jednym schemacie, ale nie drugim, a jest zbiorem wspólnych atrybutów.R S (R′,T) (T,S′) R′ S′ T
Niech będzie krotką zerową dla schematu . Oznacza to, że jest to krotka składająca się ze wszystkich wartości zerowych dla każdego atrybutu . Następnie definiujemy lewe łączenie zewnętrzne w następujący sposób: jest zbiorem wszystkich krotek należących do schematu gdzie ...w=(ϵ,ϵ,...,ϵ) S′ S′ (r,t,s) (R′,T,S′)
R LEFT JOIN S
Przykład: schemat to ( A 1 , A 2 , A 3 ) , schemat S to ( A 2 , A 3 , A 4 ) , a my mamy ten R = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } i S = { ( 2 , 3 , 4 )R (A1,A2,A3) S (A2,A3,A4) R={(1,2,3),(4,5,6)} . Przez (1) i (2) otrzymujemy wynik pośredni { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 1 , 2 , 3 , ϵ ) , ( 4 , 5 , 6 , ϵ ) } . Do (3) musimy usunąć ( 1 , 2S={(2,3,4),(2,3,6)} {(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)} , ponieważ mamy (na przykład), ( 1 , 2 , 3 , 4 ) , a y = 4 ≠ ε = wag . Pozostaje nam zatem { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 4 , 5 , 6 , ϵ ) }(1,2,3,ϵ) (1,2,3,4) s=4≠ϵ=w {(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)} , oczekiwany wynik dla lewego złączenia.
Twierdzenie:
R LEFT JOIN S
jest równoważne z(R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
.Dowód:
(R EQUIJOIN S)
daje nam wszystko, czego wymagają (1) i (2a). Twierdzimy, że((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
daje nam to wszystko w formie(r, t, w)
wymaganej przez (2b) i (3).To zobaczyć pierwszy uwagę, żeR S R S T T R S R R T R S ; a mianowicie dokładnie zestaw krotek, które do tej pory twierdziliśmy.
(((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)
jest to zbiór wszystkich krotki w , dla którego nie ma odpowiadającej krotka w S . Aby to zobaczyć, wystarczy zauważyć, że rzutując wspólne atrybuty z R i S (zestaw atrybutów T ) i biorąc pod uwagę różnicę, pozostaje jeden i wszystkie krotki (ze schematem T ), które są reprezentowane w R, ale nie S . Przez z R odzyskujemy wszystkie i tylko te krotki w R, które mają wartości atrybutów w T, które są obecne w R, ale nie w SEQUIJOIN
Następnie zauważ, że schematR (R′,T) w S′ (r,t,w) (t,s) S (r,t) R
(((PROJECT_T R) DIFFERENCE (PROJECT_T S))
jest taki sam jak dla (mianowicie ( R ' , T ) ), podczas gdy schemat w jest S ' . Działanie jest zatem iloczyn, że możemy uzyskać wszystkie krotki postaci ( R , T , W ), w których nie ma ( t , y ) w S odpowiadającego ( r , t ) w R .JOIN
Aby zobaczyć, że jest to dokładnie zestaw krotek, które musieliśmy dodać(r,t,s) (r,t,w) (r,t,w) (r,t,w) (t,s) S (r,t) R (r,t,s)
R EQUIJOIN S
w celu skonstruowaniaR LEFT JOIN S
, rozważ następujące kwestie: z uwagi na konstrukcję (3) jest spełniony, ponieważR EQUIJOIN S
nie może zawierać jeśli zawiera ( r , t , w ) (gdyby tak się stało, wówczas druga część zawierająca ( r , t , w ) byłaby sprzecznością); jeśli było dodać kolejną ( r , T , W ) nie , to nie będzie to (((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
w S odpowiadające ( r , t ) w R , a według definicji, ( r , t , s ) również byłoby wsprzeczności (3). To kończy dowód.EQUIJOIN
R LEFT JOIN S
Teraz pokazujemy, że lewe łączenie może być użyte do skonstruowania różnicy:
Twierdzenie:
R DIFFERENCE S
jest równoważne zPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))
Dowód: zauważ, że tutaj i S ′ są puste, ponieważ wszystkie atrybuty są wspólne, aby miały sens. Najpierw tworzymy nową relację z S poprzez duplikowanie zestawu atrybutów w S (obsługiwane przez i ), tak aby zawierała krotki ( t , t ′ ) w zestawie atrybutów ( T , T ′ ), gdzie t = t ′ (obsługiwane przez ). Lewe złączenie pozostawia nam krotki formy ( t , t ′ )R′ S′ S S (t,t′) (T,T′) t=t′ (t,t′) gdzie lub t ′ = w . Teraz, aby pozbyć się wpisów, które również pojawiają się w S , musimy zachować tylko krotki formy ( t , w ) , która jest obsługiwana przez najbardziej zewnętrzne . Ostatnim pozbywa tymczasowego zestawu atrybutów T ' i pozostawia nas z różnicy pod względem pierwotnego schematu.t=t′ t′=w S (t,w) T′
DIFFERENCE
RENAME
JOIN
SELECT
SELECT
PROJECT
RENAME
JOIN
SELECT
LEFT JOIN
SELECT
PROJECT
źródło
SELECT
DIFFERENCE
do definiowaniaLEFT JOIN
, a następnieLEFT JOIN
do wyrażaniaDIFFERENCE
, co oznacza, że SQL może się bez niego obejść. Aby było to ważne, należy wyrazićLEFT JOIN
w kategoriach operatorów innych niżDIFFERENCE
, a następnie udowodnić, żeDIFFERENCE
jest to równoważne.LEFT JOIN zaimplementowany przez SQL, nie tworzy relacji jako wyniku (ponieważ niektóre atrybuty wyniku nie będą miały wartości).
Ergo, LEFT JOIN implementowany przez SQL, nie jest bezpośrednim odpowiednikiem żadnego operatora algebry relacyjnej.
Ergo, Operator różnicy relacyjnej nie może być wyrażony jako LEWE DOŁĄCZENIE (ponieważ LEFT JOIN nie może być częścią algebry relacyjnej, ponieważ LEFT JOIN tworzy coś, co nie jest relacją, co narusza zamknięcie algebry).
Każdy zestaw prymitywnych operatorów algebry relacyjnej, który spełnia kryteria zamknięcia , o których wiem, zawsze zawiera albo relacyjną różnicę, albo relacyjną półjednoznaczność.
źródło