问题描述
当设计一个包含 2 个或更多可能的参考/外键候选的表时,应该如何实现?
假设我们有以下内容:
Table Trigger {
...
- condition1 [FK: BookSales or BookPrice]
- operation1 [enum: and,or,not..]
- condition2 [FK: BookSales or BookPrice]
- operation2 [enum: and,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 来确保正确性,但我想知道是否有知识渊博的人可以就如何解决这个问题提供一些指导。
解决方法
尝试使用具有 Generic relations
特征的方法
https://docs.djangoproject.com/en/3.2/ref/contrib/contenttypes/#generic-relations