一尘不染

如何识别从多个提要中收集的重复项并将其链接到数据库中

jsp

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

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

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

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

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

谢谢你的帮助。


阅读 155

收藏
2020-06-08

共1个答案

一尘不染

问题是双重的,两者都在您身边。当您知道如何处理时,请将代码编写到程序中(使用Java或SQL会很容易)。我先给它们命名,然后确定解决方案。

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

  2. 您已经习惯了普通的和无意义的Id专栏,在使用电子表格原型开发功能时,这很好。但是它离数据库或开发级功能的需求还很近。您的用户(或老板)自然具有数据库的数据库功能,而您未提供任何功能。(并且不,它不需要模糊字符串逻辑或任何形式的魔术。)

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

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

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

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

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

  5. 确定哪些是强 标识符 。例如。ManufacturerModel; short Product Name,而不是long Description(或者对于您的公司而言,long描述 标识符)。与您的用户一起工作,并努力解决。

  6. 你会发现你确实有表的一小簇周围Product,比如ManufacturerProductType也许Vendor等。

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

  8. 确保您对这些标识符有一点尊重。选择哪个将是唯一的。这些是 候选键 。每张表至少需要一个,并且中将有多个Product。将要搜索的所有标识符都需要编制索引(是否唯一)。请注意,唯一索引不能为空,因此您不能选择可选列。

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

  10. 取得最佳,最稳定(不会改变的唯一标识符),候选键之一,并使其成为 主键

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

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

提要

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

  2. 届时将有关联表(很多到多)之间ProductWebSite。叫它ProductSite。它只包含我们的ProductIdWebSiteCode. It may contain价格。内容对单个进给周期有效。

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

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

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

    • 您可能很幸运,并且乐于接受乐观的态度。也就是说,只要在几个重要的列上找到匹配项,该匹配项就有效。(反转默认值并更新IsValid布尔值)。

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

  5. 对每个网站重复上述步骤。

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

2020-06-08