Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433428
  • 博文数量: 55
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-04 15:15
个人简介

热衷技术,热爱交流

文章分类

全部博文(55)

文章存档

2014年(7)

2013年(48)

分类: Oracle

2013-06-12 14:53:42

关系规范化理论

1         规范化

1.1    为什么要规范化?

关系模式用五元组表示,R(U,D,DOM,F)U表示属性,D表示域,DOM表示属性到域上的映射。一般不用研究关系的域以及属性到域上的映射,但是需要研究内部属性的依赖关系-函数依赖R(U,F)

不好的关系模式会引发数据冗余,插入,更新,删除的异常,所以,需要研究如何解决这些问题。

1.2    非平凡的函数依赖

实际上就是定义了两部分属性(x,y,如果x分量上相等,那么y上必须相等,例如资产表,ip地址和mac,序列号,实际上是相互函数依赖的关系。

1.3    完全函数依赖和部分函数依赖

完全函数依赖指的是Y函数依赖X,但是不函数依赖X的真子集,那么Y完全函数依赖于X。如果Y还函数依赖X的某个真子集,那么叫做部分函数依赖。

1.4   

码的概念其实就是,如果R(U,F)对与某组属性XU完全函数依赖X,那么X叫做关系的候选码,如果有多个候选码,可以选取一个码作为主码。如果R中某个属性是另外一个关系的主码,那么这个属性叫做这个关系的外码。

2         范式理论

关系数据库中的关系要满足于一定的要求,满足不同程度的要求叫做满足不同范式。

一个低一级的范式通过模式分解,转换为若干高一级的范式,叫做规范化。

2.1    1NF:

关系中每个属性都是不能再分的数据项,也就是不允许表中有表

例如,学生成绩一列,不能再分为期中成绩和期末成绩。

2.2    2NF

所谓2范式,指的是关系中每个非主属性都要完全函数依赖主属性。

再如:

员工效率表:

员工   零件          工时       零件存放仓库  仓库负责人

在这个关系中,(员工,零件)是组合主属性。同时,由于零件只能在一个仓库,所以仓库也函数依赖零件,也就是说仓库对(员工,零件)来说,是部分函数决定,这就不满足二范式。

异常情况:增加仓库,这个仓库并没有零件,由于没有主键,所以没法添加

修改某个零件的仓库时,需要修改一大堆记录;

删除零件时候,把对应的仓库都删掉了;

需要分解成两个关系,消除部分函数依赖:

(员工,零件,工时),(零件,仓库 仓库负责人)

2.3    3NF

考虑上面分解后的关系:(零件,仓库 仓库负责人)

零件只属于一个仓库,一个仓库只能有一个负责人,所以零件就间接决定了仓库负责人。也就是说,这个关系存在非主属性对主属性的传递函数依赖。

异常情况:

增加了一个仓库,但是还没有放零件,那么这个仓库就添加不进去。

删除了一个零件,把仓库都删没了

修改一个仓库的负责人,由于数据冗余严重,可能需要修改很多行。

使用属性投影分解法进行规范化:

(零件,仓库),(仓库,仓库负责人)

这样,分解后的3范式就消除了传递函数依赖,也就是消除了非主属性之间的完全函数依赖。

2.4    BC范式

每一个决定因素都必须包含码!

考察表(学生姓名 课程 教师)

每个学生可以选多课程:(学生-课程)--》教师

每个老师教一门课,每一门课程可以由多个老师教授:教师》课程

学生      课程    教师

李四      数学    黎明

王五      数学     刘德华

这个关系的主属性是(学生-课程)

这个关系满足1NF,2NF,3NF,因为没有非主属性对码传递依赖或者部分依赖。这里需要注意的是,教师虽然可以函数决定课程,但是它不能决定学生,所以它并不是码。这不满足决定因素必须包含码的规范。

一般而言,满足3范式就ok了。

阅读(1775) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~