【发布时间】:2021-08-03 05:01:57
【问题描述】:
当设计一个包含 2 个或更多可能的参考/外键候选的表时,应该如何实现?
假设我们有以下内容:
Table Trigger {
...
- condition1 [FK: BookSales or BookPrice]
- operation1 [enum: and, or, not..]
- condition2 [FK: BookSales or BookPrice]
- operation2 [enum: and, or, not..]
- condition3 [FK: BookSales or BookPrice]
}
现在BookSales和BookPrice这两个表没有完全相同的字段,应该可以重复用于不同的触发器。
一个想法是创建一个表格,例如:
Table BookPriceOrSale {
...
- cType [enum: Price, Sales]
<fields for BookPrice>
<fields for BookSales>
}
然后根据cType 简单地评估它,并将其作为 FK:condition1 [FK: BookPriceOrSale]。
另一种选择当然是创建一个中间表,其中一个为外键,另一个为空 - 然而,与上面的表相比,这增加了另一个表,消除了一个,但添加了额外的列.
Table TriggerCondition {
...
priceCondition [FK: BookPrice]
SalesCondition [FK: SalesPrice]
}
这里我们改为将其引用为condition1 [FK: TriggerCondition]
第三种选择我可以想象是使用继承,但我不太确定这一点..
我的直接想法是建议使用选项 2 来确保正确性,但我想知道是否有知识渊博的人可以就如何解决这个问题提供一些指导。
【问题讨论】:
标签: sql django postgresql database-design foreign-keys