Ruby on Rails - Уникальность
У меня есть вопрос относительно подтверждения уникальности.
От: http://guides.rubyonrails.org/active_record_validations_callbacks.html
"Это не создает ограничение уникальности в базе данных, поэтому может случиться, что два разных подключения к базе данных создадут две записи с одинаковым значением для столбца, который вы намерены быть уникальным. Чтобы избежать этого, вы должны создать уникальный индекс в вашем база данных."
Означает ли это, что когда я проверяю уникальность, мне нужно добавить индекс в базу данных? Или это необходимо только тогда, когда может случиться так, что два регистра будут вставлены одновременно?
Какова лучшая практика здесь: Уникальность и Индекс всегда вместе или в зависимости от ситуации?
1 ответ
По сути, это состояние гонки. В этом Алиса подписывается с адресом электронной почты alice@gmail.com и дважды нажимает кнопку отправки. Потому что она ударила их так быстро, у них остались только воспоминания, и они прошли проверку. Затем оба записываются в базу данных. Решение этой проблемы заключается в том, чтобы база данных также проверяла уникальность между временем, когда они хранятся в памяти или записываются в базу данных.
То, что вам нужно сделать, это добавить следующую строку в миграцию:
add_index :table_name, :column_name, unique: true
Что касается передового опыта, вы наверняка захотите сделать это, если два одинаковых могут вызвать проблемы. Вероятно, не так уж и много, если два твита отправляются с одинаковым контентом, но если у вас два пользователя с одним и тем же адресом электронной почты, это становится проблемой.