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

标签 sql-server database sql-server-2008 database-design

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

Database design

我封闭了三个实体,然后所有实体都包含计算字段:

  • StudetExams:平均水平
  • StudentExamObjectives:认证和分数
  • 目标成绩:FinalScore

但他们需要与其他表进行交互。例如,StudentExamObjectives 使用 Score 字段,其中是 Answers 表中所有正确问题的平均值,如果 Score 值高于或等于 0.70,则 accredited 为 1。

我不知道是我的设计有误还是我需要做一些技巧来获得这些值。

提前致谢。

最佳答案

您遇到的问题是由于缺乏标准化。每当您需要其他表的列值的函数时,您不应该将它存储在表的列中——您应该在需要此信息的查询中按需计算它。您可以使用内联表值函数 (TVF) 来简化此操作,该函数返回具有单个或可能多个列的表。

否则,您必须在插入期间计算和存储结果,这会导致数据冗余,并且如果计算值的任何列发生更改或删除其行,则可能导致数据 View 不连贯。

有时会通过非规范化添加此类冗余,但这只应在最坏的情况下进行,当使用现实世界场景分析数据库时迫使您朝这个方向发展。如果您选择这条路线,请务必添加步骤以确保在任何事务性操作之后您的数据库中存在完整性。

关于sql-server - 使用其他表中的数据创建计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986266/

相关文章:

c# - SQL Server 日期时间类型的默认值错误

sql-server - 外部应用函数的性能

sql-server - 如何将图像插入 SQL Azure 图像列

java - 在java中用文本文件读写数据

SQL表和数据提取

mysql - SQL:选择唯一日期、该日期的总计、该日期的总计以及另一个参数

java - 如何在 AWS 实例中设置与 Mysql 的 jdbc 连接?

php - 将数组保存在数据库的一个字段中还是将每个值保存在单独的字段中?

visual-studio-2008 - 开发环境的最佳 SQL Server 设置是什么?

c# - 使用ajax显示odata信息的调用查询