chapter10_关系数据库设计理论_4_关系模式的规范化

  • 第一范式 1NF

    关系模式R中的每一个属性对应的域值都是不可再分的

  • 第二范式 2NF

    (1) 候选键

    有的关系中,能够标识元组的属性(组)不止一个。此时它们都称为候选键(所有候选键中属性的数量应该一致)

    (2) 主属性和非主属性:如果某个属性包含在关系模式的某个候选键中,则为主属性;否则为非主属性

    (3) 2NF定义

    一个关系模式满足1NF,且非主属性完全依赖于R的每个候选键

  • 第三范式 3NF

    (1) 定义

    一个关系模式满足1NF,且没有非主属性传递依赖于R的候选键

    (2) 若一个关系模式满足 3NF,则它一定满足2NF

  • 修正的第三范式(Boyce-Codd范式) BCNF

    (1) 定义

    一个关系模式满足1NF,且没有任何属性(包括主属性、非主属性)传递依赖于R的任意关键字

    (2) BCNF不但排除了非主属性对主属性的传递依赖,也排除了主属性间的传递依赖

    (3) 等价定义

    一个关系模式满足1NF,且对于它的每个函数依赖X->Y,都有X是R的其中一个候选键

    (4) 若一个关系模式满足BCNF,则它一定满足3NF

    (5) 在函数依赖的范围内,BCNF已经达到了关系模式的最大分离,是函数依赖范围内能够达到的最高范式

  • 模式分解算法

    (1) 如果要求模式分解具有无损连接性+保持依赖性,则可以达到3NF,未必达到BCNF;如果要求模式分解仅具有无损连接性,则可以达到BCNF。即,若规范化到BCNF,不一定能够保持函数依赖

    (2) 生成3NF的算法

    F为关系R的函数依赖集,U为R的属性集合

    1° 寻找没有出现在F中的R的属性,将这些属性单独组成一个关系模式,并将这些属性从R中去掉,即 U = U' + Z (其中U'为出现在F中的属性集合,Z为未出现在F中的附加属性集合)

    2° 令 F = F ∪ {U'->Z}

    3° 计算F的最小函数依赖集 F'

    4° 对于F'中的所有函数依赖 Xi -> Yi,若 Xi = Xj 或 Xi ≠ Xj且Xi <-> Xj,则将这些函数依赖分为一组

    每组函数依赖组成一个关系模式,并将包含了附加属性Z去掉(因为这些属性已经在第一步组成关系模式了);如果有一个关系模式中所含属性与U'相同,则输出该模式;否则,输出这些模式

    示例

      U = {A, B, C, D, E}, F = {A->CD, B->E, AC->D}
    
      1° U' = U, Z = ∅
    
      2° F = {A->CD, B->E, AC->D, ABCDE->Z}
    
      3° F' = {A->C, A->D, B->E, AB->Z}
    
      4° {A->C,A->D}, {B->E}, {AB->Z}
    
      5° 分解为 R1 = {A,C,D}, R2 = {B, E}, R3 = {A, B}
    

    (3) (2)中的算法生成的分解是3NF的,且具有无损连接性和保持函数依赖性

    (4) 生成BCNF的算法

    1° 检查各个关系模式是否满足BCNF,若满足则算法终止;

    2° 若关系模式 Ri(Ui, Fi)不满足BCNF,即Fi中存在函数依赖 X->Y,而X不是Ri的候选键(BCNF的等价定义),则分解Ri为 Ri1 = XY, Ri2 = Ri - Y

    3° 用Ri1, Ri2代替Ri,返回1°

    示例

      U = {A, B, C, D, E}, F = {A->C,C->D,B->C,DE->C,CE->A}
    
      Round 1
      1° R(U,F)的候选键为BE(F中只有BE从未出现在右面,检查一下发现BE确实可以标识整个元组),依次检查函数依赖,发现A->C的X = A,不是候选键,不满足BCNF
    
      2° 分解R为 U(R1) = U1 = {A,C}, U(R2) = U2 = {A, B, D, E}; 此时F(R1) = F1 = {A->C}, F(R2) = F2 = {B->D, BE->A}
    
      Round 2
      1° R1(U1, F1)的候选键为A,满足BCNF;R2(U2,F2)的候选键为BE, F2中的B->D不满足BCNF
    
      2° 分解R2为 U(R21) = U21 = {B,D}, U(R22) = U22 = {A,B,E}; 此时F(R21) = F21 = {B->D}, F(R22) = F22 = {BE->A}
    
      Round 3
      1° R21(U21,F21)的候选键为B,满足BCNF;R22(U22,F22)的候选键为BE,满足BCNF,算法结束
    

    (5) (4)的算法可以生成一个满足BCNF的无损分解,但是不保证函数依赖保持性

    (6) (4)的算法产生的分解结果可能有多种,与函数依赖集的扫描顺序有关

  • 多值依赖

    (1) 定义

    关系模式R,属性集U,X和Y是U的子集,且Z = R - (XY)。当且仅当,对于给定的一个x值,有__一组y值,且这组y值与r中的其他属性R-(XY)无关,则Y多值依赖于X,记为X->->Y。

    示例

      有很多门课,每门课有很多个老师上课且有很多本参考书,这是参考书就多值依赖于课程名称,因为一门课对应一组参考书,且参考书的取值和上课老师无关
    

    (2) 如果定义中Z为空集,则X->->Y称为平凡的多值依赖

    (3) 超键:可以唯一标识一个元组的一个或一组属性,和候选键的区别是候选键是没有多余属性的超键

  • 第四范式 4NF

    (1) 定义

    对于关系模式R上的任何一个非平凡的多值依赖X->->Y,X是R的一个超键,则R满足4NF

    (2) 4NF的定义说明,满足4NF的关系模式不存在非平凡的多值依赖。如果关系模式R上存在非平凡的多值依赖,那么该多值依赖只能是函数依赖,而且该函数依赖的决定因素是R的超键

  • 投影-连接范式 PJNF

  • 总结

    (1) 规范化程度

    1NF < 2NF < 3NF < BCNF < 4NF < PJNF

    (2) 3NF可以保持无损连接和函数依赖,BCNF及其之后的范式只能保持无损连接

    (3) 优点:关系模式分离程度越高,概念越清楚,结构越简单,存储异常消除得越彻底

    (4) 缺点:分离程度越高,连接运算代价越大,效率降低

    因此,不是规范化程度越高越好,一般常用的是3NF和BCNF

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • 数据字典 数据库系统中存放三层结构定义的数据库称为数据字典(DD),对数据库的操作都要通过DD才能实现。DD系统中...
    panda_say阅读 1,083评论 0 6
  • 数据依赖,通过对一个关系中属性间值的相等与否体现出来的数据间的相互关系;是现实世界属性间相互联系的抽象;是数据内在...
    kotw_zjc阅读 888评论 0 0
  • 一、数据关系 关系数据库可能存在的问题 1.数据冗余(必然存在,但应该尽量少) 2.更新冗余 3.插入冗余 4.删...
    一村之里正阅读 1,956评论 0 3
  • 数据库基础Database4-数据库设计 六 关系设计库设计 一个关系模式: R(U, F) 其中: 关系名R是符...
    sunblog阅读 1,785评论 0 1
  • 数据依赖是关系内部属性之间相关联系的表达,是语义的体现,是构成数据的约束,大多数数据依赖是函数依赖,它是关系中“键...
    我好菜啊_阅读 1,511评论 0 0