想象一下,我有一个名为offers
. offers
可以从多个表中引用,例如purchase
,membership
等。请注意,将来可以引用更多表。
购买和会员资格已经存在于数据库中,它们将始终在相应的报价对象之前创建。可以将其想象为购买 X 可能会提供报价 Y(一对一)
为了在关系模式中实现这一点,我想到了两种可能的选择。
选项1
offers
表不会有任何引用。相反,purchase
table 和membership
table 将有一个名为offer_id
引用该offer
表的列。如下所示
table offers {
id,
offer_name,
}
table purchase {
id,
..other fields,
offer_id fk(offers),
}
table membership {
id,
..other fields,
offer_id fk(offers),
}
选项 2
offers
表将包含一个type
引用商品类型的字段(purchase
、membership
等),并且将有多个可以为空的外键引用每个表。
table offers {
id,
offer_name,
type enum(purchase, membership,
purchase_id fk(purchases) NULL,
membership_id fk(memberships) NULL,
}
table purchase {
id,
..other fields,
}
table membership {
id,
..other fields,
}
我觉得选项 1 是最简单的方法,也是正确的方法。但这感觉就像违背了数据库设计原则(父母不应该提及孩子等)。
正确的方法应该是什么?如果我选择选项 1,会出现什么问题?