[RUBY-ON-RAILS] 마이그레이션은 열 조합에 고유 제한 조건을 추가하는
RUBY-ON-RAILS마이그레이션은 열 조합에 고유 제한 조건을 추가하는
내가 필요한 것은 열 조합에 고유 제한 조건을 적용 할 마이그레이션입니다. 즉 사람들 테이블, FIRST_NAME의 조합, LAST_NAME과 생년월일은 고유해야합니다.
해결법
-
==============================
1.add_index 등 : 명, [: FIRSTNAME : LASTNAME : DOB] : 고유 => 사실
add_index 등 : 명, [: FIRSTNAME : LASTNAME : DOB] : 고유 => 사실
-
==============================
2.howmanyofme.com에 따르면, 미국에서만 "존 스미스라는 이름의 46,427명이 있습니다." 즉 일의 127년에 관하여이다. 이 아니라 인간의 평균 수명 이상으로서, DOB 충돌 수학적 특정 수단이된다.
howmanyofme.com에 따르면, 미국에서만 "존 스미스라는 이름의 46,427명이 있습니다." 즉 일의 127년에 관하여이다. 이 아니라 인간의 평균 수명 이상으로서, DOB 충돌 수학적 특정 수단이된다.
내가 말하고 모든 고유 필드의 특정 조합이 미래에 극단적 인 사용자 / 고객 불만으로 이어질 수 있다는 점이다.
필요한 경우, 국가 식별 번호와 같은, 실제로 독특한 무언가를 생각해 보자.
(나는 아주 늦게 일을 가진 자에게있어 실현하지만, 미래의 리더를 도울 수 있습니다.)
-
==============================
3.당신은 인덱스없이 제약 조건을 추가 할 수 있습니다. 이것은 당신이 사용중인 데이터베이스에 따라 달라집니다. 다음은 포스트 그레스에 대한 샘플 마이그레이션 코드입니다. (TRACKING_NUMBER, 캐리어)는 제약 조건에 사용할 컬럼의 목록입니다.
당신은 인덱스없이 제약 조건을 추가 할 수 있습니다. 이것은 당신이 사용중인 데이터베이스에 따라 달라집니다. 다음은 포스트 그레스에 대한 샘플 마이그레이션 코드입니다. (TRACKING_NUMBER, 캐리어)는 제약 조건에 사용할 컬럼의 목록입니다.
class AddUniqeConstraintToShipments < ActiveRecord::Migration def up execute <<-SQL alter table shipments add constraint shipment_tracking_number unique (tracking_number, carrier); SQL end def down execute <<-SQL alter table shipments drop constraint if exists shipment_tracking_number; SQL end end
추가 할 수있는 다른 제약 조건이있다. 워드 프로세서 읽기
-
==============================
4.안녕 당신은 예를 들어, 컬럼에 마이그레이션에 고유 인덱스를 추가 할 수 있습니다
안녕 당신은 예를 들어, 컬럼에 마이그레이션에 고유 인덱스를 추가 할 수 있습니다
add_index(:accounts, [:branch_id, :party_id], :unique => true)
또는 각 열에 대해 고유 인덱스를 분리
-
==============================
5.a의 전형적인 예에서 사용자와 포스트 사이에 테이블을 조인
a의 전형적인 예에서 사용자와 포스트 사이에 테이블을 조인
create_table :users create_table :posts create_table :ownerships do |t| t.belongs_to :user, foreign_key: true, null: false t.belongs_to :post, foreign_key: true, null: false end add_index :ownerships, [:user_id, :post_id], unique: true
두 개의 유사한 레코드를 만들려고하는 것은 (내 경우에는 포스트 그레스) 데이터베이스 오류가 발생합니다 :
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_ownerships_on_user_id_and_post_id" DETAIL: Key (user_id, post_id)=(1, 1) already exists. : INSERT INTO "ownerships" ("user_id", "post_id") VALUES ($1, $2) RETURNING "id"
예를 들면 것을 일 :
Ownership.create!(user_id: user_id, post_id: post_id) Ownership.create!(user_id: user_id, post_id: post_id)
완전 실행 가능한 예 : https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
dB / schema.rb 생성 : https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744a
-
==============================
6.완성도를 위해, 그리고 회피 혼란을 여기에 같은 일을하고있는 3 가지 방법이 있습니다 : 레일의 열 조합에 명명 된 고유 제한 조건을 추가 5.2 이상
완성도를 위해, 그리고 회피 혼란을 여기에 같은 일을하고있는 3 가지 방법이 있습니다 : 레일의 열 조합에 명명 된 고유 제한 조건을 추가 5.2 이상
하자 우리가 광고주에 속하는 열 reference_code를 가지고 위치 테이블을 가지고 있고 당신은 단지 광고 주당 1 개 참조 코드를 싶은 말은. 그래서 당신은 열 조합에 고유 제한 조건을 추가하고 이름을합니다.
하다:
편 g 이주 AddUniquenessConstraintToLocations
그리고이 하나 라이너 같은 마이그레이션 모습 중 하나 일합니다
class AddUniquenessConstraintToLocations < ActiveRecord::Migration[5.2] def change add_index :locations, [:reference_code, :advertiser_id], unique: true, name: 'uniq_reference_code_per_advertiser' end end
또는이 블록 버전.
class AddUniquenessConstraintToLocations < ActiveRecord::Migration[5.2] def change change_table :locations do |t| t.index ['reference_code', 'advertiser_id'], name: 'uniq_reference_code_per_advertiser', unique: true end end end
또는이 원시 SQL 버전
class AddUniquenessConstraintToLocations < ActiveRecord::Migration[5.2] def change execute <<-SQL ALTER TABLE locations ADD CONSTRAINT uniq_reference_code_per_advertiser UNIQUE (reference_code, advertiser_id); SQL end end
이들의이 같은 결과를해야합니다, 당신의 schema.rb을 확인
from https://stackoverflow.com/questions/3370271/a-migration-to-add-unique-constraint-to-a-combination-of-columns by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 다른 표준 "생산"이 아닌 데이터베이스 또는 "개발"에 레일 마이그레이션을 사용하여 (0) | 2020.02.18 |
---|---|
[RUBY-ON-RAILS] 어떻게 레일 외부 루비 스크립트에서 액티브를 사용 하는가? (0) | 2020.02.18 |
[RUBY-ON-RAILS] 루비 온 레일스와 함께 사용하기 위해 창에 포스트 그레스 설치 (0) | 2020.02.18 |
[RUBY-ON-RAILS] 레일에 루비에 여러 데이터베이스에 연결 (0) | 2020.02.18 |
[RUBY-ON-RAILS] 왜 모든 레일 헬퍼 모두가, 모든 뷰에 사용할 수있는 시간인가? 이 해제하는 방법이 있나요? (0) | 2020.02.18 |