SQL Server非规范化问题 - 将用户数据存储在1,3或21个表中?

alc*_*cal 0 sql ddl database-design denormalization sql-server-performance

我们网站的一部分要求用户询问20个关于他们自己的多项选择题("个人资料").网站的这一部分将经常被查看,并偶尔更新.该网站预计会产生大量流量,因此正在考虑尝试和准备性能问题.

我可以看到将这三种存储方式存储在数据库中:

  1. 为每个问题创建1个表,每个表都有QuestionID和Answer,然后是CustomerInfo表来存储配置文件数据,外键映射到问题.

  2. 问题,Question_Type和Answers表.把所有东西都塞进这些结构中.我在这里特别关注更新配置文件所需的20个左右的插入.这是否会在高流量时受到性能影响?

  3. 非规范化单表,每个问题一个字段,在HTML和/或C#对象中硬编码答案代码.

我倾向于#2或#3.您认为什么是最佳解决方案?

Red*_*ter 5

我会创建以下表格:

Survey (PK:SurveyID)
Question (PK:QuestionID, FK:SurveyID)
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID)
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID)
Run Code Online (Sandbox Code Playgroud)

您可以通过在一个语句中执行插入来最小化负载,例如:

insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3
Run Code Online (Sandbox Code Playgroud)