Java 如何识别从多个提要收集的重复项并在数据库中链接到它们

Java 如何识别从多个提要收集的重复项并在数据库中链接到它们,java,database,jsp,duplicate-data,multiple-records,Java,Database,Jsp,Duplicate Data,Multiple Records,我有一个数据库,存储从许多站点获取的产品详细信息,并通过各个站点API收集。调用提要时,详细信息存储在数据库表中 我遇到的问题是,由于卖家在许多网站上列出了完全相同的产品,我的数据库中最终出现了重复的项目,然后当我在网页上显示这些项目时,会出现许多重复的项目 问题在于,商品没有任何明显的唯一标识符,它有商品的具体细节(可能有很多),然后是卖家对商品的描述 我希望该项目显示一次,然后向用户提供该项目在其他地方的详细信息 在不降低整个数据库的速度的情况下,如何识别传入的重复项?然后,我如何从所有副本

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

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

问题在于,商品没有任何明显的唯一标识符,它有商品的具体细节(可能有很多),然后是卖家对商品的描述

我希望该项目显示一次,然后向用户提供该项目在其他地方的详细信息

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


谢谢你的帮助

我认为这不是一个代码或数据库问题。你说:

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

你需要先弄清楚这种单一性是什么,然后才能让电脑帮你做这件事。听起来你需要某种模糊的字符串相似性算法


一些你认为重复的数据可能有帮助。

< P>这个问题有两个方面,两个都在你的一边。当您知道如何处理这个问题时,将代码写入程序(Java或SQL将很容易)。我将首先命名它们,然后确定解决方案

  • 出于某种未知的原因,您假设从多个站点收集产品描述不会收集相同的产品

  • 您已经习惯了常见且无意义的
    Id
    列,当您使用电子表格原型功能时,这是很好的;但它与数据库或开发级功能的要求相差甚远。您的用户(或老板)自然期望从数据库获得数据库功能,而您没有提供任何。(不,它不需要模糊字符串逻辑或任何类型的魔法。)

  • 解决方案

    这是关系数据库建模标准的浓缩版本;该部分重新定义了标识符

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

  • 你不能简单地从另一个网站上窃取数据,你需要考虑你的网站对产品的要求。贵公司对产品的理解是什么,以及如何识别产品

  • 标识列的所有列和数据类型

  • 确定哪些列是必需的,哪些是可选的

  • 确定哪些是强标识符。例如
    制造商
    型号
    ;短的
    产品名称
    ,而不是长的
    描述
    (或者对于您的公司,长的描述是一个标识符)。与您的用户合作,并解决这一问题

  • 您会发现实际上在
    产品
    周围有一小群表,例如
    制造商
    产品类型
    ,可能是
    供应商
    ,等等

  • 整理这些表,并使其正常化,这样就不会重复数据

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

  • 产品
    的单个唯一标识符可能不是一列。没关系,我们可以为数据库中的键计算多个列;它们被称为复合键

  • 获取最佳、最稳定(不会更改)的唯一标识符,即候选密钥之一,并使其成为主键

  • 如果且仅当唯一标识符主键(可能是复合键)非常长,因此不适合迁移到子表的主键,则添加代理键。这将是
    Id
    列。请注意,这是一个附加列和附加索引。它不能替代
    产品
    的标识符,即候选密钥;它们不能被移除

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

    提要

  • 您需要一个
    网站
    表来管理提要

  • 产品
    网站
    之间将有一个关联表(多对多)。我们称之为
    ProductSite
    。它将只包含我们的
    ProductId
    ,以及
    网站代码。它可能包含
    Price`。内容对单个进料循环有效

  • 将每个提要加载到一个暂存数据库或模式,一个传入的
    ProductIn
    表,可能每个源网站一个。这只是来自外部源的平面文件。添加