제약 조건 네이밍 규칙
가장 일반적인 옵션은 Rails가 데이터베이스 제약 조건과 인덱스의 이름을 선택하거나 PostgreSQL이 기본값을 사용하는 것입니다(해당되는 경우). 그러나 Rails에서 사용자 정의 이름을 정의하거나 ORM을 사용하지 않는 Go 애플리케이션에서 작업할 때는 엄격한 네이밍 규칙을 준수하여 일관성과 발견 가능성을 향상시키는 것이 중요합니다.
아래 표는 PostgreSQL에 대한 사용자 정의 제약 조건의 네이밍 규칙을 설명합니다. 목적은 기존 데이터베이스의 이름을 변경하는 것이 아니라 미래의 변경의 일관성을 보장하는 것입니다.
Type | Syntax | Notes | Examples |
---|---|---|---|
Primary Key | pk_<테이블 이름>
| pk_projects
| |
Foreign Key | fk_<테이블 이름>_<컬럼 이름>[_및_<컬럼 이름>]*_<외래 테이블 이름>
| fk_projects_group_id_groups
| |
Index | index_<테이블 이름>_on_<컬럼 이름>[_및_<컬럼 이름>]*[_및_<부분 절에서의 컬럼 이름>]*
| 인덱스 이름은 모두 소문자여아 합니다. | index_repositories_on_group_id
|
Unique Constraint | unique_<테이블 이름>_<컬럼 이름>[_및_<컬럼 이름>]*
| unique_projects_group_id_and_name
| |
Check Constraint | check_<테이블 이름>_<컬럼 이름>[_및_<컬럼 이름>]*[_<접미사>]?
| 선택적인 접미사는 length 나 enum 과 같은 유효성 검사 유형을 나타내야 합니다. 또한 동일한 컬럼에 대해 여러 CHECK 제약 조건을 명확하게 구분하는 데 사용될 수 있습니다.
|
check_projects_name_length check_projects_type_enum check_projects_admin1_id_and_admin2_id_differ
|
Exclusion Constraint | excl_<테이블 이름>_<컬럼 이름>[_및_<컬럼 이름>]*_[_<접미사>]?
| 선택적인 접미사는 수행되는 제외 유형을 나타내야 합니다. | excl_reservations_start_at_end_at_no_overlap
|
관찰 사항
- 충돌을 확인하려면
db/structure.sql
을 확인하세요. - 접두사는 알파벳순으로 그룹화하고 특정 제약 조건의 유형을 빠르게 식별할 수 있도록하기 때문에 접미사보다 선호됩니다.
- 컬럼 이름을 연결하는
_and_
는 PostgreSQL에서 정의한 63자 제한을 유지하기 위해 생략할 수 있습니다. 또한 이 표기법은 가능한 한 최대한 줄여야 할 때에 약어로 표시될 수 있습니다. - 매우 구체적인 문제를 해결하기 위해 추가된 인덱스의 경우 이름이 해당 사용 목적을 반영하는 것이 타당할 수 있습니다.