2009-06-03 11 views
1

私は2つのテーブルを持っています:メンバーシップテーブルとメーリングリストテーブル。異なるテーブルの列からデータを統合する設計問題

[Members] 
Username 
Password 
EmailAddress 
MailingListOptIn [bit] 
Planes [bit] 
Boats [bit] 
Cars [bit] 
  • 果物の列は、ユーザーの好みです。

[MailingList] 
EmailAddress 
MailingListOptIn 
  • mailinglist'erは、ニュースレターを受け取るために選ぶことができますが、必ずしも私がmailinglist'ersのための好みを格納を開始したいメンバー

ではないかもしれません。私の質問は、これらの2つのテーブルのデータを統合する最良の方法は何ですか?

私は、ユーザー名、パスワードなどのメンバー情報と、電子メールアドレスとプリファレンスを格納する別のプロファイルテーブルだけを格納するメンバーテーブルを試しました。メンバーとメーリングリストの両方の設定をこのプロファイルテーブルに保存できますが、FKの制約を追加できないため、メーリングリストを追加できません。 2つのテーブルで

  1. スティックが、メーリングリストのテーブルに重複した「環境設定」カラムを導入:

    だから今私のオプションがあります。

  2. 単一のプロファイルテーブルとスクリュー参照整合性を使用します。

他にも良い方法がありますか?私はこのようにそれを行うだろう

答えて

0

:キー

IIとして

i)は、電子メールアドレスを持つ「人」の表)「メンバー」テーブル、唯一のメンバーは、このテーブル内のレコードを持つことになり、 EMAILADDRESS(この表において、キー)

iii)の「メーリングリスト」テーブル、メーリングリスト、説明およびおそらく他のフィールド

IV)「mailingListSubscriber」の一意のIDを有することによって「人」にリンクされていますPEの電子メールアドレスとのテーブル(関係) rsonとメーリングリストのID。

テーブルを追加して申し訳ありませんが、要件を満たせば、適切な正規化のための最小限の設定だと思います。

1
CREATE TABLE Profiles (
Username 
Password 
EmailAddress 
MailingListOptIn [bit] 
Planes [bit] 
Boats [bit] 
Cars [bit] 
); 

CREATE VIEW Members AS 
    SELECT * FROM Profiles WHERE Username IS NOT NULL 
    WITH CHECK OPTION; 

CREATE VIEW MailingList AS 
    SELECT EmailAddress, MailingListOptIn, Planes, Boats, Cars 
    FROM Profiles WHERE Username IS NULL 
    WITH CHECK OPTION; 
関連する問題