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

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

问题在于该项目没有任何明显的唯一标识符,它具有该项目的特定细节(其中可能有很多),然后从卖方那里对项目进行了描述。

我想要的是该项目一次出现一次,然后将用户详细信息列出了其他位置。

我将如何识别出来的重复项,而不会减慢整个数据库?然后,我还将如何从所有重复项中挑选一个广告,然后存储展示广告的其他网站。

谢谢你的帮助。

有帮助吗?

解决方案

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

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

  2. 您已经习惯了常见和荒谬的 Id 列,当您使用电子表格原型功能时,这很好;但是,数据库或开发级功能所需的内容远不远。您的用户(或老板)自然可以从数据库中获得数据库功能,并且您没有提供任何数据库。 (不,它不需要模糊的字符串逻辑或任何形式的魔法。)

解决方案

这是一个凝结的版本 IDEF1X 建模关系数据库的标准;部分标识符。

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

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

  3. 确定列的所有列和数据类型。

  4. 确定哪些列是强制性的,哪些是可选的。

  5. 确定哪些强大 身份标识. 。例如。 ManufacturerModel;短 Product Name, ,不是很长的 Description (或可能是您公司的,长期描述 标识符)。与您的用户一起工作,并解决这个问题。

  6. 您会发现您实际上周围有一小部分桌子 Product, , 如 Manufacturer, ProductType, , 也许 Vendor, , ETC。

  7. 组织这些表并将其标准化,以免您重复数据。

  8. 确保您对这些标识符有所尊重。选择哪个是唯一的。那些是 候选钥匙. 。您至少需要每张桌子一张,并且会有多个 Product. 。所有将要搜索的标识符都需要索引(唯一)。请注意,唯一索引不能无效,因此您不能选择可选的列。

  9. 是什么使单个唯一标识符 Product 可能不是单列。没关系,我们可以评估数据库中键的多个列。他们叫 复合键.

  10. 采取最佳,最稳定(不会改变)唯一标识符,其中之一是候选钥匙,并将其做到 首要的关键.

  11. 如果并且只有只有唯一标识符,可能是复合键的主键很长,因此不适合将主键迁移到子表中,则 添加 一种 替代钥匙. 。那将是 Id 柱子。请注意,这是一个附加的列和附加索引。它不能代替 Product, ,候选钥匙;他们不能被删除。

到目前为止,我们在您的公司方面有一个产品数据库,这对此很有意义。现在,我们可以评估网络另一端的产品;当我们这样做时,我们的身边有一个强大的框架,我们可以测量从网络另一侧获得的垃圾。

饲料

  1. 你需要一个 WebSite 桌子来管理提要。

  2. ProductWebSite. 。让我们称之为 ProductSite. 。它只包含我们的 ProductId, ,和 WebSiteCode. It may contain价格`。内容对单个饲料周期有效。

  3. 将每个进料加载到分期数据库或模式中,即传入 ProductIn 表,也许每个源网站一个。这只是来自外部源的平面文件。添加一列 IsValid 并将默认设置设置为true。

  4. 然后写一些比较的SQL ProductIn 桌子,带有松散而软盘的内容,我们 Product 桌子上有强大的标识符。

    • 我这样做的方式是,几个单独的检查浪潮,每行都标记失败的行, IsValid 虚假。最后插入 IsValid 排入我们的 ProductSite.

    • 您可能很幸运,并采用乐观的方法逃脱。也就是说,只要您在一些重要的列上找到匹配项,则该匹配是有效的。 (反向默认和更新 IsValid 布尔)。

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

  5. 重复每个网站。

  6. 现在从我们的网站填充我们的网站 Product 表格,使用我们对此充满信心的信息,并显示哪些网站从 ProductSite.

其他提示

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

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

您需要弄清楚在要求计算机为您做到这一点之前的Uniqeness是什么。听起来您需要某种模糊的字符串相似性算法。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top