数据库系统概论(一)关系数据理论--函数依赖、码和范式

函数依赖

平凡/非平凡函数依赖

  平凡函数依赖:对X→Y,Y⊆X

  非平凡的函数依赖:对X→Y,Y⊈X

  在后续讨论中,均以非平凡函数依赖进行讨论

完全/部分函数依赖

  在关系模式R(U)中,若X→Y,且x的任何一个真子集X'不存在X→Y,则称Y完全函数依赖于X

  

传递/直接函数依赖

  X→Y,Y!→X,Y→Z,称X→传递Z为传递依赖

  X→Y,Y←X,称X←→Y为直接依赖

候选码(Candidate Key)=码

  在R(U,F)中,K为U的属性或者属性集合,若KU,则称K为候选码

  超键(Super Key)

    能够唯一标识一条记录的属性或属性集

    若U部分函数依赖于K,即KU,则K为超码

    候选码是最小的超码

    超码包含候选键

    超键不一定是码,候选键和主键才是

  主码(Primary Key)

    若R有多个候选码,选一个作为主码

  主属性(Prime Attribute)与非主属性(Nonprime Attribute)

    包含在任意一个候选键中的属性都被称为主属性

    不包含在任意一个的候选键中的属性被称为非主属性

  全码(ALL-Key)

    整个属性值U就是码(候选键),则U被称为全码

  外码(Foreign Key)  

    关系模式R(U,F)中属性或属性组X并非R的码,但是是另外一个关系模式的码,则X称为外码

规范化

  关系数据库中的关系满足某一定的要求,不同程度的要求称为范式

  一个低一级范式的关系模式,通过模式分解(Schemm Decomposition)转化为更高级的范式,被称为规范化

  1NF

    一个关系模式R(U,F)所有属性都是不可分割的基本数据项

    不满足第一范式的数据库模式不能称为关系数据模式

  2NF

    在1NF的基础上,去除非主属性对码(候选码)的部分函数依赖,即每一个非主属性都是完全依赖于主键的

  3NF

    在2NF的基础上,消除非主属性对码(候选码)的传递依赖

  BCNF

    在3NF中,依然有可能存在主属性传递依赖或者部分依赖的情况,如

    关系模式STC(S,T,C)中,S表示学生,T表示教师,J表示课程。

    函数依赖:(S,C)→T,(S,T)→C, T→C 其中,(S,C)和(S,T)都是候选码。

    可以看出STJ是属于第三范式的,因为没有哪一组依赖关系中,非主属性传递或者部分依赖于码(候选码)(记住是非主属性,T在候选码中),但它不属于BC范式,因为T是决定因素,T不包含码(候选码的任何一个真子集都不能叫候选码)

    则BCNF具有两个特征:

    1.所有非主属性完全依赖于每一个码 

    2.所有主属性对不包含它的码也是完全依赖

各范式存在的问题

1NF

(学号,课程号)→(学院,学院电话,成绩,学分)

①部分函数依赖:课程→学分  这将导致
  数据冗余:一门课程被选了N次那么学分就重复出现了N-1次

  更新异常:如果一门课学分更改,则所有该课程的行都要修改
  插入异常:如果要新增一门课程和它的学分,但是因为不存在学号所以不能插入
  删除异常:如果删掉选修一门课程的所有学生的学号,那么该课程对应的学分关系也被删除

②传递函数依赖:学号→学院→学院电话  (实际上学号已经决定了学院电话)
  数据冗余:有N个某学院的学生,那么该学院电话重复出现了N-1次
  更新异常:如果要修改学院电话,那么所以该学院的学生元组都要修改
  插入异常:如果要新增一个学院和它的电话,由于缺少学号无法插入
  删除异常:如果删除一个学院所有学号,那么学院对应的电话关系也将删除

两种函数依赖导致的问题内容上都是一样的,只是引起的原因不尽相同

2NF

只有传递函数依赖的问题

3NF

消除了各类问题

 

posted @ 2020-03-06 19:30  幽灵化石  阅读(2091)  评论(0编辑  收藏  举报