数据库范式概念以及范式分解详解

  1. 几个重要知识点

    • 平凡函数依赖与非平凡函数依赖

      • X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
      • X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
    • 完全函数依赖与部分函数依赖

      在R(U)中,

      • 如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → Y。
      • 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → Y
    • 候选码

      设K为R中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。

      千万需要记住的是候选码与超码之间的区别

    • 超码

      如果U部分函数依赖于K,即K → U,则K称为超码(Surpkey)。

      候选码是最小的超码,即K的任意一个真子集都不是候选码。

    • 主码

      主码是候选码中的任意一个

    • 主属性与非主属性

      • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
      • 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
    • 全码

      整个属性组是码,称为全码(All-key)

  2. 范式

    • 第一范式

      每个属性不可分割

    • 第二范式

      若关系模式R∈1NF,并且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF

    • 第三范式

      消除非主属性对于码的传递依赖
      若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R ∈ 3NF。

      三范式分解

    • BC范式

      消除主属性对码的部分和传递函数依赖

      判断:在关系模式R中,如果每一个决定属性集都包含候选码,则R∈BCNF。

    1. 无损连接与保持函数依赖性

      • 无损连接

    数据库范式概念以及范式分解详解_第1张图片

    ​ 无损连接判断

    • 保持函数依赖性

    数据库范式概念以及范式分解详解_第2张图片

    一个无损连接的分解不一定具有依赖保持性,反之亦然 !

    1. 三范式分解(范式分解最终的答案并非是唯一的,和分解的顺序有关!)

      • 三范式分解为保持函数依赖的分解

        步骤如下:

      数据库范式概念以及范式分解详解_第3张图片

      例题:

      设R,其中:
      U={C, T, H, R, S, G, X, Y, Z},
      F={C→T, CS→G, HR→C,HS→ R, TH→ R, C→X},

      ​ 将R 分解为3NF,且保持函数依赖。

      解:

      1. 求F的最小函数依赖集

        该函数依赖集已经是最小化的

        1. 查看是否有一个函数依赖X->A,且XA=R。

        可以很清楚的看到,并没有这种函数依赖。

      2. 查看R中的某些属性是否并不在F中出现过

        可以很清楚的看到有YZ

      3. 将最小函数依赖集中的每一个依赖左右两边放到一起

        则分解为ρ ={YZ, CTX, CSG, HRC, HSR, THR}
        注:这里的CTX放到一起时因为C → \rightarrow T,C → \rightarrow X

      • 三范式分解既具有无损连接性又能保持函数依赖的分解

        非常简单!在原来的基础上加上候选码中的任意一个即可。

        例如此题中的候选码为HS

        那么在原来的ρ中添加HS即可,但是此处需要注意

        ∵ HS⊆ HSR
        ∴ τ= ρ ={CTX, CSG, HRC, HSR, THR, YZ}为满足要求的分解

    2. BCNF分解(范式分解最终的答案并非是唯一的,和分解的顺序有关!)

      • 如何判定BCNF范式呢?

        很简单!就是看每个函数依赖的左边是否包含候选码,如果其中有一个不含候选码,则不为BCNF范式。

      • 将关系模式转换为BCNF 的无损连接的分解

        ​ 递归下去,直到出现 Φ \Phi Φ或者出现最终的一个依赖符合BCNF约束则停止分解

        ​ 例子1:
        ​ 已知 R (A, B, C), AB为码, 且B->C存在
        ​ 可知:R不满足BCNF
        ​ 设 α \alpha α = B, β \beta β = C
        ​ 则 R 可分解为:
        ​ ( α \alpha α ⋃ \bigcup β \beta β) = (B, C)
        ​ (R – ( β \beta β − - α \alpha α)) = (A, B)

        ​ 例子2:
        数据库范式概念以及范式分解详解_第4张图片

你可能感兴趣的:(数据库,数据库,mysql)