제약 조건 명명 규칙
가장 일반적인 옵션은 Rails가 데이터베이스 제약 조건 및 인덱스의 이름을 자동으로 선택하도록 하거나 PostgreSQL의 기본값을 사용하는 것입니다(해당되는 경우). 그러나 Rails에서 사용자 정의 이름을 정의하거나 ORM 없이 Go 애플리케이션에서 작업할 때는 일관성과 가시성을 높이기 위해 엄격한 명명 규칙을 따르는 것이 중요합니다.
아래 표는 사용자 정의 PostgreSQL 제약 조건의 명명 규칙을 설명합니다.
목적은 기존 데이터베이스의 이름을 소급적으로 변경하는 것이 아니라 향후 변경 사항의 일관성을 보장하는 것입니다.
유형 | 구문 | 노트 | 예시 |
---|---|---|---|
주 키 | pk_<테이블 이름> |
pk_projects |
|
외래 키 | fk_<테이블 이름>_<열 이름>[_and_<열 이름>]*_<외래 테이블 이름> |
fk_projects_group_id_groups |
|
인덱스 | index_<테이블 이름>_on_<열 이름>[_and_<열 이름>]*[_and_<부분절의 열 이름>]* |
인덱스 이름은 모두 소문자여야 합니다. | index_repositories_on_group_id |
고유 제약 조건 | unique_<테이블 이름>_<열 이름>[_and_<열 이름>]* |
unique_projects_group_id_and_name |
|
체크 제약 조건 | check_<테이블 이름>_<열 이름>[_and_<열 이름>]*[_<접미사>]? |
선택적 접미사는 length 및 enum 과 같이 검증 유형을 나타내야 합니다. 또한 동일한 열에 대해 여러 개의 CHECK 제약 조건을 구별하는 데 사용할 수 있습니다. |
check_projects_name_length check_projects_type_enum check_projects_admin1_id_and_admin2_id_differ
|
배제 제약 조건 | excl_<테이블 이름>_<열 이름>[_and_<열 이름>]*_[_<접미사>]? |
선택적 접미사는 수행되는 배제 유형을 나타내야 합니다. | excl_reservations_start_at_end_at_no_overlap |
관찰 사항
- 충돌이 있는지
db/structure.sql
을 확인하세요. - 접두사가 접미사보다 선호되며, 이는 주어진 제약 조건의 유형을 신속하게 식별하고 알파벳 순으로 그룹화하는 데 용이합니다.
- 열 이름을 연결하는
_and_
는 PostgreSQL에서 정의된 63자 길이 제한을 유지하기 위해 생략할 수 있습니다. 또한 이 제한을 유지하기 위해 가능한 최선의 방법으로 표기법을 축약할 수 있습니다. - 매우 특정한 문제를 해결하기 위해 추가된 인덱스의 경우 이름이 그 사용을 반영하는 것이 합리적일 수 있습니다.