SQL Server の非正規化に関する質問 - ユーザー データを 1、3、または 21 のテーブルに保存しますか?

StackOverflow https://stackoverflow.com/questions/2625442

質問

当社の Web サイトのセクションでは、ユーザーに自分自身 (「プロフィール」) に関する 20 個の多肢選択式の質問をするよう求められています。Web サイトのこの部分は頻繁に閲覧され、時々更新されます。Web サイトでは大量のトラフィックが発生すると予想されるため、パフォーマンスの問題に備えるためにいくつかの検討が行われています。

これを DB に保存するには、次の 3 つの方法があります。

  1. 質問ごとに 1 つのテーブルを作成します。各テーブルには QuestionID と Answer が含まれ、その後、質問にマップされた外部キーを使用してプロファイル データを保存する CustomerInfo テーブルが作成されます。

  2. 質問、質問タイプ、および回答テーブル。これらの構造にすべてを詰め込みます。ここで私が特に懸念しているのは、プロファイルの更新に必要な 20 件程度の挿入です。トラフィック量が多い場合、パフォーマンスに影響が出ますか?

  3. 非正規化された単一のテーブル (質問ごとに 1 つのフィールド) は、HTML または C# オブジェクト、あるいはその両方に回答コードをハードコーディングします。

私は#2か#3に傾いています。最善の解決策は何だと思いますか?

役に立ちましたか?

解決

私は、次の表を作成します:

Survey (PK:SurveyID)
Question (PK:QuestionID, FK:SurveyID)
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID)
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID)
あなたは例えば、1つのステートメントで挿入を行うことで、負荷を最小限に抑えることができます。

insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top