关系数据库的规范化理论(精选)
- 格式:ppt
- 大小:1.52 MB
- 文档页数:31
关系数据库规范化理论数据库设计的问题可以简单地描述为:如果要把一组数据存储到数据库中,如何为这些数据设计一个合适的逻辑结构呢?在关系数据库系统中,就是如何设计一些关系表以及这些关系表的属性。
这就是本章主要介绍的关系模式的规范化设计问题;问题的提出假设有如下关系sS(sno,name,sex,cno,cname,degr) 其中,s表示学生表,对应的各个属性依次为学号、姓名、性别、课程号、课程名和成绩。
主码为(sno,cno);这个关系模式存在如下问题:(1)数据冗余当一个学生选修多门课程就会出现数据冗余。
例如:可能存在这样的记录(s0102,’王华’,’男’,c108,’c语言’,84),(s0102,’王华’,’男’,c206,’数据库原理与应用’,92)和(s0108,’王丽’,’女’,c206,’数据库原理与应用’,96),这样导致name、sex和cname属性多次重复存储。
(2)不一致性由于数据存储冗余,当更新某些数据项时,就有可能一部分字段修改了,而另一部分字段未修改,造成存储数据的不一致性。
例如:可能存在这样记录:(s0102,’王华’,’男’,c108,’c语言’,84),(s0108,’王丽’,’女’,c206,’数据库原理与应用’,92),这就是数据不一致性;(3)插入异常如果某个学生未选修课程,则其no、name 和sex属性值无法插入,因为cno为空,关系数据模式规定主码不能为空或部分为空,这便是插入异常。
例如,有一个学号为s0110的新生“陈强”,由于尚未选课,不能插入到关系s中,无法存放该学生的基本信息。
(4)删除异常当要删除所有学生成绩时,所有no、name和sex属性也都删除了,这便是删除异常。
例如,关系s中只有一条学号为s0105的学生记录:(s0105,’王华’,’男’,c018,’c语言’,84),现在需要将其删除,在该记录删除后,学号为s0105的学生“王华”的基本信息也被删除了,而没有其他地方存放该学生的基本信息。
关系数据库的规范化理论与数据库设计在当今数字化的时代,数据成为了企业和组织的重要资产,而关系数据库作为存储和管理数据的重要手段,其设计的合理性直接影响着数据的质量、完整性和可用性。
关系数据库的规范化理论是指导数据库设计的重要原则,它能够帮助我们避免数据冗余、更新异常等问题,从而提高数据库的性能和可靠性。
首先,我们来了解一下关系数据库的基本概念。
关系数据库是由一组二维表组成的,每张表都有一个唯一的表名,表中的每一行称为一个元组,代表一个实体;每一列称为一个属性,代表实体的一个特征。
通过在不同的表之间建立关联,我们可以实现数据的查询和操作。
那么,什么是规范化理论呢?规范化理论是一种用于设计关系数据库的方法和原则,其目的是通过对关系模式进行分解和优化,消除数据冗余和更新异常,确保数据的一致性和完整性。
规范化理论主要包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
第一范式要求表中的每个属性都是不可再分的原子值。
例如,如果有一个“联系人信息”表,其中包含“地址”这个属性,如果地址又分为“省”“市”“区”“详细地址”等子属性,那么就不满足第一范式,需要将其拆分成多个属性。
第二范式要求在满足第一范式的基础上,每个非主属性都完全依赖于主键。
举个例子,如果有一个“订单”表,主键是“订单号”,而“客户姓名”和“客户地址”等非主属性只依赖于“客户编号”,而不是“订单号”,那么就不满足第二范式,需要将其拆分成两个表,一个是“订单”表,一个是“客户”表。
第三范式要求在满足第二范式的基础上,每个非主属性都不传递依赖于主键。
比如说,有一个“员工”表,主键是“员工编号”,“部门名称”依赖于“部门编号”,而“部门编号”又依赖于“员工编号”,这就不满足第三范式,需要将“部门名称”这个属性移到“部门”表中。
规范化理论在数据库设计中具有重要的意义。
通过规范化设计,可以减少数据冗余,节省存储空间。
想象一下,如果一个客户的信息在多个表中重复存储,不仅浪费空间,而且当客户信息发生变化时,需要在多个地方进行更新,容易导致数据不一致。
第四章关系数据库规范化理论一个关系数据库模式由一组关系模式组成,一个关系模式由一组属性名组成。
关系数据库设计,就是如何把已给定的相互关联的一组属性名分组,并把每一组属性名组成关系的问题。
然而,属性的分组不是唯一的,不同的分组对应着不同的数据库应用系统,它们的效率往往相差很远。
为了使数据库设计合理可靠,简单实用,长期以来,形成了关系数据库设计的理论——规范化理论。
4.1 关系规范化的作用规范化,就是用形式更为简洁,结构更加规范的关系模式取代原有关系模式的过程。
如果将两个或两个以上实体的数据存放在一个表里,就会出现下列三个问题: 数据冗余度大插入异常删除异常所谓数据冗余,就是相同数据在数据库中多次重复存放的现象。
数据冗余不仅会浪费存储空间,而且可能造成数据的不一致性。
插入异常是指,当在不规范的数据表中插入数据时,由于实体完整性约束要求主码不能为空的限制,而使有用数据无法插入的情况。
删除异常是指,当不规范的数据表中某条需要删除的元组中包含有一部分有用数据时,就会出现删除困难。
(以P98工资表为例)解决上述三个问题的方法,就是将不规范的关系分解成为多个关系,使得每个关系中只包含一个实体的数据。
(讲例子解)当然,改进后的关系模式也存在另一问题,当查询职工工资时需要将两个关系连接后方能查询,而关系连接的代价也是很大的。
那么,什么样的关系需要分解?分解关系模式的理论依据又是什么?分解完后能否完全消除上述三个问题?回答这些问题需要理论指导。
下面,将加以讨论:4.2 函数依赖实体间的联系有两类:一类是实体与实体之间联系;另一类是实体内部各属性间的联系。
数据库建模一章中讨论的是前一类,在这里我们将学习第二类。
和第一类一样,实体内部各属性间的联系也分为1:1、1:n和m:n三类:例:职工(职工号,姓名,身份证号码,职称,部门)1、一对一关系(1:1)设X、Y是关系R的两个属性(集)。
如果对于X中的任一具体值,Y中至多有一个值与之对应,反之,对于Y中的任一具体值,X中也至多有一个值与之对应,则称X、Y两属性间是一对一关系。