MySQL FK에 대한 적절한 명명 규칙은 무엇입니까?
고유해야하므로 MySQL DB에서 FK의 이름은 무엇입니까?
MySQL에서는 외래 키 제약 조건에 기호 이름을 지정할 필요가 없습니다. 이름이 주어지지 않으면 InnoDB는 자동으로 고유 한 이름을 생성합니다.
어쨌든 이것은 내가 사용하는 규칙입니다.
fk_[referencing table name]_[referenced table name]_[referencing field name]
예:
CREATE TABLE users(
user_id int,
name varchar(100)
);
CREATE TABLE messages(
message_id int,
user_id int
);
ALTER TABLE messages ADD CONSTRAINT fk_messages_users_user_id
FOREIGN KEY (user_id) REFERENCES users(user_id);
user_id
위의 예에서와 같이 참조 및 참조 테이블에서 동일한 필드 이름을 유지하려고합니다 . 이것이 실용적이지 않은 경우 참조 된 필드 이름을 외래 키 이름에 추가합니다.
이 명명 규칙을 사용하면 테이블 정의를 보는 것만으로 기호 이름을 "추측"할 수 있으며 또한 고유 한 이름도 보장합니다.
내 선택은 다릅니다. 내 의견으로는, 표가 있어야한다 id
필드가 아닌 user_id
테이블 그냥 호출되기 때문에, 하나를 user
이렇게 :
CREATE TABLE users(
id int,
name varchar(100)
);
CREATE TABLE messages(
id int,
user_id int
);
user_id
in messages
table은 fk 필드이므로 어떤 ID가 ( user_id
) 인지 명확히해야합니다 .
내 생각에 완전히 자체 설명하는 명명 규칙은 다음과 같을 수 있습니다.
fk_[referencing table name]_[referencing field name]_[referenced table name]_[referenced field name]
i.e.: `fk_messages_user_id_users_id`
노트:
- 경우에 따라 두 번째 요소 ([참조 필드 이름])를 생략 할 수 있습니다.
경우 때문에 FK 수는, 고유
messages_user
테이블이 존재, 참조하는 필드 이름이 있어야 할user_id
(그리고 단지id
)와 FK 이름이어야합니다 :fk_messages_user_user_id_users_id
즉, 외래 키 명명 규칙은 "참조 / 참조 필드"명명 규칙을 사용하는 경우 고유 한 이름을 확인합니다 (물론 고유 한 이름을 선택할 수 있음).
fk가 생성 된 후 자주 참조하지 않는 경우 한 가지 옵션은 간단하게 유지하고 MySQL이 이름을 지정하도록하는 것입니다 ( Daniel Vassallo가 그의 답변 시작 부분에서 언급했듯이 ).
이 메서드로 제약 조건 이름을 고유하게 "추측"할 수는 없지만 쿼리를 실행하여 외래 키 제약 조건 이름을 쉽게 찾을 수 있습니다.
use information_schema;
select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from KEY_COLUMN_USAGE where REFERENCED_TABLE_SCHEMA = 'your_db_schema_name' ORDER BY TABLE_NAME;
예를 들어 쿼리에서 다음을 수신 할 수 있습니다.
+------------+-------------+-----------------+-----------------------+------------------------+
| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+------------+-------------+-----------------+-----------------------+------------------------+
| note | taskid | note_ibfk_2 | task | id |
| note | userid | note_ibfk_1 | user | id |
| task | userid | task_ibfk_1 | user | id |
+------------+-------------+-----------------+-----------------------+------------------------+
이 추가 단계가 너무 많지 않다면 원하는 fk를 쉽게 찾을 수 있습니다.
fk-[referencing_table]-[referencing_field]
그 이유는 referencing_table
및 referencing_field
데이터베이스에서 고유 한 조합 때문입니다 . 이렇게하면 외래 키 이름을 쉽게 읽을 수 있습니다. 예를 들면 다음과 같습니다.
table `user`:
id
name
role
table `article`:
id
content
created_user_id /* --> user.id */
reviewed_user_id /* --> user.id */
따라서 두 개의 외래 키가 있습니다.
fk-article-created_user_id
fk-article-reviewed_user_id
user
외래 키 이름에 테이블 이름을 추가하는 것은 불필요합니다.
참고URL : https://stackoverflow.com/questions/2240929/what-is-a-proper-naming-convention-for-mysql-fks
'developer tip' 카테고리의 다른 글
전역 변수가 왜 나쁜가요? (0) | 2020.09.01 |
---|---|
'Authorization : Bearer'를 어떻게 표현할 수 있습니까? (0) | 2020.09.01 |
가장 가까운 0.5로 반올림하려면 어떻게합니까? (0) | 2020.08.31 |
http 응답을 보낸 후 PHP 처리 계속 (0) | 2020.08.31 |
Eclipse 시작시 SDK로드 오류 (0) | 2020.08.31 |