2012-07-17 73 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