28

主キーを持つテーブル 1 と外部キーを持つuser_idテーブル 2 があります。user_id

user_idテーブル 2 に存在できるレコードは 1 つだけであり、テーブル 2 なしではレコードは存在できません。

質問:user_id表 2 では、同時に外部キーと主キーの両方になることができますか? はいの場合、それは良い考えですか? 長所と短所は何ですか?

4

1 に答える 1

33

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

ただし、 がテーブル 2 の主キーである場合の意味を考えてみてuser_idください。実際には、テーブル 2 の各行がユーザーに対応していると言っていますが、各行がユーザーに対応するテーブルが既に存在します: テーブル 1。 「では、テーブル 2 のすべてのデータをテーブル 1 の null 許容列に入れてみませんか?」という質問。結局、テーブルが 2 つあるということは、このデータを取得するために 1 つではなく 2 つのクエリを作成する必要があることを意味します。

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

  • 多くのユーザーがいて、テーブル 2 に数行しかない場合、おそらくテーブル 2 のクエリはほとんど実行されません。同時に、テーブル 1 のストレージ スペースと変更速度が向上します。
  • 将来、テーブル 2 の主キーが変更される可能性がありますが、外部キーはそのままです。すべてのデータをテーブル 1 に入れると、この変更によってデータベース モデルが壊れる可能性が高くなります。

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

于 2012-01-20T23:13:30.387 に答える