それらは一意でなければならないので、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
のように、参照テーブルと参照テーブルで同じフィールド名を使用しようとします。これが実用的でない場合は、参照フィールド名も外部キー名に追加します。
この命名規則により、テーブル定義を見るだけでシンボリック名を「推測」できます。また、一意の名前も保証されます。
私の選択は異なります。私の意見では、テーブルは単に「user」と呼ばれるため、「user_id」フィールドではなく「id」フィールドを持つ必要があります。
CREATE TABLE users(
id int,
name varchar(100)
);
CREATE TABLE messages(
id int,
user_id int
);
「messages」テーブルの「user_id」は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
注意:
「messages_user」テーブルが存在する場合、参照フィールド名は「user_id」(「id」だけでなく)であり、fk名は次のようになる必要があるため、このfkは一意です。
fk_messages_user_user_id_users_id
言い換えると、「参照/参照フィールド」の命名規則も使用する場合は、外部キーの命名規則により一意の名前を確認できます(もちろん、独自の名前を選択できます)。
Fkを作成した後に頻繁に参照することに気付かない場合、1つのオプションは、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を簡単に見つけることができるはずです。