Подтвердить что ты не робот

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

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

Голоса

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 и типа в то же время.

Третий подход:

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

Этот последний хороший? Слишком много индексируются три столбца?

Спасибо

4b9b3361

Ответ 1

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

add_index :votes, [:voteable_id, :voteable_type]

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

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