1

我有一个数据库存储产品的详细信息,这些产品取自许多站点,并通过各个站点的 API 收集。当我调用提要时,详细信息存储在数据库表中。

我遇到的问题是,由于卖家在许多网站上列出了完全相同的产品,我最终在我的数据库中有重复的项目,然后当我在网页上显示它们时,会有很多重复项。

问题是该物品没有任何明显的唯一标识符,它具有该物品的特定详细信息(其中可能有很多),然后是卖方对该物品的描述。

我希望该项目显示一次,然后向用户提供该项目在何处列出的详细信息。

在不减慢整个数据库速度的情况下,我如何识别已进入的重复项?然后我将如何从所有重复项中选择一个广告,然后存储该广告显示在哪些其他网站上。

谢谢你的帮助。

4

2 回答 2

3

问题是双重的,两者都在你身边。当您弄清楚如何处理时,将代码写入程序(Java 或 SQL 将很容易)。我将首先命名它们,然后确定解决方案。

  1. 由于某些未知的原因,您假设从多个站点收集产品描述不会收集相同的产品。

  2. 您已经习惯了常见且无意义的Id列,这在您使用电子表格原型功能时很好;但它远不及数据库或开发级功能所需的东西。您的用户(或老板)自然而然地期望数据库提供数据库功能,而您没有提供任何功能。(不,它不需要模糊字符串逻辑或任何类型的魔法。)

解决方案

这是用于建模关系数据库的IDEF1X标准的精简版本;重新标识符部分。

  1. 您需要考虑数据库术语,并考虑执行功能所需的数据库表,这意味着您不允许使用自动增量Id列。该列为电子表格提供了 a RowId,但它并不暗示有关表格内容或标识产品的列的任何内容。

  2. 而且您不能简单地从另一个网站上窃取数据,您需要考虑您的网站对产品的要求。贵公司对产品的理解是什么,它如何识别产品?

  3. 识别所有列和列的数据类型。

  4. 确定哪些列是必需的,哪些是可选的。

  5. 确定哪些是强标识符。例如。ManufacturerModel; 短Product Name,而不是长Description(或者可能适用于您的公司,长描述一个标识符)。与您的用户合作,并解决问题。

  6. 您会发现您周围实际上有一小群表格Product,例如Manufacturer, ProductType, 也许Vendor等。

  7. 组织这些表,并对它们进行规范化,这样您就不会重复数据。

  8. 确保您尊重这些标识符。选择哪个是独一无二的。这些是候选键。每张桌子至少需要一个,而且Product. 所有将被搜索的标识符都需要被索引(唯一与否)。请注意,唯一索引不能为 Nullable,因此您不能选择可选列。

  9. 使单个唯一标识符的原因Product可能不是单个列。没关系,我们可以为数据库中的键评估多个列;它们被称为复合键

  10. 取最好的,最稳定的(不会改变的)唯一标识符,候选键之一,并将其​​设为主键

  11. 当且仅当唯一标识符,可能是复合键的主键非常长,因此不适合迁移到子表的主键,然后添加代理。那将是Id专栏。请注意,这是一个附加列和附加索引。它不能替代Product候选键的标识符;它们不能被删除。

到目前为止,我们在您公司的网络端有一个产品数据库,这对它很有意义。现在我们可以从网络的另一端评估产品了;当我们这样做时,我们有一个强大的框架,我们可以根据它来衡量我们从网络另一端得到的垃圾。

饲料

  1. 您需要一个WebSite表格来管理提要。

  2. Product和之间会有一个关联表(多对多)WebSite。让我们称之为ProductSite。它将仅包含我们的ProductId, 和WebSiteCode. It may containPrice`。内容对单个进给周期有效。

  3. 将每个提要加载到暂存数据库或模式、传入ProductIn表中,可能每个源网站一个。这只是来自外部源的平面文件。添加一列IsValid并将默认设置为 true。

  4. 然后编写一些 SQL 将该ProductIn表及其松散和软盘内容与我们的Product表及其强标识符进行比较。

    • 我这样做的方式是,几波单独的检查,每次都将失败的行标记IsValid为假。最后将IsValid行插入到我们的ProductSite.

    • 你可能很幸运,并以一种乐观的方式侥幸逃脱。也就是说,只要在几个重要的列上找到匹配项,该匹配项就有效。(反转IsValid布尔值的默认值和更新)。

    • 这是需要一些来回工作的过程,直到它安定下来。这就是为什么您需要与您的用户一起使用标识符。目标是不排除任何外部产品,但您的起点将排除许多产品。这将包括返回我们的Product表格并改进标识符的内容(行中的值),以及用于识别匹配行的其他相关列。

  5. 对每个网站重复。

  6. 现在从我们的表格中填充我们的网站Product,使用我们有信心的信息,并显示哪些网站有出售的产品ProductSite

于 2010-11-26T11:33:56.130 回答
1

我不认为这是代码或数据库问题(还)。你说:

问题是该项目没有任何明显的唯一标识符

你需要先弄清楚这种独特性是什么,然后才能让计算机为你做这件事。听起来您需要某种模糊的字符串相似性算法。

您认为重复的一些数据示例可能会有所帮助。

于 2010-11-25T11:56:37.367 回答