2013-05-20 1 views
1

나는 나의 모델이 같은 검증 추가 한 :는 유효성을 검사 : 이름, 고유성 : {범위 : USER_ID는}

validates :name, uniqueness: {scope: user_id} 

을 그리고 내 이전에이 같은 add_index 등을 추가 :

add_index(:posts, :name) 

하지만 난 그냥 레일 api page 데이터 무결성에 대한 부분을 읽어보십시오.

그리고 내 모델에 무결성 오류가 있는지 궁금해서 제 질문은 : 색인을 다시 작성해야합니까?

add_index 등 (: 게시물 [: 이름 : USER_ID는), 독특한 : 사실

덕분에 모든

답변

3

이야기하는 데이터 무결성은 애플리케이션 수준과 데이터베이스 수준에서 이미 알고있는 것처럼 2 단계로 강화할 수 있습니다.

응용 프로그램 수준 : 추가 한 유효성 검사. 데이터베이스 수준에서 : 제안한 색인

이미 첫 번째를 설정했습니다. 따라서 모든 것이 Rails 모델을 통해 DB에 저장되는 한 db 무결성 문제는 발생하지 않습니다.

그러나 타사 응용 프로그램이 db에 쓸 수있는 경우 db 수준에서도 고유성을 적용하는 것은 좋지 않습니다.

첫 번째가 충분하더라도 두 번째 설정은 좋지 않습니다.

또한 user_id와 연결된 이름을 자주 쿼리하는 경우 실제로는 add_index(:posts, [:name, :user_id])을 사용하는 것이 더 빠른 쿼리를 만듭니다.

+0

안녕하세요, 그렇습니다. 색인 생성 부분이 쿼리를 더 빠르게 만듭니다. 또한 여러 속성을 전달할 때 순서가 매우 중요합니다. 같은 것을 찾으려면 : name, 또는 : name과 user_id는 빠른 쿼리 일 것입니다. user_id만으로는 검색 할 수 없습니다 : S. – chopi321

+0

답변 해 주셔서 감사합니다. – chopi321

1

는 예 - 그건 좋은 생각이 될 것입니다. 모델 유효성 검사는 복합 기본 키를 의미합니다.