我正在为调查系统建立一个数据库。
我们的员工填写的调查中包含有问题的类别。员工可以给自己一个分数(例如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字段,它存储分数的类似数组的表示,例如
[3,4,5,7]
但问题是我无法对该字段进行查询,对吧?
期待您处理此类数据库的方式。 谢谢!
答案 0 :(得分:2)
关系数据库可以处理数百万甚至数十亿行 - 这是一个非常窄的表(即只有几列)。即使有数千名不同的员工和问题,这也不算是一张大桌子。我不会在这方面担心。
如果您想让自己放心,请设置一些测试数据。无论如何,这是一个非常好的做法 - 很少有开发人员尝试使用与系统上线后存在的数量相当的数据来测试他们的系统。如果您已经知道您将拥有40名员工,2名教练和100个问题,那么您确切地知道要设置哪些测试数据。创建它并尝试一些匹配来自前端的查询。如果遇到性能问题,请检查索引等内容。
更进一步,想想这个系统在其生命周期内将有多少数据。如果员工每年都会回答新问题,那么请考虑这个系统需要多少年来保存历史数据。如果是5年,那么就有40名工作人员,2名教练和500个问题。也许期望公司会增长很多,所以为了安全起见,你可以尝试100名员工,5名教练和500个问题。
设置此类数据可能会耗费一些时间,但如果您事先发现这些问题,而不是发现您选择了糟糕的数据模型或编写了一些问题,那么它将为您节省很多痛苦。上线后查询不佳。在你的情况下,数据模型看起来很简单 - 而且数量足够小 - 它可能不会真正花费你很长时间来设置和测试。