我有以下有趣的数据建模问题。我将使用餐馆的例子来说明它:考虑以下三个实体:Restaurant
,Location
和Offer
。
restaurant
可以包含多个locations
,而restaurant
可以包含多个offers
。这些关系很容易表示:Restaurant
表;来自Location
表的FK
表{; 1}};和来自Restaurant
表的Offer
FK
表。
现在出现了一个有趣的问题:
Restaurant
只能在offer
的某些locations
生效。该限制的建模在开始时似乎很容易:只需要使用两个外键进行关联表,一个来自restaurant
表,另一个来自Offer
表。
该解决方案的问题在于,它不会限制我关联不属于同一餐厅的Location
和offers
。
我如何以更好的方式对此进行建模,以便在数据库级别强制执行该限制?
答案 0 :(得分:1)
我的假设是,在您当前的模型中,位置有1个餐厅,而优惠有1个餐厅。
您可以通过在Offer:(Restaurant_ID,Offer_ID)上创建复合键来解决您的问题,并将此密钥用作Location_Offers提供的外键。
您可以在位置上执行相同操作:创建复合键(Restaurant_ID,Location_ID)并将其用作Locations_Offer到Location的外键。
这可确保Locations_Offer中链接位置和商品的任何记录仅链接与同一餐厅有关系的记录。