Как определить дубликаты предметов, собранных из нескольких каналов и ссылку на них в базе данных

StackOverflow https://stackoverflow.com/questions/4275954

Вопрос

У меня есть база данных, хранящая детали продуктов, которые взяты с многих сайтов и собраны через отдельные сайты API. Когда я вызываю корм, детали хранятся в таблице базы данных.

Проблема у меня есть, потому что то же самое, что тот же продукт указан на многих сайтах продавца, я в конечном итоге имею дублирующие элементы в моей базе данных, а затем, когда я покажу их на веб-странице, есть много дубликатов.

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

То, что мне бы хотелось, что товар будет отображаться один раз, а затем дать подробности пользователей, где еще указан товар.

Как я определил дубликаты, которые пришли, не замечая всю базу данных? Как бы я также выберу одну рекламу от всех дубликатов, а затем хранит, какие другие сайты отображаются объявление.

Спасибо за любую помощь.

Это было полезно?

Решение

Проблема в два раза, и оба находятся на вашей стороне. Когда вы выясните, как иметь дело с этим, написание кода в программу (Java или SQL будет легко). Я назову их сначала, а затем определите решения.

  1. По какой-то неизвестной причине вы предположили, что сбор продуктов описания продуктов от Mulitple сайтов не будут собирать тот же продукт.

  2. Вы привыкли к общему и бессмысленному Id столбец, который в порядке, когда вы работаете с функциональностью прототипирования электронных таблиц; Но в ней нет, что требуется для базы данных или функциональности разработки. Ваши пользователи (или босс) имеют натуральную поддержку базы данных базы данных из базы данных, и вы не предоставили. (И нет, это не требует нечеткой строки логики или магии любого рода.)

Решение

Это конденсированная версия IDEF1x. Стандарт для моделирования реляционных баз данных; Порция Re идентификаторы.

  1. Вам нужно подумать в условиях базы данных и подумать о таблицах базы данных, которые вам необходимо выполнить свою функцию, что означает, что вам не разрешено использовать автоматическое увеличение Id столбец. Эта колонка дает электронную таблицу RowId, но это не подразумевает ничего о содержании таблицы или столбцов, которые идентифицируют продукт.

  2. И вы не можете просто повторить данные с другого сайта, вам нужно подумать о том, что требуется ваш сайт для продуктов. Что ваша компания понимает продукт, и как он определяет продукт?

  3. Определите все столбцы и типы данных для столбцов.

  4. Определите, какие столбцы являются обязательными, и которые являются необязательными.

  5. Определить, что сильные Идентификаторы. Отказ Например. Manufacturer а также Model; короткая Product Name, не длинный Description (или может быть для вашей компании, длительное описание является идентификатор). Работайте с вашими пользователями и работайте это.

  6. Вы найдете, что у вас на самом деле есть небольшой кластер столов вокруг Product, Такие как Manufacturer, ProductType, возможно Vendor, так далее.

  7. Организуйте эти таблицы и нормализуют их, так что вы не дублирующие данные.

  8. Убедитесь, что вы относитесь к этим идентификаторам с небольшим количеством уважения. Выберите, который будет уникальным. Это Кандидатские ключи. Отказ Вам нужно хотя бы одну на стол, и будет больше, чем в Product. Отказ Все идентификаторы, которые будут искать, необходимо будет проиндексировано (уникально или нет). Обратите внимание, что уникальные индексы не могут быть аннулированы, поэтому вы не можете выбрать необязательный столбец.

  9. Что делает один уникальный идентификатор для Product не может быть одной колонкой. Это нормально, мы можем оценить несколько столбцов для ключей в базах данных; они называются Составные клавиши.

  10. Взять лучшее, самое стабильное (один, который не изменит) уникальный идентификатор, один из клавиш-кандидатов и сделать это Первичный ключ.

  11. Если, и только если уникальный идентификатор, первичный ключ, который может быть составным ключом, очень длинный, и, следовательно, не подходит для первичного ключа, который мигрируется в детские таблицы, затем Добавить а. Суррогатный ключ. Отказ Это будет Id столбец. Обратите внимание, что это дополнительный столбец и дополнительный индекс. Это не заменитель идентификаторов Product, ключевые кандидаты; они не могут быть удалены.

До сих пор у нас есть база данных продукта на стороне ваших компаний в Интернете, это значимую для этого. Теперь мы находимся в состоянии оценить продукты с другой стороны сети; И когда мы сделаем, у нас есть рамки на нашей стороне, которая сильна, против которой мы можем измерить мусор, который мы получаем с другой стороны сети.

Кормить

  1. Ты нуждаешься в WebSite Таблица для управления каналами.

  2. Там будет ассоциативный стол (многозначный) между Product а также WebSite. Отказ Давайте назовем это ProductSite. Отказ Это будет содержать только наше ProductId, и то WebSiteCode. It may containЦена` Содержимое действительны для одного цикла подачи.

  3. Загрузите каждый канал в базу данных или схема, входящий ProductIn Таблица, может быть, по одному на веб-сайте. Это просто плоский файл от внешнего источника. Добавить столбец IsValid и установите значение по умолчанию true.

  4. Затем напишите немного SQL, который сравнивает это ProductIn стол, с его свободным и гибким содержанием, с нашим Product стол со своими сильными идентификаторами.

    • То, как я бы сделал, есть несколько волн отдельных чеков, каждая маркировка строк, которые выйдут, с IsValid к ложе. В конце вставьте IsValid строки в наше ProductSite.

    • Вам может повезти, и сойти с оптимистичным подходом. То есть до тех пор, пока вы найдете матч на нескольких важных столбцах, матч действителен. (Обратное значение по умолчанию и обновление IsValid Boolean).

    • Это Proc, который потребует некоторой обратной и др. Работы, пока оно не оседает. Вот почему вам нужно работать с вашими пользователями redifiers. Цель состоит в том, чтобы исключить никаких внешних продуктов, но ваша отправная точка исключит много. Это будет включать возвращение к нашему Product Таблица и улучшение контента (значения в строках) идентификаторов и других соответствующих столбцов, которые вы используете для идентификации совпадающих строк.

  5. Повторите для каждого сайта.

  6. Теперь заполните наш сайт из нашего Product таблица, используя информацию, о которой мы уверены в себе, и показать, какие сайты имеют продукт для продажи от ProductSite.

Другие советы

Я не думаю, что это код или проблема с базой данных (пока). Ты говоришь:

Проблема в том, что предмет не имеет очевидного уникального идентификатора

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

Некоторые примеры данных, которые вы считаете дубликатами, могут помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top