1、第一章第一章数据库基础数据库基础-范式与非范式化范式与非范式化数据冗余数据冗余函数依赖函数依赖第一,二,三范式第一,二,三范式BC范式范式非范式化非范式化1.冗余是数据的重复出现。冗余是数据的重复出现。2.数据的冗余会导致一些问题:数据的冗余会导致一些问题:更新异常:当插入、删除、修改数据时会导致数据的不更新异常:当插入、删除、修改数据时会导致数据的不一致性。一致性。不一致性:当有冗余数据时会导致错误。不一致性:当有冗余数据时会导致错误。不必要的占用多余的空间不必要的占用多余的空间。例:描述学校的数据库:例:描述学校的数据库:学生的学号(学生的学号(StuID)、所在系()、所在系(DepNa
2、me)系主任姓名(系主任姓名(DHName)、课程名()、课程名(CourseName)成绩(成绩(Grade)关系模式关系模式:Student(StuID,DepName,DHName,CourseName,Grade)数据冗余太大数据冗余太大,浪费大量的存储空间。每一个系主任的姓名重复出现浪费大量的存储空间。每一个系主任的姓名重复出现 更新异常(更新异常(Update Anomalies),某系更换系主任后,系统必须),某系更换系主任后,系统必须修改与该系学生有关的每一个元组修改与该系学生有关的每一个元组3.插入异常(插入异常(Insertion Anomalies),该插的数据插不进去该
3、插的数据插不进去,如果如果一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入数据库。数据库。删除异常(删除异常(Deletion Anomalies),不该删除的数据不得不删不该删除的数据不得不删,如如果某个系的学生全部毕业了,果某个系的学生全部毕业了,我们在删除该系学生信息的同时,把这我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。个系及其系主任的信息也丢掉了。结论:该关系模式不是一个好的关系模式。结论:该关系模式不是一个好的关系模式。好的关系模式:好的关系模式:不会发生插入异常、删除异常、更新异常,不
4、会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。数据冗余应尽可能少。原因:由存在于模式中的某些原因:由存在于模式中的某些数据依赖数据依赖引起的引起的解决方法:通过分解关系模式来解决方法:通过分解关系模式来消除其中消除其中不合适的不合适的数据依赖数据依赖。范式化是一种科学方法,通过使用某些规则把复杂的表格结范式化是一种科学方法,通过使用某些规则把复杂的表格结构分解为简单的表格结构。构分解为简单的表格结构。可以降低表中的冗余和消除不一致和磁盘空间利用的问题。可以降低表中的冗余和消除不一致和磁盘空间利用的问题。范式用来保证各种类型的不规范和不一致性不会引入到数据范式用来保证各种类型的不规范和
5、不一致性不会引入到数据库库 First Normal Form(第一范式第一范式)Second Normal Form(第二范式第二范式)Third Normal Form(第三范式第三范式)Boyce Codd Normal Form(BC范式范式)如果表中的每个单元格都是单值的,即表不包含表,则称该表满如果表中的每个单元格都是单值的,即表不包含表,则称该表满足第一范式。足第一范式。学号姓名成绩数据库操作系统数据结构001张宏857890002刘清768089003李超907585 定义定义1:属性:属性Y函数依赖于函数依赖于X,当且仅当对每一个,当且仅当对每一个X,恰有一个,恰有一个Y的值
6、的值与之对应。属性与之对应。属性X被称为决定因子。被称为决定因子。x,y满足函数关系满足函数关系y=f(x),记作:记作:x y。含义是。含义是x函数确定函数确定y,或或y函数依赖于函数依赖于x。f判断下列判断下列Ecode Ename 是否成立?是否成立?fEcode EnameE1 MacE1 JaneE2SandraE3HenryEcode EnameE1 MacE2 macE3Sandra不成立不成立成立成立有关系模式有关系模式SC(StuID,CourseID,CourseName,Grade)判断判断主键,写出所有函数依赖关系。主键,写出所有函数依赖关系。fp判断下列函数依赖是部分
7、依赖还是完全依赖?判断下列函数依赖是部分依赖还是完全依赖?(StuID,CourseID)Grade(StuID,CourseID)CourseName定义定义2:在关系模式中,如果:在关系模式中,如果X Y,并且对于,并且对于X的任何一个真的任何一个真子集子集X,都有,都有X Y,则称则称Y完全函数依赖于完全函数依赖于X,记作:,记作:X Y。定义定义3:若:若X Y,但,但Y不完全函数依赖于不完全函数依赖于X,则称,则称Y部分函数依部分函数依赖于赖于X,记作,记作X P Y。注注:X通常为关系的码,有时也可为非主属性,通常为关系的码,有时也可为非主属性,X 通常为关系的码的通常为关系的码的
8、一个部分一个部分,Y通常为非主属性。通常为非主属性。定义定义2:在关系模式中,如果:在关系模式中,如果X Y,并且对于,并且对于X的任何一个真的任何一个真子集子集X,都有,都有X Y,则称则称Y完全函数依赖于完全函数依赖于X,记作:,记作:X Y。定义定义3:若:若X Y,但,但Y不完全函数依赖于不完全函数依赖于X,则称,则称Y部分函数依部分函数依赖于赖于X,记作,记作X P Y。定义定义2:在关系模式中,如果:在关系模式中,如果X Y,并且对于,并且对于X的任何一个真的任何一个真子集子集X,都有,都有X Y,则称则称Y完全函数依赖于完全函数依赖于X,记作:,记作:X Y。定义定义3:若:若X
9、 Y,但,但Y不完全函数依赖于不完全函数依赖于X,则称,则称Y部分函数依部分函数依赖于赖于X,记作,记作X P Y。每一个非主属性都完全依赖于码,而不是部分依赖于码。每一个非主属性都完全依赖于码,而不是部分依赖于码。示例:示例:关系模式关系模式SLC(StuID,DepName,Sloc,CourseID,Grade)Sloc为学生住处,假设每个系的学生住在同一个地方。写出所有可能的为学生住处,假设每个系的学生住在同一个地方。写出所有可能的函数依赖关系。判断其是否满足第二范式。函数依赖关系。判断其是否满足第二范式。解决方案:解决方案:(StuID,CourseID)Grade StuID De
10、pName(StuID,CourseID)DepName StuID Sloc (StuID,CourseID)Sloc DepName Slocfpp(1)插入异常插入异常假设假设StuID12001,DepNameIS,SlocN的学生还未选的学生还未选课,因课程号是主属性,因此该学生的信息无法插入课,因课程号是主属性,因此该学生的信息无法插入SLC。(2)删除异常删除异常 假定某个学生本来只选修了假定某个学生本来只选修了3号课程这一门课。现在因身体不适,号课程这一门课。现在因身体不适,他连他连3号课程也不选修了。因课程号是主属性,此操作将导致该学号课程也不选修了。因课程号是主属性,此操作
11、将导致该学生信息的整个元组都要删除。生信息的整个元组都要删除。(3)数据冗余度大数据冗余度大 如果一个学生选修了如果一个学生选修了10门课程,那么他的门课程,那么他的DepName和和Sloc值值就要重复存储了就要重复存储了10次。次。(4)修改复杂修改复杂 例如学生转系,在修改此学生元组的例如学生转系,在修改此学生元组的DepName值的同时,还可值的同时,还可能需要修改住处(能需要修改住处(Sloc)。如果这个学生选修了)。如果这个学生选修了K门课,则必须无门课,则必须无遗漏地修改遗漏地修改K个元组中全部个元组中全部DepName、Sloc信息。信息。结论:不满足第二范式的关系模式不是好的
12、关系模式。结论:不满足第二范式的关系模式不是好的关系模式。原因:原因:DepName、Sloc部分函数依赖于码。部分函数依赖于码。解决方法:解决方法:SLC分解为两个关系模式,以消除这些部分函数依赖分解为两个关系模式,以消除这些部分函数依赖 SC(StuID,CourseID,Grade)SL(StuID,DepName,Sloc)有关系模式有关系模式:Employee(Ecode,ProjCode,DepName,DeptHead,Hours),其中一个员工可以做多个项目,一个项目也可以由多个员工来做。其中一个员工可以做多个项目,一个项目也可以由多个员工来做。判断其是否满足第二范式?判断其是
13、否满足第二范式?每一非主属性都不传递依赖于关系的候选键,则关系模式为每一非主属性都不传递依赖于关系的候选键,则关系模式为第三范式。第三范式。示例:示例:2NF关系模式关系模式SL(StuID,DepName,Sloc)是否满足第三范式?是否满足第三范式?解决方案:解决方案:StuID DepNameDepName SlocStuID SlocSloc传递函数依赖于传递函数依赖于StuID,即,即SL中存在非主属性对码的中存在非主属性对码的传递函数依赖。不满足第三范式。传递函数依赖。不满足第三范式。该关系模式中,当系的住址更换了,假设这个系有该关系模式中,当系的住址更换了,假设这个系有n个人,个
14、人,则需要更换则需要更换n次。次。结论:不满足第三范式的关系模式也不能称为好的关系模式。结论:不满足第三范式的关系模式也不能称为好的关系模式。解决方法:解决方法:以消除传递函数依赖:以消除传递函数依赖:SD(StuID,DepName)DL(DepName,Sloc)SD的码为的码为StuID,DL的码为的码为DepName。Empolyee1(Ecode,ProjCode,Hours)Employee2(Ecode,DepName,DeptHead)是否满足第三范式?是否满足第三范式?在满足第三范式的前提下,如果同时满足以下三个条件,则该在满足第三范式的前提下,如果同时满足以下三个条件,则该
15、范式不是一个范式不是一个BC范式。范式。1.有多个后选键有多个后选键2.这里的多个后选键是复合键这里的多个后选键是复合键3.多个后选键之间有重叠多个后选键之间有重叠 示例:示例:Project(Ecode,Name,ProjCode,Hours)解决方案:解决方案:变成变成BCNF:1.选出一组候选键。把具有完全依赖关系的非主属性加入该表中。选出一组候选键。把具有完全依赖关系的非主属性加入该表中。2.将剩余的主属性与其依赖的主属性组合为另一个表。将剩余的主属性与其依赖的主属性组合为另一个表。在一个表格中有意义地引入冗余以改进性能被称为非范式化。在一个表格中有意义地引入冗余以改进性能被称为非范式
16、化。Orders(OrderID,ProductId,Qty)Products(ProductId,Desc,Cost)需要计算每个订单的总价,用到连接运算,而连接运算在有需要计算每个订单的总价,用到连接运算,而连接运算在有成千上万的行时,服务器会花很长时间进行处理。因此,成千上万的行时,服务器会花很长时间进行处理。因此,非范式化:非范式化:Orders(OrderID,ProductId,Qty,Cost,OrderCost)设有一教学管理数据库,其属性为:学号设有一教学管理数据库,其属性为:学号(StuID),课程号,课程号(CourseID),成绩,成绩(Grade),任课教师,任课教师
17、(TN),教师所在的系,教师所在的系(DepName)。这些数据有下列语义:。这些数据有下列语义:学号和课程号分别与其代表的学生和课程一一对应;学号和课程号分别与其代表的学生和课程一一对应;一个学生所修的每门课程都有一个成绩;一个学生所修的每门课程都有一个成绩;每门课程只有一位任课教师,但每位教师可以有多门课程;每门课程只有一位任课教师,但每位教师可以有多门课程;教师中没有重名,每个教师只属于一个系。教师中没有重名,每个教师只属于一个系。(1)试根据上述语义确定函数依赖集。试根据上述语义确定函数依赖集。(2)确定为第几范式。确定为第几范式。1.假设商业集团数据库中有一关系模式假设商业集团数据库
18、中有一关系模式R(商店编号,商品编号,数量,部门编号,负责人),其语商店编号,商品编号,数量,部门编号,负责人),其语义如下:义如下:不同商店的相同部门有着不同的部门编号;不同商店的相同部门有着不同的部门编号;每个商店的每种商品只在一个部门销售;每个商店的每种商品只在一个部门销售;每个商店的每个部门只有一个负责人;每个商店的每个部门只有一个负责人;每个商店的每种商品只有一个库存数量。每个商店的每种商品只有一个库存数量。(1)试根据上述语义确定函数依赖集;试根据上述语义确定函数依赖集;(2)R最高满足第几范式?若最高满足第几范式?若R不满足不满足3NF,试改进关系数据,试改进关系数据库设计,使它满足库设计,使它满足3NF。第一,二,三范式第一,二,三范式