关系数据库设计一般方法 范式及完整性
关系数据库设计一般方法
1。数据库需求分析
2。数据库概念结构设计(E-R)
3。数据库逻辑设计(表格形式)
4。数据库物理结构实现(创建数据库)
2。关系完整性
实体完整性:一个基本关系通常对应现实世界的一个实体集
参照完整性:现实世界中实体之间往往有某种内在联系
用户自定义完整性:用户自定义的约束条件
关系数据库设计之时要遵守一定的规则的。尤其是数据库设计范式,现简单
介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)至于BCNF,第四范式及第五范式要求就更高了,所以就不介绍了。
第一范式(1NF):在关系模式R中的每一个具体关系 r 中,如果每个属性值都是不可再分的最小数据单位,则称 R 是第一范式的关系。
例:
如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家庭电话号码),范式成为1NF有三种方法:
一是:重复存储职工号和姓名。这样,关键字只能是电话号码。
二是:职工号为关键字,电话号码分为单位电话和住宅电话两个属性
三是:职工号为关键字,但强制每条记录只能有一个电话号码。
以上方法第一种不可取,根据实际情况选取二,三种。
第二范式(2NF):如果关系模式 R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系 R 是属于第二范式。
例:
选课关系 SCI(sno, cno, grade, credit)其中sno(学号),cno(课程号),grade(成绩),credit(学分)
由以上关系,关键字为组合关键字(sno,cno)在应用中使用以上关系模式
有以有问题:
1。数据冗余:假设同一门课由N多个学生选修,学分就重复N次。
2。更新异常:若调整了某课程的学分,相应元组credit值都得更新,有可能出现同一门课学分不同。
3。插入异常:如计划开新课,由于没有人选修,没有学号关键字,只能等有人选修才能把课程和学分存入
4。删除异常:若学生已经毕业,从当前数据库删除选修记录,某些课程新生尚未选修,则此门课程用及学分记录无法保存。原因:非关键属性credit仅函数依赖于 cno,也就是 credit部分依赖组合关键字(sno, cno)而不是完全依赖
解决方法:
分成两个关系模式
sc1(sno, cno, grade)c2(cno, credit)
新关系包括两个关系模式,它们之间通过 sc1 中的外关键字(cno)相联系,需要时再进行自然连接,恢复了原来的关系.
第三范式(3NF):如果关系模式R(U, F)中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系 R 属于第三范式
例:
s1(sno, sname, dno, dname, location)各属性分别代表学号,姓名,所在系,系名称,系地址。
关键字 sno 决定各个属性。
由于是单个关键字,没有部分依赖的问题,肯定是 2NF。但是这关系肯定有大量的冗余,
有关学生所在的几个属性 dno,dname,location将重复存储,插入,删除和修改时也将产生类似上例的情况
原因:关系中存在传递依赖造成。即:
函数决定是通过传递依赖 sno->location实现的,也就是说,sno不直接决定
非主属性location。
解决问题:每个关系模式中不能留有传递依赖。解决方法:
分为两个关系s(sno, sname, dno)
d(dno, dname, location)
注意:关系S中不能没有外关键字 dno,否则两个关系之间失去联系
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。