Database design (d)两种关系正常化
读过C.J.Date的《数据库系统简介》或类似级别的书籍的人不应该对规范化和非规范化的定义有问题 然而,记忆已经不是过去的样子了,我发现自己经常看着一些设计,说它没有标准化,即使我找不到它打破的是哪种正常形式 说明这一点的实际例子是: 如果我们有关系Database design (d)两种关系正常化,database-design,theory,relational,Database Design,Theory,Relational,读过C.J.Date的《数据库系统简介》或类似级别的书籍的人不应该对规范化和非规范化的定义有问题 然而,记忆已经不是过去的样子了,我发现自己经常看着一些设计,说它没有标准化,即使我找不到它打破的是哪种正常形式 说明这一点的实际例子是: 如果我们有关系 r1(A,B,C)和r2(A,D) 使用FDs:AB->C和A->D 和r1表示详细数据,而r2是该数据的汇总(换句话说,D的每个实例是r1中值的函数。在本例中,让它是根据r1中的a值C的小计) 实例 r1 = A B C 1 1 1
r1(A,B,C)
和r2(A,D)
使用FDs: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,E.F.“数据库关系模型的进一步规范化”,第34页,评论了规范化超过1NF的原因):
对于那些觉得这个问题很有趣,可以给出答案的人,我恳请他们提供一些可以引用的东西,或者以一种特定的假设和结论的形式(或者换言之,如果你想提出你的观点,请遵循它并进行一些推理) 编辑 我接受了这个答案。我将尝试在这里添加一些内容: C.J.Date可以明确而严格地区分: 许多设计理论都与设计有关 减少冗余;规范化 减少relvars中的冗余, 正交性减少了它的交叉性 雷瓦尔 引自 在下一页 就像所有的错误都无法正常化一样 这种方式意味着冗余,并可能导致 某些异常情况也会出现 未能坚持正交性
所以r2是r1的函数,这意味着r2是r1函数的物化视图 在该示例中,它将是一个视图,
通过a从r1组中选择a和(C)
codd关于规范化的工作中没有涉及这些观点,但我认为他确实写过这些观点
实现视图通常是出于缓存的原因,有些人可能会认为这是一种非规范化的形式,因此有一些论文是关于自动决定要实现哪个视图的,从而使它成为数据库可以对视图执行的操作,以使它们有时更快
但是,由于视图的更新通常是不允许的,尽管我认为我读到codd说,像所有可以更新的视图一样,在一些复杂的情况下,应该是可以更新的,并且有一些关于如何使其工作的论文假设AB是r1中的一个键,a是r2中的一个键,那么模式似乎是6NF中的。关系数据库字典(日期)将非规范化定义为: 替换一组相关变量R1、R2。 ,Rn由它们的联接R表示,因此 所有i都是R在平面上的投影 Ri的属性保证是 等于Ri(i=1,2,…,n)
从根本上讲,规范化/非规范化是关于使用投影和连接运算符进行合成和非损失分解。在本例中,冗余是由不同的运算符引起的:求和。我认为,对于投影和连接以外的运算符,甚至对于像求和这样的非关系函数,在原则上形成“规范化”理论是完全可能的。然而,这不是规范化的常规定义,在没有任何可靠基础的情况下,我认为我们应该应用上述引用中日期定义的技术意义非规范化。我认为这对关系违反了第五范式
R2是R1的投影。一些人认为SUM超出了关系模型的范围。在这种情况下,SUM是COUNT的一个微不足道的扩展,它在关系模型的范围内。您对r2中D列的定义“r1中所有Cs的总和,其中a from r1等于a from r2”,是对D的约束。更正式地说,∑是求和,π是投影,σ是选择
(a、d)∈ r2⇔ (a,d)=(a,∑c),a∈ πA(r1),c∈ πC(σA=A(r1))
由于此约束既不是域约束也不是键约束,r2
不在(DKNF)中
DKNF是我所知道的唯一一种没有用单一关系定义的规范形式,主要是因为它是用约束而不是依赖关系定义的。它可能是一种视图,但规范化是关于语义,而不是实现的。在这种情况下,似乎相关的事实是A确定D,而不管r1和r2是基关系还是deri