关于表的规范化

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

资料范本

本资料为word版本,可以直接编辑和打印,感谢您的下载

关于表的规范化

地点:__________________

时间:__________________

说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时请详细阅读内容

规范化:

满足第一范式是表的最低要求,不满足第一范式要求的数据库(表)就不能称之为关系数据库。在此基础上满足更高要求的称为第二范式,简记为

2NF,其余依此类推,还有第三范式(3NF)、BC范式(BCNF)、第四范式

(4NF)、第五范式(5NF)。BCNF可以看作是修正了的第三范式。

把表从低范式,通过投影运算转换成若干高一级范式的过程,叫做表的规范化。

一般地说,表满足的范式级别越高,设计的表越是规范,表的质量越高,数据的冗余度越小,共享性越高,所占的存储空间越少,并将数据的不一致性减少到最低程度,这也是对表进行规范化的目的。但是,高范式的数据库查询起来比较复杂。所以,不应一味追求高范式,一般满足第三范式或BC范式就可以了

二、表的规范化

1、第一范式(1NF)

如前所述,第一范式要求表的每一个字段都是不可再分的最小单位。

例1:学生(学号,姓名,学院,地址,选修课程成绩(课程号,课程名,成绩))表数据如下:

表一不满足第一范式的表

显然,这样的表是不满足第一范式的。因为[选修课程成绩]字段还可分为3个字段即(课程号,课程名,成绩)。

如果不把它进行规范化,即转换成满足第一范式的表,将会产生很多问题,如:删除异常,即本来只想删除成绩的,不得不把课程号和课程名也删除了!

转换的方法就是把可以拆分的字段进行拆分,即把[选修课程成绩]分解成3个字段:[课程号],[课程名],[成绩]。变成下面满足第一范式的表:表二满足第一范式的表

2、第二范式(2NF)

一个关系应满足1NF是最起码的条件。但是,仅满足1NF的关系还可能存在一些问题。

例2:表二中存在以下的问题:

问题1:数据冗余度大。张丽选几门课程,都必须输入所有几个她的相关信息,同时,如果有几千个人选修高等数学课,就得输入几千个“高等数学”。如果要修改“高等数学”这个课程名称,对于几千个课程名中,只要漏改一个,将造成数据的不一致性。

问题2:删除异常。我们知道,这个表中的关键字为学号和课程号,它们不能为空值,而当李锋退学时,不可能只删除李锋的学号和姓名,只能删除了李锋的整条记录,这时相应的课程号为C004的法律也被删除,如果这个表中只有李锋一人选法律课,该记录删除后,下次将无法查询法律课的课程号。

问题3:插入记录异常。与删除异常相似,如果李锋刚入学,还没有选修任何一门课程,无法知道他选修的课程号,而课程号为关键字,不能为空,因此,李锋这个记录也不能输入。

造成出现这些问题的原因是因为这个表不满足第二范式。

如何判断一个表是否满足第二范式呢,判断方法是:(1)、找出表的关键字。

(2)、如果只有一个关键字,若每一个非关键字都依赖于这个关键字,则表满足第二范式,否则不是。

什么是依赖(关系)呢?例:某表中有两个字段:学号、姓名,对于每一个学号,只有一个姓名与之对应,则称姓名依赖于学号,或称学号唯一确定姓名,记作:学号→姓名。

例3:学生(学号,姓名,学院)表是否满足第二范式?

答:满足。因为,这个表中只有一个关键字即学号,而其他字段(即非关键字)都依赖于学号,也就是说每一个学号只有一个姓名,一个学院与之对应。

例4:学生(学号,姓名,学院,成绩)表是否满足第二范式?

答:不满足。因为,一个学生可能不只选一门课程,不止一个成绩,也就是说每一个学号不只有一个成绩与之对应,或者说,有一个非关键字段(即成绩)不依赖于学号。

(3)、如果有两个或两个以上的关键字,那么,把这些关键字看成是一个组合关键字,若每一个非关键字都能完全依赖于组合关键字,则表满足第二范式,否则不是。

例5:成绩(学号,课程,成绩)表是否满足第二范式?

满足。因为,非关键字(成绩)完全依赖于组合关键字(学号+课程),即只有一个成绩与(学号+课程)对应,或者说,一个学生选修一门课程,就只能有一个成绩。

称为部分依赖。

定义:如果一个表满足1NF,且每一个非关键字都完全依赖于关键字,则这个表满足第二范式。

第一范式转换成第二范式的方法:

找出依赖关系,将能完全依赖于主键的字段从表中提取出来,同主键一起组成一个新的关系。

例7:表二(学号,姓名,学院,地址,课程号,课程名,成绩)的依赖关系如下:显然,不满足2NF。

院、地址)绩)

转换的过程就是拆分的过程,也是一个消除部分依赖的过程。但是,要注意,拆分的结果应该包含原表的所有字段!!(即无损分解)

3、第三范式(3NF)

通过分析,发现表A仍然在一定程度上存在上面提及的三个问题,要消除和减少它们,还得把它分解成满足更高范式(即3NF)的表.

满足第三范式的判断方法:

判断表在满足第二范式的基础上是否有传递依赖的情况,如果有,不是第三范式,否则是。

将非第三范式规范为第三范式的方法:

把产生传递依赖关系的非关键字段抽出来,同关键字一起建立新的表。

例8:表A(学号,姓名,学院,地址)中,存在地址传递依赖于学号的关系,即:

学号→学院,学院→地址。

把地址从原表中分出来,同关键字一起建立新的表形成表A1(学院、地址),原表就可消除了传递依赖关系。表A分解为:

表A1 (学院、地址)

表A2(学号、姓名、学院)

小结:表的规范化中,1NF是要满足每个字段都是不可再分的;2NF是在

1NF的基础上消除部分依赖关系(只保留完全依赖),3NF是在2NF的基础上进一步消除传递依赖关系。

二:

在设计和操作维护数据库时,关键的步骤就是要确保数据正确地分布到数据库的表中。使用正确的数据结构,不仅便于对数据库进行相应的存取操作,而且可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称就是"数据库规范化"。

数据冗余

数据应该尽可能少地冗余,这意味着重复数据应该减少到最少。比如说,一个部门雇员的电话不应该被存储在不同的表中,因为这里的电话号码是雇员的一个属性。如果存在过多的冗余数据,这就意味着要占用了更多的物理空间,同时也对数据的维护和一致性检查带来了问题,当这个员工的电话号码变化时,冗余数据会导致对多个表的更新动作,如果有一个表不幸被忽略了,那么就可能导致数据的不一致性。

规范化实例

相关文档
最新文档