我不知道什麼是最好的方式來處理這個,所以我正在尋找一些輸入。我有3個表,讓我們給他們打電話奇怪的很多很多relationshoip
User
WidgetA
WidgetB
對於我並不想進入這兩個部件表不能混用的原因,他們是2名不同的來源。 WidgetA使用GUID作爲鍵,WidgetB使用自動增量。用戶將被允許從A或B中選擇他們最喜歡的小部件。設置它的最佳方法是什麼?我是否應該有兩個收藏夾表格,以這種方式將這些小部件連接到用戶,我可以做一些簡單的連接,還是有更好的方法?
我不知道什麼是最好的方式來處理這個,所以我正在尋找一些輸入。我有3個表,讓我們給他們打電話奇怪的很多很多relationshoip
User
WidgetA
WidgetB
對於我並不想進入這兩個部件表不能混用的原因,他們是2名不同的來源。 WidgetA使用GUID作爲鍵,WidgetB使用自動增量。用戶將被允許從A或B中選擇他們最喜歡的小部件。設置它的最佳方法是什麼?我是否應該有兩個收藏夾表格,以這種方式將這些小部件連接到用戶,我可以做一些簡單的連接,還是有更好的方法?
假設你不能對現有的Widget表進行任何更改,你可以這樣做:
UserWidget
==========
UserWidgetID <-- PK, autoincrement
UserID <-- int
GuidKey <-- NULLable GUID
IntKey <-- NULLable int
Type <-- varchar ('WidgetA' or 'WidgetB')
然後將查詢會是什麼樣子:
select uw.UserID, a.*, b.*
from UserWidget uw
left outer join WidgetA a on uw.Type = 'WidgetA' and uw.GuidKey = a.WidgetAID
left outer join WidgetB b on uw.Type = 'WidgetB' and uw.IntKey = b.WidgetBID
這很簡單,你需要在繼承關係數據庫管理系統。您將創建一個帶自動遞增鍵的通用Widget表,並將其主鍵作爲外鍵存儲在兩個WidgetA和WidgetB表中。現在你可以將兩種Widget視爲一個,因爲它們都有Widget的ID。
那夠清楚了嗎?
編輯
這裏是我的話ERD:
你可能只是雙方的ID存儲爲一個字符串(VARCHAR):
UserID
WidgetID
查詢:
Select *
From Favorite f
Inner Join WidgetA a on f.WidgetID = Cast(a.WidgetID as varchar(max))
Inner Join WidgetB b on f.WidgetID = Cast(b.WidgetID as varchar(max))
Where f.UserID = @userid