在多对多关系中强制使用公共外键

Enforcing common foreign key in many-to-many relationship

我有以下有趣的数据建模问题。我将以餐馆为例进行说明:考虑以下三个实体:RestaurantLocationOffer

这些关系很容易表示:A Restaurant table; Location table 和 Restaurant table 中的 FKOffer table 和 Restaurant table.

中的 FK

有趣的问题来了:

该限制的建模一开始似乎很简单:只需使用两个外键进行关联 table,一个来自 Offer table,另一个来自 Location table。

该解决方案的问题在于它不限制我关联不属于同一家餐厅的 offerslocations

我怎样才能以更好的方式对此进行建模,从而允许我在数据库级别强制执行该限制?

我的假设是,在您当前的模型中,Location 有 1 家餐厅,Offer 有 1 家餐厅。

您可以通过在 Offer 上创建一个复合键来解决您的问题:(Restaurant_ID, Offer_ID) 并将此键用作从 Location_Offers 到 Offer 的外键。

您可以在 Location 上执行相同的操作:创建一个复合键(Restaurant_ID、Location_ID)并将其用作从 Locations_Offer 到 Location 的外键。

这确保 Locations_Offer 中链接位置和报价的任何记录仅链接与同一餐厅有关系的记录。