2011-07-30 21 views
3

SQL Server 2005でdbテーブルを設計していますが、小さなデザイン/アーキテクチャの問題が発生しました...私のメインUsersテーブル(username, password, lastlogin,など)がありますが、 2つの異なるユーザプロファイルを格納する。すなわち、格納されるプロファイルデータは、2つのユーザプロファイルの間で異なる。私はすべての共通のユーザーデータをUsersテーブルに入れました。異なるユーザープロファイルを持つSQL Serverテーブル

ConsumersMarketersのテーブルを個別に作成しますか?もしそうなら、これらのテーブルの主キーはUsers_UserIDの1:1の関係を持つ[table-name]_UserIDであるべきですか?

基本的に、登録すると、ユーザーは消費者またはマーケターとして登録する選択肢が与えられます。ユーザーがログインすると、Usersテーブルが照会され、付随するプロファイルがいずれかのテーブルから照会されます。

私はこのアプローチが面倒であることを知っています。これが、これが実現する最良の方法を尋ねるためにここに来た理由です。

ありがとうございます!

EDIT:はまた、Users表に、私はそれゆえプロファイル表を照会している知って、彼らはログインしたとき、私はユーザを区別することができますUsers_UserType旗を持っています。

答えて

-1

あなたの腸の感触は正しいです。データはnormalizeになります。別のテーブルを使用すると、データの重複や空の列または空の列が減少します。

残念なことに、このような逆の関係では、1つのテーブルまたは別のテーブルである可能性があるため、ユーザーから消費者またはマーケターまできれいなクリーンな外部キーはありません。

「消費者/マーケター」表の「User_Id」を「ユーザー」にマップすることもできます。

あなたは参加し、左を使用して単一のクエリでそれを照会することができます:

Select 
    u.*, 
    c.*, 
    m.* 
    From Users u 
     left join Consumers c on c.User_Id = u.ID 
     left join Marketers m on m.User_Id = u.ID 
    Where 
     u.ID = @UserId 
+0

感謝を!はい、私は間違いなく私のテーブルが正規化されていることを確認する必要があります。しかし、設計の観点からは、私のアプローチは以下の通りであるべきだということに同意してください:TABLE1 = 'User''をPKとして 'User_ID'; TABLE2 = 'User_ID'をPK **とし、** FKを' Users_UserID'とする 'Consumers'; TABLE3 = 'User_ID'をPK **、** FKを' Users_UserID' – maGz

+0

とした 'マーケティング担当者 'か、FK参照を外すべきですか?ただし、これは参照整合性がないことを意味します。 – maGz

+0

@maGz:あなたが記述したアプローチは間違いなく珍しいことではありません。私は、それは1:1の関係を強制する典型的な方法であると言いたいと思います(実際はこの場合は1:0 ... 1です)。 –

関連する問題