【问题标题】:Storing large sets of 'survey answers'存储大量“调查答案”
【发布时间】:2016-12-08 14:21:06
【问题描述】:

我正在为调查系统构建数据库。

我们有员工填写调查问卷,其中包含有问题的类别。员工可以给他/她自己打分(例如 6/10)。现在我们还有教练会为该员工填写相同的测试。

我当前的数据库是这样的

+------------+------------+---------+-----------+
| EmployeeID | QuestionID | CoachID | Answer    |
+------------+------------+---------+-----------+
|          1 |         10 | null    | 5/10      |
|          2 |         11 | null    | 8/10      |
|          3 |         12 | null    | 6/10      |
|          1 |         10 | 1       | 5/10      |
|          2 |         11 | 1       | 8/10      |
|          3 |         12 | 1       | 6/10      |
+------------+------------+---------+-----------+

您可以看到 1 位员工、1 位教练和只有 3 个问题提供了这些行。 这会变得很大,我很担心这个设置。

如果有 40 名员工,每人有 2 位教练和 100 多个问题,该怎么办。

有没有更好的方法来解决这个问题?

JSON

我正在考虑使用 JSON 字段,它存储分数的类似数组的表示,例如

[3,4,5,7]

但问题是我不能对该字段进行查询,对吧?

期待您处理此类数据库的方式。 谢谢!

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    关系数据库可以处理数百万甚至数十亿行 - 这是一个非常狭窄的表(即只有几列)。即使有成千上万不同的员工和问题,这也算不上一张大桌子。在这方面我不会担心。

    如果您想对此放心,请设置一些测试数据。无论如何,这是一个非常好的实践 - 很少有开发人员尝试使用与系统上线后将存在的数据量相当的数据量来测试他们的系统。如果您已经知道您将拥有 40 名员工、2 名教练和 100 个问题,那么您就确切地知道要设置哪些测试数据。创建它并尝试一些与来自前端的查询相匹配的查询。如果您遇到性能问题,请检查索引等内容。

    更进一步,想想这个系统在其生命周期内将有多少数据。如果员工每年都会回答新问题,那么请考虑该系统需要保存多少年的历史数据。如果是 5 年,那么 40 名工作人员、2 名教练和 500 个问题。也许期望公司会发展很多,所以为了安全起见,你可以尝试 100 名员工、5 名教练和 500 个问题。

    设置此类数据可能会有点耗时,但如果您提前发现这些问题,而不是发现您选择了糟糕的数据模型或编写了一些上线后查询不佳。在您的情况下,数据模型看起来很简单 - 数量也足够小 - 设置和测试可能不会花费您那么长时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2021-03-11
      相关资源
      最近更新 更多