行数较少的表与具有MANY行的ONE表

时间:2015-09-20 12:05:55

标签: mysql asp.net database database-design

我正在为许多用户创建一个测试网站,以便进行多次测试。我想将这些结果存储到表中。每个用户可以进行5000次测验。我的问题是......为每个用户创建一个表并将结果存储到他自己的表(QuizID,Score)中会更好吗...或者......将所有结果存储到一个表中会更好吗( UserID,QuizID,Score)?

实施例 每表5000个问题* 1000个用户表 VS 1个相同1000个用户的5,000,000行表。

此外,DB可以容纳ROW还是TABLE?

2 个答案:

答案 0 :(得分:4)

表可以存储多少数据是有限制的。在现代操作系统上,这以太字节为单位(参见documentation)。

想要拥有多个表的原因有很多:

  • SQL数据库针对大型表进行了优化,而不是针对大量表。实际上,由于部分填充的数据页,拥有大量表可能会导致效率低下。
  • 5,000,000行不是很大。如果是,则可以使用分区来提高效率。
  • 当您处理数百或数千个表时,某些类型的查询是一场噩梦。一个简单的问题,例如"每个用户的测验平均数是多少?"变成了一大笔努力。
  • 添加新用户需要添加新表,而不是仅在现有表中插入行。
  • 维护数据库 - 例如添加列或索引 - 变成了一种折磨,而不是简单的陈述。
  • 您无法为外键用途引用每个用户/测验组合。您现在可能没有考虑过,但也许用户开始多次进行相同的测验。

在某些特殊情况下,在多个表之间划分数据可能是一个合理的选择。一个例子是安全要求,您不允许混合不同的用户数据。另一个例子是对数据的不同子集的不同复制要求。即使在这些情况下,您也不太可能拥有数千个具有相同结构的不同表。

答案 1 :(得分:0)

理想情况下,您应该采用这种方法。

  1. 包含所有问题和主要问题ID的问题表。
  2. 包含用户详细信息的用户表。
  3. 具有1对多关系的表,具有用户ID,测验ID和答案。
  4. 你担心表格中有很多行但是认为会有一些用户只需要最多10-15个测验。您最终将创建10行。