Выберите строки с "один из каждого" в реляционной алгебре

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

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

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

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

1 ответ

Решение

Ответ на вопрос можно найти у оператора деления:

Человек ÷ πпэт(человек)

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

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

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