0

これを処理する最善の方法がわからないので、いくつかの情報を探しています。私は3つのテーブルを持っています。それらを呼び出しましょう

User
WidgetA
WidgetB

2 つのウィジェット テーブルを混在させることはできず、それらは 2 つの異なるソースからのものです。WidgetA はキーの GUID を使用し、WidgetB は自動インクリメントを使用します。ユーザーは、A または B からお気に入りのウィジェットを選択できます。これを設定する最良の方法は何ですか? 簡単な結合を行うことができる方法でウィジェットをユーザーに結合する 2 つのお気に入りテーブルを用意する必要がありますか、それとももっと良い方法がありますか?

4

3 に答える 3

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
于 2012-07-17T13:14:00.717 に答える
0

簡単です。リレーショナルDBMSで継承が必要です。自動インクリメントキーを使用して汎用ウィジェットテーブルを作成し、その主キーを2つのWidgetAテーブルとWidgetBテーブルに外部キーとして格納します。両方にウィジェットのIDがあるため、両方の種類のウィジェットを1つとして扱うことができます。

それは十分に明確でしたか?

編集

これがERDでの私の言葉です。

ここに画像の説明を入力してください

于 2012-07-17T13:18:43.957 に答える
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
于 2012-07-17T13:20:42.493 に答える