레일의 두 열에 고유 인덱스를 구현하는 방법


95

테이블이 있고 두 열에 고유 인덱스를 추가하려고합니다. 이러한 열도 인덱싱됩니다. 그래서 내 질문은 하나의 열에 만 있던 인덱스를 제거 할 수 있는지 또는 세 인덱스를 모두 사용해야하는지 여부입니다.

add_index "subscriptions", ["user_id"]
add_index "subscriptions", ["content_id"]
add_index "subscriptions", ["user_id"], ["content_id"], :unique => true

5
참고로 : MySQL을 사용하는 경우 두 열의 고유 인덱스가있는 경우 별도의 인덱스 used_idcontent_id별도의 인덱스 를 사용하는 것은 의미가 없습니다 . 이것은 아마도 다른 DB에도 적용될 것입니다. 예상과는 달리 성능 (특히 삽입 / 업데이트)에 부정적인 영향을 미칩니다.
hurikhan77 2010

답변:


187
add_index :subscriptions, [:user_id, :content_id], unique: true

6
대체 구문도 있습니다. add_index : subscriptions, [: user_id, : content_id], : unique => true add_index : subscriptions, % w (user_id content_id), : unique => true 동일한 것입니다. 열을 지정합니다.
François Beausoleil

14
%w(user_id content_id)루비의 @ FrançoisBeausoleil 은 문자열 배열을 생성 할뿐 레일에 특별한 것은 아닙니다. "user_id content_id".split여전히 문자열 배열을 만드는 것과 동일한 작업을 수행 할 수 있습니다 . 나는 당신이 이것을 알고 있다고 확신합니다,이 코멘트는 다른 독자들이 이것을 레일과 잘못 관련시키지 않습니다 :)
Khaja Minhajuddin

테이블 생성에 대한 구문은 무엇입니까? <-찾은 답변 ( stackoverflow.com/questions/4870961/… )
tnaught

이것을 사용한 후 이상한 문제가 있습니다. rake db : migrate를 사용하여 새 마이그레이션을 실행할 수 없습니다. 버전 번호 rake db : migrate : up VERSION = 20180411062714 한 번에 하나의 파일 만 사용하여 마이그레이션을 실행할 수 있습니다. 나는 이미 두 개의 열에서 고유 한 테이블에 대한 데이터를 가지고 있습니다.
thedudecodes apr

1
@ FrançoisBeausoleil 사실 그들은 같은 것이 아닙니다 %w(user_id content_id). 문자열 배열입니다. 이는 ['user_id', 'content_id']. Array of Symbols에 대한 다른 표기법은 %i(user_id content_id), 또는 OP가 작성 [:user_id, :content_id]
Sasa Blagojevic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.