2013-04-06 4 views
-1

Я пытаюсь написать следующий запрос с использованием реляционной алгебры:Дать следующий запрос с использованием реляционной алгебры

"Find the names of sailors who reserved a red or a green boat" 

Вот мое решение: enter image description here

Но книга дает следующее решение: enter image description here

И еще аналогичное решение дается книге: enter image description here

End здесь соответствующие таблицы: enter image description here

Мой вопрос, мы не можем использовать «или» символ (V) в операторе выбора? Неправильно ли мое решение? Зачем нам нужен оператор переименования?

Благодаря

+1

Что это за книга (из любопытства?) – gudthing

ответ

1

Еще больше доказательств того, что не существует такого понятия, как «» реляционная алгебра.

Что касается ограничения:

Ваша книга/учитель, кажется, идет по принципу, что условия ограничения могут быть только «очень простой». В том, что касается статьи wiki по адресу http://en.wikipedia.org/wiki/Selection_%28relational_algebra%29 (по меньшей мере, один атрибут, один другой атрибут или постоянное значение, задействован только один оператор сравнения, никакие другие вызовы оператора, такие как SIN (угол attr) или MONTH (datetime attr) или. ..).

Но это ограничение (в условиях ограничения) не является необходимым. В статье wiki о реляционной алгебре на http://en.wikipedia.org/wiki/Relational_algebra#Selection_.28.CF.83.29 явно сказано: «... это пропозициональная формула, состоящая из ... и логических операторов AND, OR, NOT ...».

Что касается переименования:

Оператора ПЕРЕИМЕНОВАТЬ в реляционной алгебре используется для получения величины отношения, которое отличается от входа только в том, что некоторых атрибутах имеет «измененное имя».

Ваша книга/учитель по-видимому, использует оператор под названием «переименовать» в присвоить имя для некоторого заданного реляционного выражения (а UNION в вашем примере). Это даже не алгебраическая операция !!!

(Хотя это правильная и полезная идея в дизайне языка, чтобы создать возможность для пользователя иметь «именованные выражения», которые он может впоследствии ссылаться, используя только назначенное имя, это вопрос дизайна языка , а не реляционной алгебры!)

+0

Существует много учебников «алгебра». (SQL-апологетика - это действительно * языки *.) «Очень простой» * лучше *. Выражения вызывают вызовы операторам по атрибуту X theta X атрибут X отношение & атрибут X theta X значение X отношение. Но для произвольных формул вам нужен либо оператор sort & a operator по формуле X, либо что-то вроде оператора для формулы. (И для символов функции ....) Это ставит вопрос о том, для чего предназначена алгебра. Это алгебраическая предикатная логика. Поэтому оставляйте формулы для предикации логики. (Тета тоже - имеет EXTEND по атрибуту/константе и функционирует как отношения.) – philipxy

1

Я тестировал этот код в моем PHPMyAdmin и она должна быть работа

Выбрать всех моряков, которые резервы, а лодки уже созданы;

SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid 

Удельное выделение (цвет: красный);

с помощью WHERE цвета = 'красного'

SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid WHERE color = 'red' 

Мульти Selection (Цвет: красный и синий);

с помощью WHERE цвета = «красного» или «синего»

SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid WHERE color = 'red' or 'blue'