1

私のデータは、オブジェクトで表される場合、次のようになります。

abstract class A{
   int a;
   int b;
   string c;
}

class B inherits A{
  string D;
}

class C inherits A{
  int e;
  int f;
}

私の質問:エンティティBとCに別々のテーブルを作成しますか、それとも1つのメインテーブルを作成し、エンティティタイプごとに異なる結合を実行してデータをフェッチしますか?
現実の世界では、すべてのエンティティに約15の同様のフィールドがあり、各エンティティに約1〜3の一意のフィールドがあります。
最大10万件のレコードを期待しています。

洞察はありますか?

4

2 に答える 2

4

このトピックに関する意見が不足することはありません。多くの人が具体的なテーブル継承を提唱しています。ここでは、(最初​​のオプションで説明したように)各テーブルでデータを明示的に定義します。

2番目のステートメントを考えると、このパターンはお勧めしません。親を表す「メイン」テーブルと子を表す補助テーブルを用意するというアイデアを採用します。エンティティの種類を示すために、メインテーブルにある種の型識別子を含めることができますが、これは必要な場合と不要な場合があります。少なくとも、次のようなものが必要です...

tableA
(
    ID (primary),
    A,
    B,
    C
)

tableB
(
    ID (primary and foreign->table_A),
    D
)

tableC
(
    ID (primary and foreign->table_A),
    E,
    F
)
于 2009-05-07T18:59:18.840 に答える
3

table_aにはすべての類似したフィールドが含まれ、table_Bとtable_cには一意のフィールドが含まれます

table_A
   PKa
   a int
   b int
   c string


table_B
  PKb
  FKa
  D string


table_C
  PKc
  FKa
  e int
  f int
于 2009-05-07T18:57:33.383 に答える