私はプライマリキーuser_id
とテーブル2を持っています。user_id
は外部キーです。MySQL - プライマリキーとしての外部キーの使用
user_id
ごとに1つのレコードのみがテーブル2に存在することができ、レコードなしでは存在できません。
質問:表2のuser_id
は同時に外部キーとプライマリキーの両方になることができます。はいの場合、それは良いアイデアですか、賛否両論ですか?
私はプライマリキーuser_id
とテーブル2を持っています。user_id
は外部キーです。MySQL - プライマリキーとしての外部キーの使用
user_id
ごとに1つのレコードのみがテーブル2に存在することができ、レコードなしでは存在できません。
質問:表2のuser_id
は同時に外部キーとプライマリキーの両方になることができます。はいの場合、それは良いアイデアですか、賛否両論ですか?
はい、これを行うことができます(また、データベース設計の観点から)。 user_id
は表2に主キーである場合
しかし、あなたは表2の各行は、ユーザに対応していることを言って有効になっているが、あなたはすでに、各行は、ユーザーに対応するテーブルを持って、それが何を意味するのか考えてみます。これは、「なぜ表2のすべてのデータを表1のNULL可能な列に入れないのですか?」という疑問が生じます。結局のところ、2つのテーブルを持つことは、このデータを1つではなく2つのクエリで取得する必要があることを意味します。
は今、この練習は良いアイデアかもしれないいくつかのシナリオがあります;同時に、表1の記憶域と変更速度を得る
これは良い考えですが、アプリケーションの詳細によって異なります。
ありがとうございます。私の場合は、あなたが言及した最初のシナリオに加えて、テーブル2には多くのカラムがあり、テーブル3,4と同様にテーブル1と同様の関係があるので、すべてのカラムを置くことは大変です。 – CodeVirtuoso
これは、[クラステーブルの継承](http://stackoverflow.com/a/3579462/1709587)を使用している場合、表2が表1のサブクラスを表す場合です。これは特別なあなたの最初の箇条書きの場合。 –
別の理由は、表Cの列を共有する表Aと表Bの2つの異なる表がある場合です。たとえば、「連絡先」という表、「従業員」と呼ばれる表、および「People」という表があります。人々は名字、姓などを持ち、連絡先と従業員は両方とも人を代表しています。 –
類似した質問(重複はありません):[MySQLの主キーである外部キーを作成する方法](http://stackoverflow.com/questions/5575051/how-to-create-foreign-key -th-a-a-primary-key-in-mysql) – naXa