2012-09-14 12 views
2

Ive는 유일성의 유효성 확인과 관련하여 질문이 있습니다.Ruby on Rails - 고유성

에서 : http://guides.rubyonrails.org/active_record_validations_callbacks.html#uniqueness

"그것은 데이터베이스에 고유성 제약 조건을 만들지 않습니다, 그래서 두 개의 서로 다른 데이터베이스 연결하면 고유하고자하는 열의 값이 같은 두 개의 레코드를 만드는 것이 발생할 수 있습니다에. 이를 방지하려면 데이터베이스에 고유 한 인덱스를 만들어야합니다. "

고유성을 확인할 때마다 데이터베이스에 색인을 추가해야합니까? 아니면 두 명의 기록자가 동시에 삽입 될 가능성이있을 때만 필요합니까?

여기서 가장 좋은 방법은 무엇입니까? 고유하고 항상 색인을 함께 사용하거나 상황에 종속적입니까?

답변

3

본질적으로 경쟁 조건입니다. Alice는 이메일 주소 [email protected]에 가입하고 제출 버튼을 두 번 누릅니다. 그녀는 너무 빨리 그들을 쳤기 때문에, 그녀는 단지 그들을 기억하고 있으며, 그들은 검증을 통과합니다. 그런 다음 둘 다 데이터베이스에 기록됩니다. 이에 대한 해결책은 데이터베이스가 메모리에 저장되거나 데이터베이스에 기록되는 시간 사이의 고유성을 검사하도록 요구하는 것입니다.

add_index :table_name, :column_name, unique: true 

지금까지와 같은 모범 사례를, 당신을 확실히 문제가 발생할 것 같은 두 가지를 가지고 때를 수행 할 경우 : 당신이해야 할 일은

마이그레이션에 다음과 같은 줄을 추가합니다. 두 개의 트윗이 같은 내용으로 제출되면 큰 문제는 아니지만 동일한 이메일 주소를 가진 두 명의 사용자가있는 경우 문제가됩니다.