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
를 참조해 주세요.이것이 실용적이지 않을 경우 참조된 필드 이름도 외부 키 이름에 추가합니다.
이 명명 규칙을 사용하면 테이블 정의만 봐도 심볼 이름을 추측할 수 있고 고유한 이름도 보장할 수 있습니다.
내 선택은 달라내 생각에, 테이블은 1인용 테이블이 있어야 한다.id
필드, a가 아닌user_id
첫째, 테이블은 그냥 불리기 때문이다.user
, 그래서:
CREATE TABLE users(
id int,
name varchar(100)
);
CREATE TABLE messages(
id int,
user_id int
);
user_id
에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
은 table name to foreign key name 입니다.
언급URL : https://stackoverflow.com/questions/2240929/what-is-a-proper-naming-convention-for-mysql-fks
'itsource' 카테고리의 다른 글
속성 값을 기준으로 개체 배열 정렬 (0) | 2023.01.19 |
---|---|
Python에서는 @property decorator가 어떻게 동작합니까? (0) | 2023.01.19 |
mysql 데이터베이스에 슈퍼 권한을 추가하는 방법 (0) | 2023.01.19 |
하위 행을 추가하거나 업데이트할 수 없음: 외부 키 제약 조건이 실패합니다. (0) | 2023.01.19 |
PDO 준비됨 단일 쿼리에 여러 행을 삽입합니다. (0) | 2023.01.19 |