我有一个拥有20万条学生记录的数据库,每个学生都有可扩展的资料。
Students
是主键表
StudentProfiles
存储了“个人档案”元素:
[ProfileID],[StudentID],[PropertyDefinitionID],[PropertyValue]
每个配置文件包含大约120个属性,因此在StudentProfiles
我有20万学生* 120个配置文件属性= 2400万行。
许多外部操作中使用了一些重要的配置文件元素,如Count(StudentSiblings)
或GuardianEmail
,而很少使用其他配置文件元素。
为了获得更好的性能,如果我们还将这3或4个配置文件属性保存为主Students
表中的列,是否有任何问题?
这只是一个例子,我还有另一种情况,我想在另一个表中保存一个表的聚合函数的结果,以便更容易和更快地访问,比如在学生表中存储学生的付款总和作为专栏,那种反规范化打破了数据库设计标准。
答案 0 :(得分:0)
如果这些经常使用的配置文件元素是原子的 - 即每个学生只有一个GuardianEmail的值 - 那么我认为没有理由不将这些值存储在学生表中,就像存储学生的电子邮件或姓氏在学生表中。