【发布时间】:2015-06-21 23:07:42
【问题描述】:
我有以下有趣的数据建模问题。我将使用餐馆的例子来说明它:考虑以下三个实体:Restaurant、Location 和Offer。
- 一个
restaurant可以有很多locations,一个restaurant可以有很多offers。
这些关系很容易表示:一个Restaurant 表;一个Location 表和来自Restaurant 表的FK;和一个Offer 表和来自Restaurant 表的FK。
有趣的问题来了:
-
offer只能在restaurant的某些locations上有效。
该限制的建模一开始似乎很容易:只需使用两个外键创建一个关联表,一个来自Offer 表,另一个来自Location 表。
该解决方案的问题在于,它不会限制我关联不属于同一家餐厅的 offers 和 locations。
如何以更好的方式对此进行建模,以便在数据库级别强制执行该限制?
【问题讨论】:
-
我可能最终会创建一个链接
restaurant_locations表来存储餐厅可以拥有的每个位置,然后为该表创建一个外键。 -
这意味着为每个餐厅创建一个
restaurant_locations表,对吧? -
不,此表将在单独的行中存储每个餐厅的所有位置的记录。想象一下具有
id, id_restaurant, id_location的表,后面两列是FKs到表restaurant和location。如果您允许在同一位置有两家餐厅,则此模型相当不错。 -
@ConsiderMe Locations 已经是一个表格,用于存储餐厅可以拥有的每个位置。至少我是这样解释这个模型的,每个位置映射到 1 家餐厅。
-
@popovitsj 您可能是对的,但没有提及餐厅位置的唯一性(例如同一邮政地址下的共享空间)。我知道这可能是一种罕见的情况,但它有时仍然存在 :)
标签: sql database relational-database data-modeling