0

我有下表:

                         

我的直觉告诉我这很糟糕,因为TOTAL可以从TIME_INand推断出来TIME_OUT

这是什么正常形式的违反?

4

1 回答 1

1

存储作为计算结果的值通常违反 3NF。它们构成了传递依赖。

在你的情况下,传递依赖是

time_in, time_out -> total

{time_in, time_out} 对不是候选键。

通常(咳咳),您会通过投影解决传递依赖关系,但是当传递依赖关系涉及计算结果时,这通常没有意义。有三个明显的选择。

  • 删除“总计”列,并在每个查询中计算它。
  • 删除“总计”列,并构建一个计算总计的视图(或物化视图)。
  • 保留“total”列并添加 CHECK() 约束以保证该值始终正确。

这些中的每一个都可能对性能和维护产生不同的影响。

于 2013-09-14T12:40:30.437 回答