0

我們網站的一部分呼籲向用戶詢問關於他們自己的多項選擇題(「簡介」)。網站的這部分內容將經常查看,並且偶爾會更新。該網站預計會產生大量流量,因此正在考慮嘗試和準備性能問題。SQL Server非規範化問題 - 將用戶數據存儲在1,3或21個表中?

3種方式,我可以看到這些信息存儲在數據庫有:

  1. 每題創建1個表,每個表都有QuestionID和答案,然後CustomerInfo表來存儲文件數據,與外鍵映射到問題。

  2. Question,Question_Type和Answers表。把所有東西都塞進這些結構中。我特別關注更新配置文件所需的20個左右的插入內容。這會在高流量下表現如何?

  3. 非規範化單個表,每個問題一個字段,硬編碼HTML和/或C#對象中的答案代碼。

我傾向於#2或#3。你認爲最好的解決方案是什麼?

回答

5

我將創建下列表格:

Survey (PK:SurveyID) 
Question (PK:QuestionID, FK:SurveyID) 
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID) 
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID) 

您可以通過執行插入在一個聲明中儘量減少負載,例如:

insert into QuestionResponse 
(QuestionAnswerID, UserID) 
select 23, 3 
union all 
select 72, 3 
union all 
select 488, 3