2

這種情況的最佳解決方案/實踐是什麼?我有一個表,可以引用多個表(對象)?許多fk表的一個表列?

下面是一個表UserCalendar的例子。這是一個用戶保存他的事件的表格,而且系統從後面插入到這張表格中。用戶執行一些服務,這些服務具有最後期限,並且這些服務也插入到此表中。問題是沒有像UserEvent表這樣的表。用戶應該將其所有事件保存在此日曆中作爲說明。我應該儘可能簡單。

我可以設計這兩種方式。

1)

UserCalendar
UserCalendarId | UserId |說明| ObjectType | ObjectId

使用這個選項我不必FK這個表。我只能更改ObjectType(通知,服務,日曆)並使用該表的id作爲ObjectId。在事件的情況下,將不存在這樣的表,並且這將是空字段。 我們稱這個僞FK列。

2) 或者我可以在理論上對每個FK使用多個表格。

UserCalendar
UserCalendarId | UserId |說明

UserEvent
UserCalendarId | EVENTID

UserServices
UserCalendarId | SERVICEID

UserNotifications
UserCalendarId | NotificationId
...

對於每個系統事件或屬於某種類型的任何其他自定義事件,此外部關係表可以是n數,第一種解決方案是快速實施。

回答

2

我寧願一個第三解決方案,你的兩個設計的混合:

UserCalendar
UserCalendarId | UserId |說明

UserCalendarAttributes
UserCalendarId | ObjectType | ObjectId

這樣,您可以根據自己的意願自由添加儘可能多的其他日期條目引用(例如,事件通知),並且您沒有UserCalendar表和任何其他表之間的緊密耦合。

如果將FK放在您的主表中,它還取決於您需要多長時間訪問一次附加數據(事件,服務等)。

我建議去爲靈活性性能更多,但你會稍有增加您的架構的複雜性。功能要求更有可能會比性能問題更加嚴重。