Ruby on Rails - Уникальность

У меня есть вопрос относительно подтверждения уникальности.

От: http://guides.rubyonrails.org/active_record_validations_callbacks.html

"Это не создает ограничение уникальности в базе данных, поэтому может случиться, что два разных подключения к базе данных создадут две записи с одинаковым значением для столбца, который вы намерены быть уникальным. Чтобы избежать этого, вы должны создать уникальный индекс в вашем база данных."

Означает ли это, что когда я проверяю уникальность, мне нужно добавить индекс в базу данных? Или это необходимо только тогда, когда может случиться так, что два регистра будут вставлены одновременно?

Какова лучшая практика здесь: Уникальность и Индекс всегда вместе или в зависимости от ситуации?

1 ответ

Решение

По сути, это состояние гонки. В этом Алиса подписывается с адресом электронной почты alice@gmail.com и дважды нажимает кнопку отправки. Потому что она ударила их так быстро, у них остались только воспоминания, и они прошли проверку. Затем оба записываются в базу данных. Решение этой проблемы заключается в том, чтобы база данных также проверяла уникальность между временем, когда они хранятся в памяти или записываются в базу данных.

То, что вам нужно сделать, это добавить следующую строку в миграцию:

add_index :table_name, :column_name, unique: true

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

Другие вопросы по тегам