sql -> реляционная алгебра
Как мне преобразовать это в дерево реляционной алгебры?
Каковы логические шаги? Нужно ли сначала преобразовывать в реляционную алгебру? Или я могу идти прямо из sql в дерево?
2 ответа
Сначала я преобразовал бы в реляционную алгебру, затем преобразовал в дерево.
Смотри, SELECT
предложение хочет только три поля. Это projection
,
FROM
Статья имеет три отношения. Это Cartesian product
,
WHERE
пункт дает кучу selection
s. Это та часть, где она помогает преобразовать в реляционную алгебру перед преобразованием в дерево.
Я понятия не имею, какую нотацию вы используете в классе, но вы, вероятно, хотите что-то, что имеет общую форму
projection((things-you-want), selection((criteria), selection((criteria),
selection((criteria), aXbXc))))
или прогноз выбора... материала, полученного из перекрестных продуктов.
Обратите внимание, что в зависимости от того, насколько требователен ваш инструктор, вам может потребоваться переименовать поля. Поскольку и Show, и Seat имеют showNo в качестве атрибута, вам может быть запрещено брать перекрестный продукт, прежде чем дать им уникальные имена (альтернативные правила, атрибуты однозначно идентифицируются префиксом неявного отношения).
Кроме того, в зависимости от цели урока, вы можете коммутировать некоторые из этих операций. Вы можете сделать выбор в бронировании, прежде чем брать перекрестный продукт как средство ограничения диапазона дат. Конечные результаты будут эквивалентны.
В любом случае, действительно ли так много работы по переходу от SQL к реляционной алгебре к дереву? Я не сомневаюсь, что с практикой вы могли бы пропустить промежуточный шаг. Тем не менее, поскольку вы задали вопрос в первую очередь, я бы предложил рассмотреть предложения. Помните требование "показать свою работу" от младших учителей математики для объединения простых терминов, которые ушли в старшую школу? То же правило применяется здесь. Я говорю это как бывший грейдер по CS.
Результат этого запроса SQL не является отношением, поэтому он не имеет точного эквивалента в RA. Вы можете попробовать создать версию RA того же SQL-запроса с добавленным DISTINCT.