行数较少的表与具有许多行的一张表

F U*_*F U 1 mysql database asp.net database-design

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

示例 5000 个问题 PER 表 * 1000 个用户表 VS 1 个表,其中 1000 个用户有 5,000,000 行。

另外,数据库可以容纳的 ROW 或 TABLE 是否有限制?

Gor*_*off 5

一个表可以存储多少数据是有限制的。在现代操作系统上,这以 TB 为单位(请参阅文档)。

有许多原因,你希望有多个表:

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

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