Как индексировать полиморфную таблицу в rails с не уникальным "типом ассоциации" и " идентификатором ассоциации"

у меня есть полиморфная таблица под названием "Голоса", где есть голоса от ответов и вопросов.

голосов

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]

этот последний хороший? Три столбца должны быть проиндексированы слишком много?

спасибо

1 ответов


ваш первый подход является правильным

add_index :votes, [:voteable_id, :voteable_type]

пока вы не добавить :unique => true это не быть уникальным. И вы не должны делать его уникальным, так как это приведет только к одному голосу за избирателя. As Tashos об этом говорится в комментарии.

третий подход тоже будет работать, и здесь вы можете использовать unique ограничение, поэтому каждый пользователь может голосовать только один раз за votable.