13

我有一个名为“Votes”的多态表,其中有来自 Answers 和 Questions 的投票。

投票

user_id     voteable_id    voteable_type      value

   1             2            Answer            1
   2             2            Answer            1

在这种情况下,id = 2 的答案有两票赞成。

问题是:如何索引这个表?

第一种方法:

add_index :votes, [:voteable_id, :voteable_type]

这不起作用,因为重复的键值将违反唯一约束

第二种方法:

 add_index :votes, :voteable_id, 
 add_index :votes, :voteable_type

我猜这个不会有太多性能,因为同时对 id 和 type 进行复合查询。

第三种方法:

add_index :votes, [:user_id, :voteable_id, :voteable_type]

最后一张好看吗?三列是否要索引太多?

谢谢

4

1 回答 1

39

你的第一种方法是正确的

add_index :votes, [:voteable_id, :voteable_type]

只要你不添加:unique => true它就不会是唯一的。而且你不应该让它独一无二,因为这将导致每次投票只能投一票。正如塔索斯在评论中所说。

第三种方法也可以,在这里您可以使用unique约束,因此每个用户只能投票一次。

于 2012-11-20T16:47:52.243 回答