sql -> реляционная алгебра

Как мне преобразовать это в дерево реляционной алгебры?

Каковы логические шаги? Нужно ли сначала преобразовывать в реляционную алгебру? Или я могу идти прямо из sql в дерево?

2 ответа

Решение

Сначала я преобразовал бы в реляционную алгебру, затем преобразовал в дерево.

Смотри, SELECT предложение хочет только три поля. Это projection,

FROM Статья имеет три отношения. Это Cartesian product,

WHERE пункт дает кучу selections. Это та часть, где она помогает преобразовать в реляционную алгебру перед преобразованием в дерево.

Я понятия не имею, какую нотацию вы используете в классе, но вы, вероятно, хотите что-то, что имеет общую форму

projection((things-you-want), selection((criteria), selection((criteria),
  selection((criteria), aXbXc))))

или прогноз выбора... материала, полученного из перекрестных продуктов.

Обратите внимание, что в зависимости от того, насколько требователен ваш инструктор, вам может потребоваться переименовать поля. Поскольку и Show, и Seat имеют showNo в качестве атрибута, вам может быть запрещено брать перекрестный продукт, прежде чем дать им уникальные имена (альтернативные правила, атрибуты однозначно идентифицируются префиксом неявного отношения).

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

В любом случае, действительно ли так много работы по переходу от SQL к реляционной алгебре к дереву? Я не сомневаюсь, что с практикой вы могли бы пропустить промежуточный шаг. Тем не менее, поскольку вы задали вопрос в первую очередь, я бы предложил рассмотреть предложения. Помните требование "показать свою работу" от младших учителей математики для объединения простых терминов, которые ушли в старшую школу? То же правило применяется здесь. Я говорю это как бывший грейдер по CS.

Результат этого запроса SQL не является отношением, поэтому он не имеет точного эквивалента в RA. Вы можете попробовать создать версию RA того же SQL-запроса с добавленным DISTINCT.

Другие вопросы по тегам