我正在为一所学科学校创建数据库设计。我当前的设计显示在下一个链接中:
我封闭了三个实体,然后所有实体都包含计算字段:
- StudetExams:平均水平
- StudentExamObjectives:认证和分数
- 目标成绩:FinalScore
但他们需要与其他表进行交互。例如,StudentExamObjectives 使用 Score 字段,其中是 Answers 表中所有正确问题的平均值,如果 Score 值高于或等于 0.70,则 accredited 为 1。
我不知道是我的设计有误还是我需要做一些技巧来获得这些值。
提前致谢。
最佳答案
您遇到的问题是由于缺乏标准化。每当您需要其他表的列值的函数时,您不应该将它存储在表的列中——您应该在需要此信息的查询中按需计算它。您可以使用内联表值函数 (TVF) 来简化此操作,该函数返回具有单个或可能多个列的表。
否则,您必须在插入期间计算和存储结果,这会导致数据冗余,并且如果计算值的任何列发生更改或删除其行,则可能导致数据 View 不连贯。
有时会通过非规范化添加此类冗余,但这只应在最坏的情况下进行,当使用现实世界场景分析数据库时迫使您朝这个方向发展。如果您选择这条路线,请务必添加步骤以确保在任何事务性操作之后您的数据库中存在完整性。
关于sql-server - 使用其他表中的数据创建计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986266/