我有一个表来检查具有特定IP地址的用户是否对这些列具有评级:rates(ip,item_id,created_at)
我可以为此表定义两个主键
1- primary(ip,item_id)
2-主要(id)
但是我真的不需要它们,因为这个表需要没有加入和没有更新,我应该定义主键吗? 我可以只为index_id和ip索引性能,但没有主键。
答案 0 :(得分:1)
一般来说,设计面向未来以及今天。你有一个非常自然的复合主键,除非你能够或者曾经能够多次评价一个项目,在这种情况下你应该引入id列。
答案 1 :(得分:1)
您应该使用主键。正如ctrahey所说,如果组合是唯一的,那么使用选项#1,如果不使用#2(使用附加列)。
答案 2 :(得分:1)
查看WHERE
中的SELECTs
条款。这是一种快速且(非常)肮脏的方式来查看需要编入索引的内容。
你应该有PRIMARY KEY
。它必须是独一无二的。它既可以是自然的,也可以是自然的。密钥 - 如果您不想要任何重复的ip
值,那么这是一个很好的候选者。如果你没有自然的' PK,然后有一个AUTO_INCREMENT
。
你不能有两个PRIMARY KEYs
,但是一个PK可以有两列。