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

Database design 如何在RDBMS中表示对象分类层次结构,database-design,relational,Database Design,Relational,我的数据,如果它将由对象表示,它将如下所示: 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个唯一字段

我的数据,如果它将由对象表示,它将如下所示:

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个唯一字段。
我预计最多有10万张唱片


任何细节?

表a包含所有类似字段,表B和表c包含唯一字段

table_A
   PKa
   a int
   b int
   c string


table_B
  PKb
  FKa
  D string


table_C
  PKc
  FKa
  e int
  f int

表a包含所有类似字段,表B和表c包含唯一字段

table_A
   PKa
   a int
   b int
   c string


table_B
  PKb
  FKa
  D string


table_C
  PKc
  FKa
  e int
  f int

你会发现在这个话题上不乏意见。许多人主张(如您在第一个选项中所述)在每个表中明确定义数据

鉴于你的第二句话,我不推荐这种模式。我同意这样的想法,即用一个“主”表表示您的父表,用辅助表表示子表。您可能希望在主表中包含某种类型的类型标识符,以指示它是哪种类型的实体,但这可能是必需的,也可能不是必需的。至少,你需要像

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

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

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

你会发现在这个话题上不乏意见。许多人主张(如您在第一个选项中所述)在每个表中明确定义数据

鉴于你的第二句话,我不推荐这种模式。我同意这样的想法,即用一个“主”表表示您的父表,用辅助表表示子表。您可能希望在主表中包含某种类型的类型标识符,以指示它是哪种类型的实体,但这可能是必需的,也可能不是必需的。至少,你需要像

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

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

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