Используя реляционную алгебру, как я могу найти повторяющиеся строки в кортеже?

Вопрос: Я завершаю кусок домашней работы, и я действительно застрял и был на неделю. Я не прошу ответа на вопрос, но как бы я это сделал. В основном мне нужно найти дубликаты в одном кортеже. Например, если каждая запись была идентификатором пользователя и хобби, как бы я нашел все записи, где идентификатор пользователя и хобби

Вопрос:

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

ID | Hobby ———- 1 | Swimming 2 | Running 3 | Football 1 | Swimming 3 | Football 3 | Football

Как найти идентификаторы пользователей для пользователей с повторяющимися записями? (1 и 3)

Ответ №1

Недавно мне была задана проблема, очень похожая на домашнюю работу в курсе теории базы данных, который я сейчас принимаю. Подумав об этом несколько минут, у меня есть решение! Вот так..

  1. Выполните две одинаковые проекции в своей таблице (я буду называть их P 1 и P 2), причем ограничения являются ключом таблицы (уникальный идентификатор) и атрибутом, который, как полагают, имеет несколько вхождений одного и того же значения (attr). В контексте этого сообщения идентификаторы и хобби будут проекционными ограничениями.
  2. Верните столбцы для одной из проекций. Или, другими словами, измените имена ID и Хобби, но, возможно, еще что-то подобное. В нашем примере мы переименуем столбцы P 2 в ID2 и Hobby2.
  3. Критический шаг! : Выполните перекрестное произведение между P 1 и P 2. Это позволит каждой записи соединяться с каждой другой записью. Именно это мы и хотим. Я назову эту таблицу C. щелкните здесь для визуального
  4. Выполните выбор на C с критериями (специфичными для этой проблемы), которые ID = ID2 и Хобби = Хобби2. Это будет таблица S.
  5. Выполните проецирование на S, чтобы очистить дубликаты, которые оставят таблицу, состоящую из уникальных записей парных идентификаторов и значений хобби. Назовем это P (S).
  6. Примените разностный оператор по модулю CP (S). Это уберет случаи, когда запись сравнивается с ее “коллегой”, оставляя только записи, которые являются истинными дубликатами.
  7. Наконец, выполните проекцию на эту результирующую таблицу с ограничением ID.

Это должно работать для обнаружения дубликатов любого другого вида/формы. Просто измените критерии, чтобы они соответствовали деталям проблемы, начиная с шага 4 и далее.

Надеюсь, это поможет (кому-то)!

Оцените статью
Добавить комментарий