Вопрос:
Я завершаю кусок домашней работы, и я действительно застрял и был на неделю. Я не прошу ответа на вопрос, но как бы я это сделал. В основном мне нужно найти дубликаты в одном кортеже. Например, если каждая запись была идентификатором пользователя и хобби, как бы я нашел все записи, где идентификатор пользователя и хобби выглядят точно так же, по крайней мере, два раза? Поэтому, если бы у меня был следующий кортеж…
ID | Hobby ———- 1 | Swimming 2 | Running 3 | Football 1 | Swimming 3 | Football 3 | Football
Как найти идентификаторы пользователей для пользователей с повторяющимися записями? (1 и 3)
Ответ №1
Недавно мне была задана проблема, очень похожая на домашнюю работу в курсе теории базы данных, который я сейчас принимаю. Подумав об этом несколько минут, у меня есть решение! Вот так..
- Выполните две одинаковые проекции в своей таблице (я буду называть их P 1 и P 2), причем ограничения являются ключом таблицы (уникальный идентификатор) и атрибутом, который, как полагают, имеет несколько вхождений одного и того же значения (attr). В контексте этого сообщения идентификаторы и хобби будут проекционными ограничениями.
- Верните столбцы для одной из проекций. Или, другими словами, измените имена ID и Хобби, но, возможно, еще что-то подобное. В нашем примере мы переименуем столбцы P 2 в ID2 и Hobby2.
- Критический шаг! : Выполните перекрестное произведение между P 1 и P 2. Это позволит каждой записи соединяться с каждой другой записью. Именно это мы и хотим. Я назову эту таблицу C. щелкните здесь для визуального
- Выполните выбор на C с критериями (специфичными для этой проблемы), которые ID = ID2 и Хобби = Хобби2. Это будет таблица S.
- Выполните проецирование на S, чтобы очистить дубликаты, которые оставят таблицу, состоящую из уникальных записей парных идентификаторов и значений хобби. Назовем это P (S).
- Примените разностный оператор по модулю C – P (S). Это уберет случаи, когда запись сравнивается с ее “коллегой”, оставляя только записи, которые являются истинными дубликатами.
- Наконец, выполните проекцию на эту результирующую таблицу с ограничением ID.
Это должно работать для обнаружения дубликатов любого другого вида/формы. Просто измените критерии, чтобы они соответствовали деталям проблемы, начиная с шага 4 и далее.
Надеюсь, это поможет (кому-то)!