使用sqlite我需要一个表来保存blob以存储md5哈希和4byte int。我计划索引int,但这个值不是唯一的。
我需要这张桌子的主键吗?索引非唯一值是否存在问题? (我假设没有任何问题或原因)。
答案 0 :(得分:11)
就个人而言,我喜欢在所有表上都有唯一的主ID。它使查找更新/删除的唯一记录更容易。
答案 1 :(得分:3)
您将如何引用SELECT * FROM Table WHERE
或UPDATE ... WHERE
?你确定你想要每一个吗?
答案 2 :(得分:3)
你已经有了。
SQLite会自动为每个表的每一行创建一个整数ROWID列。如果您没有声明自己的主键,这可以作为主键。
通常,声明自己的主键列是个好主意。在你提到的特定情况下,ROWID可能对你没问题。
答案 3 :(得分:2)
如果您希望拥有参照完整性,我的建议是使用主键。但是,索引非唯一值没有问题。唯一的问题是你的表现会降级一点。
答案 4 :(得分:1)
让两个相同的行以某种方式进入此表有什么后果?
当然,其中一个后果是浪费了空间。但我在这里谈论更为根本的事情。有时,数据中的重复行会给您错误的结果。例如,如果按int列(字段)分组,并列出每个组中的行数,则重复的行(记录)可能会让您失望,具体取决于您实际需要的内容。
如果基于关系,关系数据库的效果会更好。关系始终处于初始状态。声明主键的主要原因是防止表退出第一范式,因此不表示关系。