Нуль в реляционной алгебре - PullRequest
3 голосов
/ 13 апреля 2019

Я хочу запросить id всех квартир, которые никогда не сдавались

Я пробовал что-то вроде этого:

(π a_id
(apartments))
-
(π a_id
σ from_date Exists ∧ end_date Exists 
(rental) ⨝ rental.a_id on apartment.a_id (apartment))

Но я думаю, что не могу использовать Exist в реляционной алгебре, нуль или что-то еще.

Как я мог это сделать?

Спасибо

Я прилагаю схему здесь

1 Ответ

1 голос
/ 14 апреля 2019

Для самой простой реляционной алгебры, где отношение имеет атрибут, заданный как заголовок, а кортеж - как тело:

Предположительно идентификаторы квартир в Апартаментах - для квартир, а идентификаторы квартир в Аренде - для арендованных квартир. Тогда не арендованные квартиры - те, что в квартире, но не в аренде. Их идентификаторы в реляционной разнице между проекциями этих отношений.

Гадание по легенде / ключу для вашего ERD, есть FK (внешний ключ) в Rental Rental ссылающейся квартире. Это подтверждает, что квартира в аренду тоже в квартире. Так что Apartment ⨝ Rental имеет те же квартиры, что и Rental. Это подтверждает, что вам не нужно присоединяться.

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

Вы упоминаете NULL & EXISTS. Возможно, вы говорите о SQL NULL & EXISTS и / или пытаетесь найти версию SQL-запроса по реляционной алгебре и / или вы рассуждаете в SQL. И / или, может быть, вы говорите о логике EXISTS и о том, существуют ли значения в столбцах или кортежах.

Из здравого смысла об аренде, и если вы не говорите иначе, Rental - это строки, где occupant O rented apartment A from date F to date T. Но вы упоминаете NULL. Из здравого смысла и догадки T может быть NULL, Rental это строки, где occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null. Подобное условие членства в кортеже - это предикат (характеристика) . Мы не можем обновить или запросить информацию о ситуации в бизнесе, не сказав предикат каждого базового отношения.

NULL - это значение, которое специально обрабатывается операторами и синтаксисом SQL. Мы не знаем, как ваша алгебра и язык относятся к NULL. В математике EXISTS X [p] & FOR SOME X [p] говорят, что существует значение, которое мы можем назвать X, удовлетворяющее условию p. SQL EXISTS (R) говорит, существуют ли строки в таблице R. То есть, EXISTS t [t IN R]. Когда R - это (X, ...) строк, где r, то есть EXISTS X,... [r].

Когда R - строки, где r, π x (R) - по определению строки, где EXISTS *non-x attributes of R* [r]. Так π A (Rental) - это строки, где EXISTS O,F,T [occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null].

Когда R - строки, где r, σ p (R) - по определению строки, где r & p. Строки, где occupant O rented apartment A from date F ongoing & T is null - строки, где (occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null) & T is null, что σ T is null (R).

Когда R - строки, где r & S - строки, где s, R - S - по определению строки, где r & NOT s. Предположим, Apartment - это строки, где apartment A has S square feet .... Вы хотите строки, где EXISTS S,... [apartment A has S square feet ...] & NOT EXISTS O,F,T [occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null]. Это разница в начале ответа.

PS

Каждое выражение запроса имеет связанный (характеристический) предикат - шаблон оператора, параметризованный атрибутами. Кортежи, превращающие предикат в истинное утверждение - утверждение - находятся в соотношении.

Нам даны предикаты для выражений, которые являются именами отношений.

Пусть выражение запроса E имеет предикат e. Тогда:

  • R ⨝ S имеет предикат / строки, удовлетворяющие r and s

  • R ∪ S имеет предикат / есть строки, удовлетворяющие r or s

  • R - S имеет предикат / строки, удовлетворяющие r and not s

  • σ p (R) имеет предикат / строки, удовлетворяющие r and p

  • π A (R) имеет предикат / есть строки, удовлетворяющие exists attributes of R other than A [r]

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

Запрос реляционной алгебры.

...