数据库中的范式学习

来源:互联网 发布:网络词凉凉是什么意思 编辑:程序博客网 时间:2024/05/23 12:08

学生:学号(Sno),姓名(Sname),系名(Sdept)
一个学生只对应一个学生,一个学生只在一个系学习。当学号确定时,姓名和系名也就确定了。
属性中的这种依赖关系就类似于数学中的函数y=f(x),自变量x确定之后,相应的函数y也就唯一地确定了。
Sname=f(Son),Sdept=f(Son) Son->Sname,Sno->Sdept
教务:学号(Sno),所在系(Sdept),系主任姓名(Mname),课程号(Cno)
和成绩(Grade)
现实世界的已知事实(语义)告诉我们:
(1)一个系有若干学生,但一个学生只属于一个系。
(2)一个系各有一个正职负责人。
(3)一个学生可以选修多门课程,每门课程有若干学生选修。
(4)每个学生学习每一门课程有一个成绩。
F={Sno->Sdept,Sdept->Mname,(Sno,Cno)-Grade}
如果只考虑函数依赖这种数据依赖,我们就得到一个描述学生的关系模式:表6.1是某一个时刻关系模式Student的一个实例,即数据表。
Sno Sdept Mname Cno Grade
这个关系模式存在以下问题:
1.数据冗余太大
每一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。浪费大量的存储空间。
2.更新异常
由于数据冗余,当更新数据库中的数据时,系统需要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。比如,某系更换系主任后,必须修改与该系学生有关的每一个元组。
3.插入异常
如果一个系刚成立,尚无学生就无法把这个系及其系主任的信息存入数据库。
4.删除异常
如果某个系的学生全部毕业了,在删除该系学生信息的同时,把这个系及其系主任的信息也丢弃掉。
如果分成3个关系模式:
S(Sno,Sdept,Sno->Sdept):
Sc(Sno,Cno,Grade,(Sno,Cno)->Grade)
Dept(Sdept,Mname,Sdept->Mname)
这三个模式都不会发生插入异常,删除异常的毛病,数据的冗余也得到控制。

0 0
原创粉丝点击