SQL Server の非正規化に関する質問 - ユーザー データを 1、3、または 21 のテーブルに保存しますか?
-
26-09-2019 - |
質問
当社の Web サイトのセクションでは、ユーザーに自分自身 (「プロフィール」) に関する 20 個の多肢選択式の質問をするよう求められています。Web サイトのこの部分は頻繁に閲覧され、時々更新されます。Web サイトでは大量のトラフィックが発生すると予想されるため、パフォーマンスの問題に備えるためにいくつかの検討が行われています。
これを DB に保存するには、次の 3 つの方法があります。
質問ごとに 1 つのテーブルを作成します。各テーブルには QuestionID と Answer が含まれ、その後、質問にマップされた外部キーを使用してプロファイル データを保存する CustomerInfo テーブルが作成されます。
質問、質問タイプ、および回答テーブル。これらの構造にすべてを詰め込みます。ここで私が特に懸念しているのは、プロファイルの更新に必要な 20 件程度の挿入です。トラフィック量が多い場合、パフォーマンスに影響が出ますか?
非正規化された単一のテーブル (質問ごとに 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
所属していません StackOverflow