【发布时间】:2013-12-18 04:29:27
【问题描述】:
我的问题与这个有关:How to keep foreign key relations consistent in a "diamond-shaped" system of relationships
我有一个非常相似的问题:一个场地包含许多座位。 场地还举办许多活动。我需要跟踪每个活动中预订了哪些座位。此信息保存在 event_seat 表中,该表具有与 event 和 seat 的标识关系(即其主键标识一个事件和一个座位)。
我想强制限制 event_seat 中的每一行必须引用一个 event 和一个 seat 属于同一 场地。我考虑通过使venue_id 成为event 的主键的一部分,将事件->场所 转换为识别关系,如下所示:
这样做可以让我为event_seat 定义两个外键,如下所示:
(venue_id, event_id) references event(venue_id, event_id)
(venue_id, seat_id) references seat(venue_id, seat_id)
此定义将保证所需的限制(活动必须在座位所属的同一场地举行)。但是venue_id实际上是event_id的一个函数,所以(venue_id, event_id)不是一个最小超键。这不违反一些关于主键的基本原则吗?我还有哪些其他选择?
【问题讨论】:
标签: database-design foreign-keys relational-database relationship foreign-key-relationship