如何在RDBMS中表示对象分类层次结构

时间:2009-05-07 18:52:57

标签: database-design relational

我的数据 IF 它将由对象表示,它看起来像:

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创建了一个单独的表, 或者我创建一个主表,并为每个实体类型执行不同的连接以获取数据 在现实世界中,我将为所有实体提供大约15个相似的字段,每个实体有大约1-3个唯一字段 我期待最多100K的记录。

任何见解?

2 个答案:

答案 0 :(得分:4)

你会发现这个话题不缺乏意见。许多人提倡concrete table inheritance,其中(正如您在第一个选项中所述)您在每个表中明确定义数据。

鉴于你的第二个陈述,我会推荐这种模式。我会想到有一个“主”表来表示代表孩子的父表和辅助表。您可能希望在主表中包含某种类型的标识符,以指示它是什么类型的实体,但这可能是必要的,也可能不是必需的。至少,你需要像...这样的东西。

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

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

tableC
(
    ID (primary and foreign->table_A),
    E,
    F
)

答案 1 :(得分: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