web-dev-qa-db-ja.com

MySQL-主キーとしても外​​部キーを使用

主キーがuser_idのテーブル1と、user_idが外部キーであるテーブル2があります。

表2には、user_idごとに1つのレコードしか存在できず、それなしではレコードは存在できません。

質問:表2のuser_idを同時に外部キーと主キーの両方にすることはできますか?はいの場合、長所/短所は何ですか?

28
CodeVirtuoso

はい、これを行うことができます(そして、データベース設計の観点から行う必要があります)。

ただし、user_idはテーブル2の主キーです。実際には、テーブル2の各行はユーザーに対応していると言っていますが、各行がユーザーに対応しているテーブルがすでにあります。テーブル1。これにより、「なぜ表2のすべてのデータを表1のnull可能な列に入れませんか?」結局のところ、2つのテーブルがあるということは、このデータを取得するには、1つではなく2つのクエリを実行する必要があることを意味します。

ここで、この方法が適切なシナリオがいくつかあります。

  • 多数のユーザーがいて、テーブル2の行が少ない場合、テーブル2のクエリはめったに実行されない可能性があります。同時に、テーブル1のストレージスペースと変更速度が向上します。
  • 将来、外部キーが残っている間に、表2の主キーが変更される可能性があります。すべてのデータを表1に入れると、この変更によってデータベースモデルが破損する可能性が高くなります。

それは良い考えかもしれませんが、それはあなたのアプリケーションの詳細に依存します。

33
Jon