(德)两个关系的正常化

Unr*_*son 9 theory database-design relational

阅读CJDate数据库系统简介或类似水平书籍的人不应该对标准化和非规范化的定义有问题.

然而,记忆不像过去那样,我发现自己经常看一些设计并说它没有正常化,即使我找不到它正在破坏的正常形式.

说明它的实际例子是:

如果我们有关系

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
Run Code Online (Sandbox Code Playgroud)

所以,即使我不能说它打破例如2NF或3NF,我似乎仍然坚持认为设计仍然在以下意义上非规范化(来自Codd,EF"数据库关系模型的进一步规范化") ,第34页,评论超过1NF的正常化原因):

  1. 从不受欢迎的插入,更新和删除依赖项中释放关系集合;
  2. 随着新型数据的引入,减少重建关系集合的需要,从而延长应用程序的使用寿命;
  3. 使关系模型对用户更具信息性;
  4. 使查询统计中的关系集合中立,这些统计信息随着时间的推移可能会发生变化.

我可以说,如果我们将D定义为来自r1的所有C的总和,其中来自r1的A等于来自r2的A,那么,如果我们在r1中更新C并且我们不在r2中更新D,我们可以最终由于不合适的更新依赖性并且数据最终处于不一致状态,我发现这个原因是将r1和r2称为非规范化并将它们视为非规范化.(事实上​​,整个r2是r1的函数,并将零个新事实带入模型; r2 = f(r1))

所以问题是

  1. 我们可以将r1和r2称为非规范化吗?
  2. 如果有,为什么?如果没有,为什么?(根据哪个规则?或根据哪个定义?)

注意:
对于那些发现有趣的问题并给出答案的人,我请求提供可引用的内容或以特定的假设和结论形式(或者换句话说,如果你要去在你看来,请用一些推理跟着它).

编辑 我接受了dportas的回答.我将在这里尝试添加一点:CJDate可以做出明确而严格的区分:

许多设计理论都与减少冗余有关; 规范化减少了relvars中的冗余,正交性减少了relvars中的冗余.

深入引用数据库:从业者的关系理论

并在下一页

正如未能一直正常化意味着冗余并且可能导致某些异常,因此也不能坚持正交性.

nvo*_*gel 5

假设 AB 是 r1 中的键,A 是 r2 中的键,那么该模式似乎属于 6NF。关系数据库字典(日期)将非规范化定义为:

替换一组相关变量 R1、R2、. 。., Rn 通过它们的连接 R,使得对于所有 i,R 在 Ri 属性上的投影保证等于 Ri (i = 1, 2, ..., n)。

从根本上说,归一化/反归一化是关于使用组合和无损分解投影连接运算符的组合和无损分解。在此示例中,您有由不同运算符引起的冗余:求和。我预计原则上很有可能为投影和连接之外的运算符形成一种“规范化”理论,甚至可能对于求和等非关系函数也是如此。这不是规范化的传统定义方式,但是在没有任何合理基础的情况下,我认为我们应该应用上面引用中 Date 定义的技术含义非规范化。