Как я могу использовать переменную в запросе реляционной алгебры? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующая таблица .

Я бы хотел найти в запросе следующее:

Имена моряков для моряков, которые резервируют ТОЛЬКО лодки, которые бронирует Браун (имеется в виду только Браун и Блейк.вверх, так как они единственные, кто только резервирует Лодку 1 и Лодку 4 в таблице резервирования).

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

X = π SN, BN (Reservation) ⨝ π SN, Name (Sailer)
Y = π SN, BN (Reservation) ⨝ π BN (Boat)
Z = X ⨝ Y

CONTAINING = π Name, SN, BN (Z) / π BN (σ Name = 'Brown' (Z)) ⨝ Z
LAST = CONTAINING - π SN, BN, Name (σ Name = 'Brown' (Z))
RESERV = γ Name; count(Name)->NUM_RESERV (CONTAINING)
π Name (σ NUM_RESERV = NUM_RESERV RESERV)

Это производит:

Sailer.Name:
Smith
Blake
Brown

1 Ответ

0 голосов
/ 05 февраля 2019

Вот эскиз решения:

  1. let reserved-by-brown стол, состоящий из BN лодок, зарезервированных Брауном;это можно найти, соединив три таблицы с ограничением на имя моряка и проекцией на BN.

  2. Пусть sails таблица, полученная делением проекции на SN и BN:Бронирование по столу reserved-by-brown.Это дает SN моряков, которые по крайней мере зарезервировали всю лодку, зарезервированную Брауном.

  3. Пусть non-brown таблица получена с разницей от проекцииЛодки на BN и reserved-by-brown: содержит все BN лодки не , зарезервированные Брауном.

  4. Let non-brown-reservation соединение между non-brown иreservation по атрибуту BN.Сюда входят все резервирования без бронирований лодок, зарезервированных Брауном.

  5. Наконец, вычислите разницу между парусами и проекцией SN по предыдущей таблице non-brown-reservation.Это будет содержать желаемый результат.

...