在数据库上有重复记录总是错的?

时间:2014-05-18 16:36:57

标签: database-design duplicate-data

上下文:用户在某个城市,特定时间的特定日期为某些主题,级别创建挑战。

用户可能对同一主题,级别,同一城市,同一时间和同一时间(同时播放的挑战)提出更多挑战。

可以一次创建一个挑战。

在我的实际表中,我有这种情况的重复记录(具有不同的主键值)。这是错的吗?怎么会这样?

表挑战:

id_challenge  INT (pk auto increment)
id_subject INT
id_level INT
id_city INT
id_user INT
date DATE
time TIME
comment VARCHAR(100)

1 个答案:

答案 0 :(得分:1)

从技术上讲,我不相信这些记录是"重复" 本身,因为它们指的是两个不同的实体 - 即使comment是相同的。我当然指的是挑战#79和#80被单独处理的情况,即使它们中有相同的数据。也就是说,在他们参与的用户挑战列表中,他们可以将两个挑战列为两个单独的行。同一个比喻延伸到一个城市的挑战列表。

但是,如果您发现自己对这些行进行分组,计数或排序以删除重复项,则这是一种气味。即使UI只允许您一次创建一个,每个新组合更多的是" profile"可以多次调用。存储数量或拥有父母"挑战资料"表可能是更好的选择。

此外,如果"重复"对于每个给定的组合,行数量为数百万,您可能会看到强制问题,声明重复和规范化的一些大小优势。但即使在那时,存储也很便宜,并且有一张表,这一百万条记录只有几MB。


但是......恕我直言,用户以这种方式一个接一个地创建多行的事实可能表明需要重新设计的东西 - 可能在前端和后端都有。