【发布时间】:2018-02-15 15:36:34
【问题描述】:
我想知道在 Postgre 中是否有更好的方法来设计这种关系:
基本上,我有一些实体是EntityA、EntityB 或EntityC。我将在实体和其他东西之间有很多其他关系(例如Comment 在这种情况下)所以我有这个通用的Entity 定义它链接到的Entity 的类型。
例如,如果我们将 EntityA 链接到评论,则 Entity 条目将如下所示:
type: EntityA
entity_a_id: x
entity_b_id: null
entity_c_id: null
有更好的设计方法吗?
【问题讨论】:
-
实体表中的记录可以有a、b、c ID吗?
-
是的,一次只有一个(在
type字段中定义) -
这会在以后给你带来很大的痛苦——你最终会编写每次从实体连接到实体 A B 和 C 的语句,因为它必须涵盖任何场景。它们应该位于不同表上而不是托管在单个表上的实体有多大不同?
-
?所以不,Entity表中的一条记录不能同时有a、b和c。尽管this link 侧重于SqlServer 和C# 代码,但用于对多个子类的继承进行建模的选项通常是每个类型的表(您所做的那种)和每个层次结构的表(包含所有内容的大胖表)。但是您不会在基表中拥有类型鉴别器和实体子类 id - 您可以在子类表上共享相同的实体 id 主键。
-
在这种情况下,这是一种糟糕的建模方式。提供一些表格中的示例数据。
标签: sql database postgresql database-design