数据库原理和应用-5

3.26

一、 规范化

1.规范化:

用来判断我们设计的关系达到了何种规范模式
2.数据库设计不当:
插入异常,删除异常,修改(更新)异常,冗余过大
3.函数依赖(用来找候选码):
已知属性X的值,能唯一的确定属性Y的值,则称属性X决定属性Y,或属性Y依赖与属性X,记做X->Y。
4.完全函数依赖
(如果X->Y,但是对于X的任意真子集都不具体这个性质,则称X->Y是完整函数依赖。举例: (学号,课程号) ->成绩)和部分函数依赖(与完全函数依赖相对
举例:
(学号,课程号) ->姓名,部分函数依赖于学号)
5.传递函数依赖
(如果X->Y,反过来不成立,但是Y->Z, 则称X->Z是 传递函数依赖)
举例:学号->学院,学院->院长,则学号->院长是一个传递函数依赖。
举例:职工(职工号,职工名,部门,部门电话)职工号->部门电话就是一个传递函数依赖。

2. 范式

规范模式,关系模式达到了何种规范程度

1.范式的种类
**1NF:**属性不可再分,部分函数依赖
**2NF:**首先满足1NF,没有对主键的部分函数依赖
消除了非主属性对码的部分函数依赖的1NF的关系模式

学籍(学号、姓名、性别、学院、院长、课程号、课程名称、任课老师)
主键:学号、课程号

部分函数依赖:(学号,课程号)→姓名/性别/学院/院长
部分依赖于课程号:(学号,课程号)→课程名称
完全函数依赖:(学号,课程号)→成绩/任课老师
举例:
规范成属于2NF的关系模式:
部分函数依赖单拎出来形成新的关系模式:
学生(学号,姓名,性别,学院,院长)
课程(课程号,课程名称)
授课(学号,课程号,成绩,任课教师)

注意:
规范成多个关系模式时,不是简单地切分,要保留关系模式的主键

** 3NF:**首先要满足2NF,没有对主键的传递函数依赖

学籍(学号、姓名、性别、学院、院长、课程号、课程名称、任课老师)
主键:学号、课程号

部分函数依赖:(学号,课程号)→姓名/性别/学院/院长
部分依赖于课程号:(学号,课程号)→课程名称
完全函数依赖:(学号,课程号)→成绩/任课老师
举例:
规范成属于3NF的关系模式:
传递函数依赖单拎出来形成新的关系模式:
学生(学号,姓名,性别,学院)
学院(学院,院长)
课程(课程号,课程名称)
授课(学号,课程号,成绩,任课教师)

练习:
①已知关系R(A,B,C)存在函数依赖集F{A,B->C,A->C}则关系R的主键是( ),R属于( )。D (部分函数依赖)
A.主键是A,R属于1NF。
B.主键是A,R属于2NF。
C.主键是A+B,R属于2NF。
D.主键是A+B,R属于1NF。

②关系R有属性X、Y、Z,下面说法错误的是( C )。
A.若X→Y且X→Z则必有X→(Y,Z)
B.X→(Y,Z),则X→Y且X→Z
C.若(X,Y)→Z,则必有X→Z,Y→Z
(学号,课程号)→姓名,课程号不能决定姓名
D.若X→Z且Y→Z则必有(X,Y)→Z

③简答题:有关系模式 学生(学号,姓名,性别,班号,班级,学院,院长)
(1)写出所有的函数依赖
(2)判断属于第几范式,为什么?
(3)如果不是第三范式,请规范成第三范式。
答:
(1)学号→姓名 学号→性别 学号→班号
班号→班级 学号→班级 班号→学院 学号→学院 学号→院长
主键(决定所有):学号
(2)属于第二范式
因为:首先该关系模式属性不可再分,属于1NF,
其次根据函数依赖判断候选码是学号,不存在对主码的部分函数依赖,所以不属于2NF,
然后存在 学号→班级,学号→院长的传递函数依赖,不属于3NF,所以属于2NF。

!!!!!注意:
分解不是简单地切成成几部分的过程,需要保留每个关系模式的主键,保留原来所有函数的依赖关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值