2012-05-17 66 views
1

问题标题可能有点神秘,但我无法想出一个有意义的简短版本。如何指定一个弱实体指向两个共享第四个实体的其他弱实体?

所以我有一个Booking表,这是一个CustomerEvent之间的多对多关系。我也有一个event_activity表,这是一个EventActivity之间的多对多关系。

我现在想要预约能够指定要参加哪项活动的活动。所以我有booking_event_activity,这是Bookingevent_activity之间的多对多。

显然booking_event_activity会需要外键CustomerActivity(这也将是它自己的复合主键的一部分),但我怎么指定最后的外键,这将是一个事件的主键?我是否做到这一点:

  1. 预订的事件外键的外键?
  2. event_activity的外键事件外键?
  3. 两个外键,1和2中的每一个。
  4. 一个外键直接指向Event表的主键?
+0

我认为你错误地组织你的数据。您的event_activity表可以将其自己的主键与事件和活动的复合索引分开,这可以通过预订表作为外键引用。 –

+0

@JeremyHolovacs这会工作,除了这是作业,我不允许引入任何代理键。所以event_activity的PK必须是其两个FK的组合。这是你的意思吗?你知道我如何解决原来的问题吗? –

+0

好吧,这是丑陋的数据库设计(和一个糟糕的作业问题),但在这种情况下,你坚持使用eventid和activityid列作为预订表中的event_activity表的外键引用。 –

回答

1

你可以让你的表booking_event_activity参考列客户IDEVENTIDactivityId。您的eventId列(至少使用SQL Server)可以是event_activitiesbooking的外键引用,但请注意!级联关系可能无法按预期使用此方法。

+0

会记住这一点,并且它不是真实世界的理想设计。感谢你的帮助! –