NOT NULL 제약 조건
GitLab 데이터베이스에서 NOT NULL 제약 조건을 추가, 관리, 제거하는 방법을 설명합니다.
NULL 값을 가져서는 안 되는 모든 속성은 데이터베이스에서 NOT NULL 칼럼으로 정의해야 합니다. 애플리케이션 로직에 따라, NOT NULL 칼럼에는 모델에 presence 유효성 검사를 정의 하거나, 데이터베이스 정의의 일부로 기본값을 지정해야 합니다. 예를 들어, 후자는 항상 non- NULL 값을 가져야 하지만 애플리케이션이 매번 강제할 필요 없는 잘 정의된 기본값이 있는 boolean 속성에 해당할 수 있습니다 (예: active=true ). belongs_to 연관 관계의 일부인 외래 키 칼럼의 경우, 별도의 presence: true 유효성 검사 대신 연관 관계에서 optional: false 를 사용하는 것이 좋습니다. 이 방법이 의미적으로 더 올바르며 Rails의 내장 연관 관계 유효성 검사를 활용합니다. GitLab은 config/application.rb 에 config.active_record.belongs_to_required_by_default = false 가 설정되어 있으므로, belongs_to 연관 관계는 기본적으로 선택 사항이며 명시적으로 필수로 표시해야 합니다. NOT NULL 칼럼이 있는 새 테이블 생성 # 새 테이블을 추가할 때, 모든 NOT NULL 칼럼은 create_table 내부에서 직접 정의해야 합니다. 예를 들어, 두 개의 NOT NULL 칼럼이 있는 테이블을 생성하는 마이그레이션 db/migrate/20200401000001_create_db_guides.rb 를 고려해 보세요: class CreateDbGuides < Gitlab::Database::Migration[2.1] def change create_table :db_guides do |t| t.bigint :stars, default: 0, null: false t.bigint :guide, null: false end end end 기존 테이블에 NOT NULL 칼럼 추가 # GitLab에서 PostgreSQL 11이 최소 버전이 된 이후로, NULL 및/또는 기본값이 있는 칼럼 추가가 훨씬 쉬워졌으며, 모든 경우에 표준 add_column 헬퍼를 사용해야 합니다. 예를 들어, db_guides 테이블에 새로운 NOT NULL 칼럼 active 를 추가하는 마이그레이션 db/migrate/20200501000001_add_active_to_db_guides.rb 를 고려해 보세요: class AddExtendedTitleToSprints < Gitlab::Database::Migration[2.1] def change add_column :db_guides, :active, :boolean, default: true, null: false end end 기존 칼럼에 NOT NULL 제약 조건 추가 # 기존 데이터베이스 칼럼에 NOT NULL 을 추가하려면 일반적으로 최소 두 개의 다른 릴리즈에 걸쳐 여러 단계가 필요합니다. 백그라운드 마이그레이션을 사용할 필요가 없을 만큼 테이블이 충분히 작다면, 이