2012-07-17 55 views
0

我不知道什麼是最好的方式來處理這個,所以我正在尋找一些輸入。我有3個表,讓我們給他們打電話奇怪的很多很多relationshoip

User 
WidgetA 
WidgetB 

對於我並不想進入這兩個部件表不能混用的原因,他們是2名不同的來源。 WidgetA使用GUID作爲鍵,WidgetB使用自動增量。用戶將被允許從A或B中選擇他們最喜歡的小部件。設置它的最佳方法是什麼?我是否應該有兩個收藏夾表格,以這種方式將這些小部件連接到用戶,我可以做一些簡單的連接,還是有更好的方法?

回答

1

假設你不能對現有的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 
0

這很簡單,你需要在繼承關係數據庫管理系統。您將創建一個帶自動遞增鍵的通用Widget表,並將其主鍵作爲外鍵存儲在兩個WidgetA和WidgetB表中。現在你可以將兩種Widget視爲一個,因爲它們都有Widget的ID。

那夠清楚了嗎?

編輯

這裏是我的話ERD:

enter image description here

0

你可能只是雙方的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