Как индексировать полиморфную таблицу в 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.