Конвертировать SQL-запрос в реляционную алгебру - PullRequest
1 голос
/ 01 ноября 2011

Мне нужна помощь в преобразовании запроса SQL в реляционную алгебру.

Вот запрос SQL:

SELECT * FROM Customer, Appointment
WHERE Appointment.CustomerCode = Customer.CustomerCode
    AND Appointment.ServerCode IN
    (
        SELECT ServerCode FROM Appointment WHERE CustomerCode = '102'
    )
;

Я застрял из-за подзапроса IN в приведенном вышепример.

Может кто-нибудь продемонстрировать мне, как выразить этот SQL-запрос в реляционной алгебре?

Большое спасибо.

РЕДАКТИРОВАТЬ: Вот мое предлагаемое решение в реляционной алгебре.Это правильно?Воспроизводит ли он SQL-запрос?

Scodes ← ΠServerCode (σCustomerCode = '102' (Appointment))

Ccodes ← ΠCustomerCode (Appointment ⋉ Scodes)

Результат ← (Заказчик)⋉ коды)

Ответы [ 2 ]

4 голосов
/ 01 ноября 2011

Ваш код SQL приведет к дублированию столбцов для CustomerCode, а использование SELECT [ALL] может привести к дублированию строк.Поскольку результат не является отношением, его нельзя выразить в реляционной алгебре.

Эти проблемы легко исправить в SQL:

SELECT DISTINCT * 
  FROM Customer NATURAL JOIN Appointment
 WHERE Appointment.ServerCode IN
    (
        SELECT ServerCode FROM Appointment WHERE CustomerCode = '102'
    )
;

Вы не указали, какую реляционную алгебру вы интересуетеВ. Дейт и Дарвен предложили алгебру с именем A , указали язык A с именем D и разработали язык D с именем Tutorial D .

В учебном пособии D используются операторы JOIN для естественного объединения, WHERE для ограничения и MATCHING для полусоединения. Небольшое усложнение заключается в сравнении в SQL:

CustomerCode = '102'

Сравнение значения CustomerCode со значением CHAR в SQL возможно из-за неявного принуждения.Учебное пособие D является более строгим - если хотите, - вам потребуется перегрузить оператор равенства или, на практике, определить оператор селектора для CHAR, имя которого обычно совпадает с именем типа.

Следовательно, вышеприведенный (исправленный) SQL может быть записан в Учебном пособии D как:

( Customer JOIN Appointment ) 
   MATCHING ( ( Appointment WHERE CustomerCode = CustomerCode ( '102' ) ) { ServerCode } )
2 голосов
/ 01 ноября 2011

«Как мне представить мой запрос в этой стандартной форме RA?»

Это не столько вопрос «типа алгебры», сколько вопрос «типа нотации».

В обозначениях, использующих греческие символы, обычно используется сигма, условие ограничения в нижнем индексе, добавляемое к символу сигмы, а затем субъект ограничения (реляционное выражение, которое подвергается условию ограничения).

Дата избегать этогонотации, потому что набор текста и / или создание текста с использованием таких нотаций, как правило, намного сложнее, чем использование только западного алфавита (мой учитель математики однажды сказал нам, что в учебниках по математике содержится больше всего ошибок).

σ (), таким образом, обозначает то же самое выражение алгебры, что и (синтаксис Даты) "WHERE ".

Аналогично, для греческих символов проекция обычно обозначается буквой Pi со списком сохраненных атрибутов в нижнем индексе, добавляемом к Pi, и выражением, являющимся предметом проекции.после этого.

Π(), таким образом, обозначает то же самое выражение алгебры, что и (синтаксис Даты) "{} ".

Семейство операторов объединения обычно обозначается в« греческих »символах, используя (варианты) символа Unicode BOWTIE или символ, состоящий из строчной буквы« x », окруженной полным кругом.(обычно используется для обозначения полного декартова произведения, кросс-произведения, ... каким бы ни был ваш курс алгебры, назовите его).

Некоторые курсы предоставляют нотацию «греческий символ» для переименования, используя греческую букву RhoВ нижнем индексе добавлен список переименования в форме a1-> b1, a2-> b2, ... После этого добавляется реляционное выражение, которое подвергается переименованию. Аналогично, Date имеет эквивалент не греческого символа.синтаксис:ПЕРЕИМЕНОВАТЬ a1 AS b1, a2 AS b2, ...

Важно понимать, что эти различия являются просто различиями в синтаксической записи , а не "различными алгебрами".

РЕДАКТИРОВАТЬ

Можно предположить, что нотация греческих символов будет способом программирования реляционной алгебры в движок APL, синтаксис Date будет способом программирования реляционной алгебры в коболообразную или PL / 1-как движок (фактически существует такой движок, называемый Rel), и способ программирования реляционной алгебры в ОО-подобный движок может выглядеть примерно как отношение.)).

...