루비 온 레일즈의 여러 열에 대한 보안
사용자가 읽은 기사를 추적하는 기능을 구현하고 있습니다.
create_table "article", :force => true do |t|
t.string "title"
t.text "content"
end
지금까지 내 마이그레이션입니다.
create_table :user_views do |t|
t.integer :user_id
t.integer :article_id
end
user_views 테이블은 항상 하나만 검색하는 것이 아니라 두 열을 찾기 위해 쿼리됩니다. 내 질문은 내 색인이 어떻게 생겼는지입니다. 이 테이블에 더 많은 옵션이 무엇이든이 테이블의 순서에 차이가 있습니까? 내 대상 DB는 Postgres입니다.
add_index(:user_views, [:article_id, :user_id])
감사합니다.
Update :
두 열에 동일한 값을 포함하는 행이 하나만 적합한 수 있기 때문에 (user_id가 article_id를 읽었는지 알기 때문에) : unique 옵션을 알기 때문에? 제가 착각하지 않았다면 직접 확인하지 않고 사용자가 기사를 방문 할 때마다 삽입 만하면됩니다.
순서는 인덱싱에서 중요합니다.
- 가장 선택적인 필드, 즉 행 수를 가장 빨리 좁히는 필드를 먼저 시작하십시오.
- 는 인덱스 보기 처음부터 순서대로 열을 사용하는 경우에만 사용됩니다 . 즉에서 인덱싱
[:user_id, :article_id]
하면user_id
또는user_id AND article_id
에서 빠른 쿼리를 수행 할 수 있지만에서는 수행 할 수 없습니다article_id
.
마이그레이션 add_index
라인은 다음과 같아야합니다.
add_index :user_views, [:user_id, :article_id]
'고유'옵션에 관한 질문
Rails 에서이 작업을 수행하는 쉬운 방법 은 다음과 같이 validates
범위가 지정된 모델에서 사용 하는 것입니다 uniqueness
( documentation ).
validates :user, uniqueness: { scope: :article }
유효성 검사 시점과 수준에서 고유성을 확인하는 것에 대한 경고 일뿐입니다. 후자는 데이터베이스에서 수행하고, 모델에서 수행합니다. 동시에 실행되는 모델의 여러 인스턴스가 동시에 실행될 수 있기 때문에 유효성 검사는 경합 조건의 영향을받습니다. 즉, 일부 경우에는 감지하지 못할 수 있습니다. (예 : 정확히 같은 시간에 동일한 양식을 두 번 출시).
참고 URL : https://stackoverflow.com/questions/6169996/index-on-multiple-columns-in-ruby-on-rails
'IT' 카테고리의 다른 글
Vim에서 기본 글꼴 크기를 어떻게 설정합니까? (0) | 2020.09.13 |
---|---|
Nexus에서 아티팩트를 배포 할 때 오류 발생 (0) | 2020.09.13 |
Bash의 HMAC-SHA1 (0) | 2020.09.13 |
변수의 유형이 변수에 기록 유형과 일치하는지 확인하는 방법 (0) | 2020.09.13 |
PostgreSQL은 모든 콘텐츠를 삭제합니다. (0) | 2020.09.13 |