Чи додає операція "різниця" виразність мові запитів, яка вже включає "приєднання"?


19

Оператор заданої різниці (наприклад, EXCEPTу деяких варіантах SQL) є одним із багатьох фундаментальних операторів реляційної алгебри. Однак є деякі бази даних, які не підтримують оператора заданої різниці безпосередньо, але які підтримують LEFT JOIN(свого роду зовнішнє з'єднання), і на практиці це можна використовувати замість операції набору різниць для досягнення того ж ефекту.

Чи означає це, що експресивна сила мови запитів однакова навіть без оператора встановленої різниці, доки LEFT JOINоператор підтримується? Як можна довести цей факт?


1
Показати, що вони мають однакову виражальну силу, показує, що операція різниці може бути побудована за допомогою лівої операції з'єднання (і, можливо, інших операцій в РА).
sxd

Відповіді:


14

У реляційній алгебрі ми спочатку наводимо неофіційне визначення лівого (зовнішнього) з'єднання та продовжуємо доводити, що воно, перейменування, відбір, приєднання та проекція можуть будувати різницю, а також, що різниця, відбір та об'єднання можуть бути використані для побудови ліве (зовнішнє) з'єднання. Насправді ми зробимо це в зворотному порядку: ми покажемо, як побудувати ліві з'єднання за допомогою відмінностей, а потім покажемо, як побудувати відмінності, використовуючи ліві з'єднання.

Нехай і S мають схеми ( R ' , T ) і ( T , S ' ) відповідно, де R ' і S ' - це набори атрибутів однієї схеми, а не інша, а T - сукупність загальних атрибутів.RS(R,T)(T,S)RST

Нехай буде нульовий кортеж для схеми S ' . Тобто це кортеж, що складається з усіх нульових значень для кожного атрибута S . Тоді ми визначаємо ліве зовнішнє з'єднання так: це множина всіх кортежів ( r , t , s ), що належать до схеми ( R ' , T , S ' ), де ...w=(ϵ,ϵ,...,ϵ)SSR LEFT JOIN S(r,t,s)(R,T,S)

  1. - кортеж R ;(r,t)R
  2. (a) - кортеж S або (b) s = w ;(t,s)Ss=w
  3. Якщо знаходиться у множині для s w , то ( r , t , w ) немає у множині.(r,t,s)sw(r,t,w)

Приклад: 'схеми s є ( 1 , 2 , 3 ) , S ' схеми s є , і ми маємо , що і . За (1) і (2) отримуємо проміжний результат . За (3) ми повинні видалити , оскільки маємо (наприклад) і . Таким чином, нам залишаєтьсяR(A1,A2,A3)SR = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } S = { ( 2 , 3 , 4 ) , ( 2 , 3 , 6 ) } { ( 1 , 2 , 3 , 4 ) , ( 1(A2,A3,A4)R={(1,2,3),(4,5,6)}S={(2,3,4),(2,3,6)}( 1 , 2 , 3 , ϵ ) ( 1 , 2 , 3 , 4 ) s = 4 ϵ = w { ( 1 , 2 , 3 ,{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)}(1,2,3,ϵ)(1,2,3,4)s=4ϵ=w{(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)}, очікуваний результат для лівого поєднання.

Теорема: R LEFT JOIN Sеквівалентна (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w).

Доказ: (R EQUIJOIN S)дає нам усе, що вимагається (1) та (2a). Ми стверджуємо, що ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)надає нам усі форми, які (r, t, w)вимагають (2b) та (3).

Щоб побачити це, спочатку зауважте, що (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)це сукупність усіх кортежів у для яких у немає відповідного кортежа . Для цього достатньо відзначити, що проектуючи загальні атрибути з і (набір атрибутів ) і приймаючи різницю, залишається всі та тільки ті кортежі (зі схемою ), які представлені в але НЕ . За допомогою ми відновимо всі та тільки ті кортежі в які мають значення для атрибутів у які є в але не вS R S Т Т Р С Р Р Т Р SRSRSTTRSEQUIJOINRRTRS; а саме - саме той набір кортежів, про який ми досі заявляли.

Далі, зауважте, що схема (((PROJECT_T R) DIFFERENCE (PROJECT_T S))is така ж, як у (а саме ), тоді як схема - . Операція , отже, декартовій твір, ми отримуємо все кортежі виду , де немає в , відповідна в .( R , T ) w S ( r , t , w ) ( t , s ) S ( r , t ) RR(R,T)wSJOIN(r,t,w)(t,s)S(r,t)R

Щоб побачити, що це саме той набір кортежів, який нам потрібно було додати для R EQUIJOIN Sпобудови R LEFT JOIN S, врахуйте наступне: за допомогою побудови (3) виконується, оскільки R EQUIJOIN Sне може містити якщо містить (якби це було, то містити другу частину було б протиріччям); якби ми додали інше не в , тоді було б в відповідає в , і за визначенням , також буде в , протиріччя (3). Це завершує доказ.( r , t , w ) ( r , t , w ) ( r , t , w ) ( t , s ) S ( r , t ) R ( r , t , s )(r,t,s)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)(r,t,w)(r,t,w)(r,t,w)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)(t,s)S(r,t)REQUIJOIN(r,t,s)R LEFT JOIN S

Тепер ми показуємо, що ліве з'єднання можна використовувати для побудови різниці:

Теорема: R DIFFERENCE SеквівалентнаPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))

