2012-05-17 67 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

會記住這一點,並且它不是真實世界的理想設計。感謝你的幫助! –