我有下表:
我的直觉告诉我这很糟糕,因为TOTAL
可以从TIME_IN
和TIME_OUT
推断出来。
这是违规的正常形式吗?
答案 0 :(得分:1)
存储作为计算结果的值通常会违反3NF。它们构成了传递依赖。
在您的情况下,传递依赖是
time_in, time_out -> total
{time_in,time_out}对不是候选键。
通常情况下(ahem),您可以通过投影解决传递依赖关系,但是当传递依赖关系涉及计算结果时,这通常不会有意义。有三个明显的选择。
其中每一项都可能对性能和维护产生不同的影响。