代码之家  ›  专栏  ›  技术社区  ›  Unreason

(德)两个关系正常化

  •  9
  • Unreason  · 技术社区  · 13 年前

    阅读C.J.Date数据库系统简介或类似级别书籍的人不应该对规范化和非规范化的定义有问题。

    然而,记忆已经不是以前的样子了,我发现自己经常在看一些设计,并说它不是标准化的,即使我找不到它打破的标准形式。

    说明这一点的实际例子是:

    如果我们有关系

    r1 (A, B, C) r2 (A, D)

    带FDs:AB->C和A->D

    r1 表示详细数据,而 r2 是该数据的摘要(换句话说,D的每个实例都是r1中值的函数)。在本例中,根据A from r1将其设为值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的原因):

    1. 为了将关系集合从不需要的插入中解放出来, 更新和删除依赖关系;
    2. 减少重组 关系作为新的数据类型 引入,从而延长寿命 应用程序跨度;
    3. 使关系模型向用户提供更多的信息;
    4. 使关系集合与查询无关 统计数据,这些统计数据是 随着时间的推移容易改变。

    我可以说,如果我们将D定义为来自r1的所有Cs的和,其中来自r1的a等于来自r2的a,那么,如果我们在r1中更新C,而在r2中不更新D,我们可能会以不希望的更新依赖关系结束,并且数据会以不一致的状态结束,我发现这是调用r1和r2非规范化并将它们视为非规范化的原因。(事实上,整个r2是r1的函数,在模型中没有新的事实;r2=f(r1))

    所以问题是

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

    注:
    对于那些觉得这个问题有趣到可以给出答案的人,我恳请他们提供一些可以引用的东西,或者以特定的假设和结论的形式(或者换句话说,如果你想表达你的观点,请用一些推理来遵循它)。

    编辑 我接受了波尔塔的回答。我想在这里再加一点: C.J.Date可以明确而严格地区分:

    很多设计理论都和 减少冗余;规范化 减少relvars中的冗余, 正交性减少了 雷瓦尔。

    引自 Database in depth: relational theory for practitioners

    在下一页

    就像没能把所有的 方式意味着冗余,并可能导致 某些异常情况 未能坚持正交性。

    4 回复  |  直到 13 年前
        1
  •  4
  •   nvogel    13 年前

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

    替换一组relvars R1、R2、。. ,通过它们的连接R,使 R在 Ri的属性保证为 等于Ri(i=1,2。…,n)。

    基本上,规范化/非规范化是关于使用 投影 参加 操作员。在本例中,您有一个由不同运算符引起的冗余:求和。我认为,原则上,对于除了投影和连接之外的运算符,甚至对于求和这样的非关系函数,都很可能形成一种“规范化”理论。然而,这并不是规范化的常规定义,在没有任何合理依据的情况下,我认为我们应该应用上述报价中日期定义的技术意义非规范化。

        2
  •  4
  •   outis    12 年前

    你对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 不在 Domain/Key Normal Form (DKNF)。

    DKNF是我所知道的唯一一种没有用单一关系定义的标准形式,主要是因为它是用约束而不是依赖来定义的。

        3
  •  2
  •   Dan D.    13 年前

    所以r2是r1的函数,这意味着r2是 物化视图 r1的功能

    在这个例子中 select A, sum(C) from r1 group by A

    codd关于规范化的工作中没有涉及到视图,但我认为他确实写过这些视图

    将视图具体化通常是出于缓存的原因,有些人可能认为这是一种非规范化的形式,因此有一些文章讨论了如何自动决定将哪个视图具体化,从而使它成为数据库可以用来实现视图的功能,以使它们有时更快

    但是由于视图的更新通常是不允许的,尽管我认为我读到了codd说的一些东西,比如所有可以更新的视图应该是可以更新的,并且有一些关于在一些复杂的情况下让它工作的论文

        4
  •  1
  •   Walter Mitty    13 年前

    我认为这对关系违反了第五范式。


    R2是R1的投影。有人认为SUM超出了关系模型的范围。在本例中,SUM是COUNT的一个小扩展,它在关系模型的范围内。

    推荐文章