2017-12-25 30 views
0

はそれが 例ポストテーブルは、テーブルのユーザーMySQLの同じテーブルから2つの外部キー

-------------------------------- 
|table user | table post  | 
|-------------|----------------| 
|user_id  | post_id  | 
|username  | post_title  | 
|password  | post_content | 
|email  | user_id  Fk | 
|    | username Fk | 
-------------------------------- 
+1

はい、同じキーを指す2つの外部キーを使用することもできます。例えば、post.user_id = user.user_idとpost.supervisor_user_id = user.user_id – Alan

+0

なぜ表形式ですか? 2つの "列"はここでは意味がありません... – wildplasser

+0

あなたの動機は、ポストテーブルにユーザー名の値をコピーする可能性があります...あなたはほとんどそれを行うべきではありません。非プライムアトリビュート間の推移依存性がありますが、これは潜在的に非常に問題です。 [第3正規形](https://en.m.wikipedia.org/wiki/Third_normal_form)を参照してください。 –

答えて

2

技術的に細かいからUSER_IDとユーザー名いる同じテーブルからテーブルに2つの外部キーを持つことが可能です。

ただし、上記の構造は奇妙な状況につながる可能性があることに注意してください。

ユーザーが自分のユーザー名を変更することが許可されている場合(それが推奨かどうかの別の話題です)、ユーザーが自分の名前を変更できないシナリオがいくつかあります外部キーの整合性が彼の名前を参照する投稿で壊れてしまったり、ユーザが名前を変更して別のユーザの投稿をハイジャックしようとする可能性があるためです)。

これらの問題はすべて簡単に防ぐことができますが、原則として、単一の外部キーに固執し、一般にテキストの代わりに(user_idのような)番号を使用する方が良いと思います。

@Alanは、別のテーブルの同じ外部キーフィールドを参照するテーブル内の2つのフィールドという考え方を述べています。これは非常に一般的で一般的にはOKです。

1

はい、同じテーブルに2つの外部キーを使用できます。

あなたのケースでは、外部キーとして 'username'は必要ないかもしれません。 'user_id'を使用してユーザー名を選択できるためです。

関連する問題