处理重复项而不从数据库中删除它们

时间:2013-01-28 18:32:12

标签: mysql sql

我想知道是否有一些常规方法来处理数据库中的重复项而不实际删除重复的行。或者我想要实现的具体名称,所以我可以查看。

为什么我要保留重复?因为我必须监控它们。我必须知道它们是重复的而不是例如可搜索,但与此同时,我必须保留它们,因为我从外部源更新行,如果我删除它们,它们会在我从外部源更新后立即返回数据库。

我有两个想法:

  1. 有一个额外的布尔列“可搜索”,但我觉得这是一个部分解决方案,将来可能会变得不够

  2. 有一个额外的列“duplicate_of”。它将保留行重复的列的id。它会是同桌的外键,有点奇怪。不是吗?

  3. 我知道这不是一个具体的编程问题,但我认为有人必须处理类似的情况(Facebook - 他们跟踪那些与其他人重复的页面),知道经过验证的解决方案会很棒。< / p>

    编辑:这些是非常接近的副本,主要取决于它们的位置(lat,lng),所以DISTINCT可能不是这里的解决方案

2 个答案:

答案 0 :(得分:2)

我会创建一个具有DISTINCT值的视图。有一个额外的列可供搜索听起来很乏味。你的第二个想法实际上更可行,并且自引用表没有什么奇怪的。

答案 1 :(得分:2)

解决方案取决于其他几个因素。特别是,数据库是否支持真正的删除和更新(除了设置复制信息)?

您有一系列解决方案。一种是定期将不同的值放在单独的表中。如果您有批量插入,并且没有更新/删除,则此方法很有效。

如果您有正在更新的数据库,那么您可能希望在记录上维护版本号。这可以让你跟踪它。据推测,如果它是重复的,则其中有另一个重复的密钥。

第二种方法的问题在于它可能导致重复的树状结构。其中A - > B - > C和D - >所以A和D是重复的,但这并不明显。如果您总是输入最早的值,则没有更新或删除,那么此解决方案是合理的。