我不知道什么是最好的方式来处理这个,所以我正在寻找一些输入。我有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