Sql server 使用其他表中的数据创建计算字段

Sql server 使用其他表中的数据创建计算字段,sql-server,database,sql-server-2008,database-design,Sql Server,Database,Sql Server 2008,Database Design,我正在为一所学科学校创建一个数据库设计。我当前的设计将在下一个链接中显示: 我附上了三个实体,所有实体都包含计算字段: 学生成绩:平均 学生目标:认证和分数 目标等级:最终核心 但它们需要与其他表交互。例如,StudentExamObjectives使用一个分数字段,其中答案表中所有问题的平均值都是正确的,如果分数值大于或等于0.70,则为1 我不知道我的设计是不是错了,或者我需要做一些技巧来获得这些值 提前感谢。您遇到的问题是由于缺乏正常化。当您需要其他表的列的值的函数时,您不应该将其

我正在为一所学科学校创建一个数据库设计。我当前的设计将在下一个链接中显示:

我附上了三个实体,所有实体都包含计算字段:

  • 学生成绩:平均
  • 学生目标:认证和分数
  • 目标等级:最终核心
但它们需要与其他表交互。例如,StudentExamObjectives使用一个分数字段,其中答案表中所有问题的平均值都是正确的,如果分数值大于或等于0.70,则为1

我不知道我的设计是不是错了,或者我需要做一些技巧来获得这些值


提前感谢。

您遇到的问题是由于缺乏正常化。当您需要其他表的列的值的函数时,您不应该将其存储在表的列中—您应该根据需要计算它,作为需要此信息的查询的一部分。您可以通过一个内联表值函数(TVF)来简化这一过程,该函数返回一个包含单个或多个列的表

否则,您必须在插入过程中计算和存储结果,如果计算值的任何列发生更改或其行被删除,则会导致数据冗余和数据视图不一致的可能性

有时会通过非规范化添加这种冗余,但这只应在最坏的情况下进行,当使用真实场景分析数据库时,会迫使您朝着这个方向进行。如果您这样做,请确保添加一些步骤,以确保在任何事务性操作之后数据库中具有完整性

StudentExamObjectives使用一个分数字段,其中是所有项目的平均值 答案表中的问题正确,如果分数为1,则认证为1 值大于或等于0.70

我不相信您可以用这种方式创建计算列。您可以使用带有
CASE
语句的视图吗?大概是这样的:

CASE WHEN Score >= 0.70
  THEN 1
  ELSE 0
END AS IsAccredited
分数
的值本身可能是所有考试分数平均值的总和。很难从模型中分辨出哪些字段当前存在,哪些字段只是概念性的