设计具有多个外键候选的Postgresql表

设计具有多个外键候选的Postgresql表,sql,django,postgresql,database-design,foreign-keys,Sql,Django,Postgresql,Database Design,Foreign Keys,当设计一个包含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: Boo

当设计一个包含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>
}
这里我们将其称为
condition1[FK:TriggerCondition]

我可以想象第三种选择是使用继承,但我对此不太确定


我的直接想法是建议使用选项2以确保正确性,但我想知道是否有更具知识的人可以提供一些关于如何处理此问题的指导。

尝试使用带有
泛型关系
功能的方法

您能否在回答中添加或描述实现的底层结构——它在Postgre中如何工作,以及可能如何查询它(非ORM)?在数据库方面,它看起来像两个整数字段和一个索引。第一个字段存储对象类型。第二个对象ID。所有其他魔法由Django在其元类中完成。链接上的文档非常详细。试着用谢谢你,谢尔盖。也许我应该自己实现它并查看DB模式,但我认为答案将从一个示例查询中受益匪浅,可能使用上面详述的场景。
Table TriggerCondition {
...
priceCondition [FK: BookPrice] 
SalesCondition [FK: SalesPrice] 
}