我有一张小桌子" ImgViews
"它只包含两列,一个名为&#34的ID列; imgID
" +一个名为" viewed
"的计数列,都设置为int。
这个想法是仅将此表用作计数器,以便我可以跟踪查看/单击具有特定ID的图像的频率。
该表没有主键或外键,也没有关系。 但是,当我输入一些数据进行测试并尝试多次输入相同的imgID时,它总是显示为灰色且带有红色错误图标。
通常这是有道理的,因为你不想要重复的记录,但由于目的不同,这对我来说是有意义的。
有人可以告诉我如何实现这一目标或解决它吗?什么是常见的方法呢?
提前非常感谢,蒂姆。答案 0 :(得分:1)
您必须在该表上拥有一些唯一索引。确保没有唯一索引,也没有唯一或主键约束。
或者,SSMS根本不知道如何识别刚刚插入的行,因为它没有密钥。
拥有没有(逻辑)主键的表通常不是最佳做法。在您的情况下,我将图像ID作为主键并递增计数器。 MERGE
语句非常适合同时执行和插入或更新。替代品存在。
如果您不喜欢,请创建代理主键(将标识列设置为主键)。
目前您无法解决特定行问题。这使桌子有点笨拙。
答案 1 :(得分:1)
如果允许多行完全相同,您将如何更新/删除其中一行? 您如何期望数据库能够“知道”#34;你提到的那一行? 至少添加一个单独的标识列(首选也是聚集索引)。
作为旁注:您"喜欢避免不需要的数据" ,但同时反复插入重复内容而不是简单地添加,这很奇怪提高每张图片的点击次数......
答案 2 :(得分:1)
要满足存储非唯一值的要求,只需删除主键,唯一约束和唯一索引。我希望您可能仍希望在ImgID上使用非唯一聚簇索引来提高聚合查询的性能,否则需要扫描整个表并进行排序。我建议你存储一个插入时间戳,不是为了提供唯一性,而是为了方便按日期清除数据,如果将来需要的话。
答案 3 :(得分:0)
如果表没有主键或唯一约束,则使用SQL语句而不是GUI。