然而,记忆并不像以前那样,我发现自己经常看一些设计并说它没有正常化,即使我找不到它正在破坏的正常形式.
说明它的实际例子是:
如果我们有关系
r1(A,B,C)和r2(A,D)
使用FD:AB-> C和A-> D.
并且r1表示详细数据,而r2是该数据的汇总(换言之,D的每个实例是r1中的值的函数.在该示例中,根据来自r1的A,使其为值C的小计).
示例实例
r1 = A B C 1 1 10 1 2 20 2 1 10 2 2 25 r2 = A D 1 30 2 35
所以,即使我不能说它打破例如2NF或3NF,我似乎仍然坚持认为设计仍然在以下意义上非规范化(来自Codd,EF“数据库关系模型的进一步规范化”),第34页,评论超过1NF正常化的原因):
- To free the collection of relations from undesirable insertion,
update and deletion dependencies;- To reduce the need for restructuring the collection of
relations as new types of data are
introduced,and thus increase the life
span of application programs;- To make the relational model more informative to users;
- To make the collection of relations neutral to the query
statistics,where these statistics are
liable to change as time goes by.
我可以说,如果我们将D定义为来自r1的所有C的总和,其中来自r1的A等于来自r2的A,那么,如果我们在r1中更新C并且我们不在r2中更新D,我们可以最终由于不合适的更新依赖性并且数据最终处于不一致状态,我发现这个原因是将r1和r2称为非规范化并将它们视为非规范化. (事实上,整个r2是r1的函数,并将零个新事实带入模型; r2 = f(r1))
所以问题是
>我们可以将r1和r2称为非规范化吗?
>如果是的话,为什么?如果没有,为什么? (根据哪个规则?或根据哪个定义?)
注意:
对于那些发现有趣的问题来回答问题的人,我请求提供一些可引用的东西,或者将其置于一种特定的假设和结论中(或换句话说,如果你要放入您的意见,请用一些推理来遵循它).
编辑
我接受了dportas的回答.我会尝试在这里添加一点:
C.J.Date可以做出明确而严格的区分:
Much of design theory has to do with
reducing redundancy; normalization
reduces redundancy within relvars,
orthogonality reduces it across
relvars.
引自Database in depth: relational theory for practitioners
并在下一页
just as a failure to normalize all the
way implies redundancy and can lead to
certain anomalies,so too can a
failure to adhere to orthogonality.
解决方法
Replacing a set of relvars R1,R2,. .
.,Rn by their join R,such that for
all i the projection of R on the
attributes of Ri is guaranteed to be
equal to Ri (i = 1,2,. . .,n).
从根本上说,归一化/非规范化是关于使用投影和连接运算符的合成和非损失分解.在此示例中,您具有由不同运算符引起的冗余:求和.我希望原则上很可能为投影和连接以外的运算符形成“规范化”理论,甚至可能对求和等非关系函数形成理论.然而,这并不是传统上如何定义规范化,并且在没有任何合理基础的情况下,我认为我们应该应用上述引文中由Date定义的技术含义非规范化.