1

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

我为什么要保留重复项?因为我必须监视他们。我必须知道它们是重复的并且不可搜索,但与此同时,我必须保留它们,因为我从外部源更新行,如果我要删除它们,它们会回到一旦我从外部源更新数据库。

我有两个想法:

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

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

我知道这不是一个特定的编程问题,但我认为一定有人处理过类似的情况(Facebook - 他们跟踪那些与其他人重复的页面),并且很高兴知道经过验证的解决方案。

编辑:这些是紧密重复的,主要由它们的位置(lat,lng)确定,所以 DISTINCT 可能不是这里的解决方案

4

2 回答 2

2

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

于 2013-01-28T18:37:33.877 回答
2

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

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

如果您有一个正在更新的数据库,那么您可能希望在记录中维护一个版本号。这使您可以跟踪它。据推测,如果它是重复的,那么它里面还有另一个重复的键。

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

于 2013-01-28T18:40:30.987 回答