在多对多关系中实施通用外键

时间:2015-04-15 19:50:05

标签: sql database relational-database data-modeling

我有以下有趣的数据建模问题。我将使用餐馆的例子来说明它:考虑以下三个实体:RestaurantLocationOffer

  • restaurant可以包含多个locations,而restaurant可以包含多个offers

这些关系很容易表示:Restaurant表;来自Location表的FK表{; 1}};和来自Restaurant表的Offer FK表。

现在出现了一个有趣的问题:

  • Restaurant只能在offer的某些locations生效。

该限制的建模在开始时似乎很容易:只需要使用两个外键进行关联表,一个来自restaurant表,另一个来自Offer表。

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

我如何以更好的方式对此进行建模,以便在数据库级别强制执行该限制?

1 个答案:

答案 0 :(得分:1)

我的假设是,在您当前的模型中,位置有1个餐厅,而优惠有1个餐厅。

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

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

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