我们有一个规则的一般概念,其中特定的实现细节存储在他们自己的表中。我们目前有以下架构:
Rule
* id
* name
* ruleAId
* ruleBId
* ....
* ruleNId
* created
* updated
RuleA
* id
* ...
RuleB
* id
* ...
....
RuleC
* id
* ...
Run Code Online (Sandbox Code Playgroud)
我们不喜欢的部分是每个特定规则实现都有一个可为空的列。
我们有两种可能的解决方案,但都有明显的缺点:
将规则 ID 存储在具体的实现表上,所以我们的模式变成:
RuleA
* id
* ruleId
* ...
Rule
* id
* name
* created
* updated
Run Code Online (Sandbox Code Playgroud)
正如标题所暗示的那样,这意味着每次需要查找规则实现时都要进行 N 次查询。估计对性能不利。
如果我们从 Rule 表中删除对参照完整性的需求,我们只需要一个列来存储特定的实现主键和一个枚举来告诉我们 id 用于哪个表,给我们:
Rule
* id
* name
* implementationType
* implementationId
* created
* …
Run Code Online (Sandbox Code Playgroud) postgresql ×1