【问题标题】:How do I represent object classification hierarchy in a RDBMS如何在 RDBMS 中表示对象分类层次结构
【发布时间】:2009-05-07 18:52:56
【问题描述】:
我的数据,如果它将由对象表示,它看起来像:
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 记录。
有什么见解吗?
【问题讨论】:
标签:
database-design
relational
【解决方案1】:
你会发现关于这个话题的意见不乏。许多人提倡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
)
【解决方案2】:
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