2016-10-19 3 views
0

Скажем, у меня есть таблица Persons с атрибутами {name, pet}. Как выбрать имена людей, у которых есть один из каждого вида домашних животных (dog, cat, bird), но у человека есть только один из каждого вида домашнего животного, если они являются домашним животным в таблице.Выберите строки с «одним из каждого» в реляционной алгебре

Пример: Bob, Dog и Bob, Cat - единственные строки в таблице. Поэтому Bob имеет один из каждого вида домашнего животного. Но момент Lynda, Bird добавлен, Bob больше не имеет ни одного из видов домашнего животного.

Я думаю, что первым шагом к этому является π(pet). Вы получаете список всех видов домашних животных, поскольку реляционная алгебра удаляет дубликаты. Не уверен, что делать после этого, но я думаю, мне нужно присоединиться к π(pet) и Persons.

Я пробовал несколько вещей, таких как Natural Join and Cross, но я еще не достиг результата, и у меня нет идей.

+0

Ваше описание нечеткое. Может быть, вы имеете в виду «где у них есть один из каждого вида любимца, который появляется в таблице». Если вы не заставляете себя быть ясными на естественном языке, как вы ожидаете, что будете ясны в РА? Или оправдывать утверждение, что конкретное выражение РА говорит, что вы имеете в виду? Какова была точная формулировка задания, которую вы дали? (Обратите внимание, что если бы было больше столбцов, «один» должен был быть «точно одним» или «по крайней мере одним».) – philipxy

ответ

0

Ответ на этот вопрос может быть найден с Division operator:

Лица ÷ π животное (Лица)

Это выражение отношения алгебры возвращает отношение только к колонке name, содержащий все имена лиц, которые имеют всех разных видов домашних животных в настоящее время настоящее время в таблице Persons.

Разделение является оператором, который в некотором смысле является обратным оператору произведения (название происходит именно от этого факта). Это производный оператор, который может быть определен в терминах проекции, разности и произведения (см., Например, это answer).

Смежные вопросы