0

「人」と「詳細」の2つのテーブルがあります。Person は Details と 1 対 1 の関係を持つ必要があります。2 つのオプションがあります。

  1. Details テーブルに DetailsId を書き込み、それを Details.Id(PK) の FK にします。
  2. Person.Id に Details.PersonId を同時に PK と FK として作成します。

どちらの場合も、関係は 1 対 1 です。どちらが優れているか、どのような場合に説明できますか?

編集:

私はエンティティフレームワークを使用しており、次のような詳細を取得したい: Person.Details.First() ではなく、Person.Detail

4

3 に答える 3

3

「人」と「詳細」の2つのテーブルを作成します。「詳細」テーブルで、「Person」テーブルの id フィールド (PK) を参照する FK となるフィールド「person_id」を取得します。それがより良い解決策です。「詳細」テーブルは「人」テーブルよりも更新などの操作が必要になるためです。したがって、「Person」テーブルをマスター、「Details」テーブルをスレーブにします。

于 2012-10-31T11:10:51.037 に答える
2

「人」の特殊なサブクラスはありますか? その場合、サブクラスごとに異なるサブクラス テーブルを使用して、3 つ以上のテーブルが必要になることがあります。ここSOのタグ「[Class Table Inheritance]」を参照してください。タグ「[Shared-Primary-Key]」も検索する必要があります。サブクラス テーブルに個別の FK と PK を使用するよりもうまく機能します。

また、単一のテーブル ソリューションを選択する場合の利点とコストについても考慮する必要があります。

于 2012-11-01T09:55:35.263 に答える
2

真の1 対 1の関係の場合、特別な理由がない限り、既定の解決策はテーブルを結合することです。

しかし、実際には1:0..1について話しているのではないかと思います。その場合、(2) は必要なものをモデル化します。

(1)がわかりません-自己参照FKの目的は何ですか?あなたは実際に、詳細を参照する個人の FK を意味していましたか?

于 2012-10-31T19:04:32.520 に答える