我有一个包含 20 万学生记录的数据库,每个学生都有一个可扩展的个人资料。
Students
是主键表,
StudentProfiles
是存储 Profiles 元素:
[ProfileID],[StudentID],[PropertyDefinitionID],[PropertyValue]
每个配置文件包含大约 120 个属性,因此StudentProfiles
我有 20 万学生 * 120 个配置文件属性 = 2400 万行。
一些重要的 Profile 元素喜欢Count(StudentSiblings)
或GuardianEmail
在许多外部操作中使用,而其他 Profile 元素很少使用。
为了获得更好的性能,如果我们也将这 3 个或 4 个 Profile Properties 保存为主表中的列,会有什么问题Students
吗?
这只是一个示例,我还有另一种情况,我想将一个表的聚合函数的结果保存在另一个表中以便更轻松快捷地访问,例如将学生表中的学生付款总和存储为列,是那种非规范化打破了数据库设计标准。