SQL Server:如何允许小表上的重复记录

时间:2014-08-23 15:27:08

标签: sql sql-server database-design duplicates

我有一张小桌子" ImgViews"它只包含两列,一个名为&#34的ID列; imgID" +一个名为" viewed"的计数列,都设置为int。

这个想法是仅将此表用作计数器,以便我可以跟踪查看/单击具有特定ID的图像的频率。

该表没有主键或外键,也没有关系。 但是,当我输入一些数据进行测试并尝试多次输入相同的imgID时,它总是显示为灰色且带有红色错误图标。

通常这是有道理的,因为你不想要重复的记录,但由于目的不同,这对我来说是有意义的。

有人可以告诉我如何实现这一目标或解决它吗?什么是常见的方法呢?

提前非常感谢,蒂姆。

4 个答案:

答案 0 :(得分:1)

您必须在该表上拥有一些唯一索引。确保没有唯一索引,也没有唯一或主键约束。

或者,SSMS根本不知道如何识别刚刚插入的行,因为它没有密钥。

拥有没有(逻辑)主键的表通常不是最佳做法。在您的情况下,我将图像ID作为主键并递增计数器。 MERGE语句非常适合同时执行和插入或更新。替代品存在。

如果您不喜欢,请创建代理主键(将标识列设置为主键)。

目前您无法解决特定行问题。这使桌子有点笨拙。

答案 1 :(得分:1)

如果允许多行完全相同,您将如何更新/删除其中一行? 您如何期望数据库能够“知道”#34;你提到的那一行? 至少添加一个单独的标识列(首选也是聚集索引)。

作为旁注:您"喜欢避免不需要的数据" ,但同时反复插入重复内容而不是简单地添加,这很奇怪提高每张图片的点击次数......

答案 2 :(得分:1)

要满足存储非唯一值的要求,只需删除主键,唯一约束和唯一索引。我希望您可能仍希望在ImgID上使用非唯一聚簇索引来提高聚合查询的性能,否则需要扫描整个表并进行排序。我建议你存储一个插入时间戳,不是为了提供唯一性,而是为了方便按日期清除数据,如果将来需要的话。

答案 3 :(得分:0)

如果表没有主键或唯一约束,则使用SQL语句而不是GUI。