Доказ: Зауважте, що тут і порожні, оскільки всі атрибути є спільними для отримання сенсу. Спочатку ми створюємо нове відношення з , дублюючи набір атрибутів у (обробляється і ), так що він складається з кортежів на наборі атрибутів де (обробляється the ). Ліве з'єднання залишає нас з кортежами форми де або . Тепер, щоб позбутися записів, які також з'являються в , ми повинні зберегти лише кортежі формиS S S ( t , t ) ( T , T ) t = t ( t , t ) t = t t = w S ( t , w ) T RSDIFFERENCESSRENAMEJOIN(t,t)(T,T)t=tSELECT(t,t)t=tt=wS(t,w), який обробляється самим зовнішнім SELECT. Останній PROJECTпозбавляється від тимчасового набору атрибутів і залишає нам різницю з точки зору вихідної схеми.T

Приклад: Нехай і . Спочатку отримуємо з набором атрибутів d : . Операція дає нам декартовій твір з усіма дев'яти можливих спарювань; цей набір тут не пишеться з міркувань форматування. Потім Рагез це вниз до . Значення з дає . Дає . ДаєS = { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) } S T { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 ,R={(1,2),(3,4),(5,6)}S={(3,4),(5,6),(7,8)}SRENAMET{ ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) , ( 7 , 8 , 7 , 8 ) } R { ( 1 , 2 , ϵ , ϵ ) , ( 3 , 4 , 3 , 4 ) , ( 5 , 6 ,{(3,4),(5,6),(7,8)}JOINSELECT{(3,4,3,4),(5,6,5,6),(7,8,7,8)}LEFT JOINR{ ( 1 , 2 , ϵ , ϵ ) } { ( 1 , 2 ) }{(1,2,ϵ,ϵ),(3,4,3,4),(5,6,5,6)}SELECT{(1,2,ϵ,ϵ)}PROJECT{(1,2)}, бажана відповідь.


Відредагуйте свою публікацію, щоб використовувати синтаксис LaTeX. Почніть з додавання всієї формули до символів $ (наприклад, $ (1,2) $ стає ). Ключові слова, такі як select, слід помістити в `(наприклад, стає` SELECT` ). (1,2)SELECT
Рафаель

@Raphael Дякую за те, що я вказав, що я повинен використовувати LaTeX для цього. Я зробив добросовісну спробу в LaTeX'ing математики та безотказного коду ... будь ласка, дайте мені знати, чи є ще щось, що я повинен зробити. Знову дякую!
Patrick87

Щиро дякую! Ви можете розглянути $ $ ... $ $ для створених відрізаних (не вбудованих) предметів математики. Це часто може покращити читабельність при правильному використанні. MathJax також підтримує нумеровані рівняння, але я не впевнений, як це зробити.
Рафаель

Я думаю, що ваша логіка тут несправна. Ви використовуєте DIFFERENCEдля визначення LEFT JOIN, а потім використовуєте LEFT JOINдля вираження DIFFERENCE, роблячи висновок, що SQL може обійтися і без нього. Щоб це було дійсним, ви повинні висловитись LEFT JOINза іншимиDIFFERENCE операторами , а потім довести, що DIFFERENCEце рівнозначно йому.
Янома

@Janoma Я не думаю, що це потрібно ... ми намагаємось показати, що різницю можна виразити у вигляді лівих приєднань, тому функціонування лівого з'єднання передбачається. Подумайте над цим: якби те, що ви говорите, мало заслугу, я можу стверджувати, що LEFT JOIN - це "основна" чи "необхідна" операція, і вимагати, щоб ви визначили РІЗНИК з точки зору інших операторів, але не ЛІВНІЙ ПРИЄДНАЙТЕСЬ. Я показав, що кожен може імітувати іншого, тож жоден з них не є більш-менш "основоположним", ніж інший ... що робить РІЗНИК особливою? У підтримку логіка, НЕ та І є повними, як це АБО і НЕ; вам не потрібно всіх трьох.
Патрік87

-1

LEFT JOIN, реалізований SQL, не створює співвідношень як його результат (оскільки деякі атрибути результату не матимуть значення).

Ergo, LEFT JOIN, реалізований SQL, не є прямим аналогом жодного оператора реляційної алгебри.

Ерго, Оператор різницької різниці не може бути виражений через ЛІВНЕ ПРИЄДНАННЯ (оскільки ЛІВНІЙ ПРИЄДНАННЯ неможливо бути частиною реляційної алгебри, це тому, що НАЛЕЖНІЙ ПРИЄДНАЙТЕ виробляє щось, що не є відношенням, таким чином порушуючи закриття алгебри).

Будь-який набір примітивних операторів реляційної алгебри, що задовольняє замкнутість, про яку я знаю, завжди включає або реляційну різницю, або реляційну напіврівновагу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.