小编Jon*_*oad的帖子

如何在 PostgreSQL 中为联合类型建模

我们有一个规则的一般概念,其中特定的实现细节存储在他们自己的表中。我们目前有以下架构:

Rule 
 * id 
 * name
 * ruleAId
 * ruleBId
 * ....
 * ruleNId
 * created 
 * updated

RuleA
 * id 
 * ...

RuleB
 * id 
 * ...

....

RuleC
 * id 
 * ...
Run Code Online (Sandbox Code Playgroud)

我们不喜欢的部分是每个特定规则实现都有一个可为空的列。

我们有两种可能的解决方案,但都有明显的缺点:

  1. 将关系移动到具体实现——DOS数据库

将规则 ID 存储在具体的实现表上,所以我们的模式变成:

RuleA
 * id 
 * ruleId
 * ...

Rule 
 * id 
 * name
 * created 
 * updated
Run Code Online (Sandbox Code Playgroud)

正如标题所暗示的那样,这意味着每次需要查找规则实现时都要进行 N 次查询。估计对性能不利。

  1. 放弃参照完整性 - Yolo 完整性

如果我们从 Rule 表中删除对参照完整性的需求,我们只需要一个列来存储特定的实现主键和一个枚举来告诉我们 id 用于哪个表,给我们:

Rule 
 * id 
 * name
 * implementationType 
 * implementationId
 * created 
 * …
Run Code Online (Sandbox Code Playgroud)

postgresql

6
推荐指数
0
解决办法
1411
查看次数

标签 统计

postgresql ×1