关系数据库设计一般方法

1。数据库需求分析
2。数据库概念结构设计(E-R)
3。数据库逻辑设计(表格形式)
4。数据库物理结构实现(创建数据库)

1。遵循数据库设计范式;
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->dno, 而dno->sno却不存在,dno->location,因此关键字sno对location

函数决定是通过传递依赖

sno->location实现的,也就是说,sno不直接决定

非主属性location。

解决问题:每个关系模式中不能留有传递依赖。解决方法:

分为两个关系

s(sno, sname,

dno)

d(dno, dname, location)

注意:关系S中不能没有外关键字 dno,否则两个关系之间失去联系