Выберите строки с "один из каждого" в реляционной алгебре
Скажи у меня есть Persons
таблица с атрибутами {name, pet}
, Как выбрать имена людей, у которых есть один из каждого вида домашних животных (dog, cat, bird)
, но у человека есть только один из каждого вида домашних животных, если они находятся на столе.
Пример: Bob, Dog
а также Bob, Cat
единственные строки в таблице. Следовательно, Bob
имеет один из каждого вида домашних животных. Но момент Lynda, Bird
добавлены, Bob
у меня больше нет питомцев одного типа.
Я думаю, что первым шагом к этому является π(pet)
, Вы получаете список всех видов домашних животных, так как реляционная алгебра удаляет дубликаты. Не уверен, что делать после этого, но я думаю, что мне нужно присоединиться π(pet)
а также Persons
,
Я попробовал несколько вещей, таких как Natural Join и Cross, но пока не получил результата, и у меня нет идей.
1 ответ
Ответ на вопрос можно найти у оператора деления:
Человек ÷ πпэт(человек)
Это выражение реляционной алгебры возвращает отношение только со столбцом name
, содержащий все имена людей, которые имеют все различные виды домашних животных, присутствующих в настоящее время в Persons
Сам стол.
Деление является оператором, который в некотором смысле является обратным к оператору произведения (название происходит именно от этого факта). Это производный оператор, который может быть определен в терминах проекции, разности множеств и продукта (см., Например, этот ответ).