专业化数据库设计



从学生信息管理系统开始就一直在不间断的与数据库打交道,从AccessSQL,从机房到重构,从数据库理论原理到软考之路。对于数据库规范化不断在强调,却又不断对这些知识从模糊到明了的无线循环。在反复的落下和拾起中,不断温故知新,每一次接触都比上一次来得更真切可感。

数据库规范化中,笔者分别从重点知识键、函数依赖、范式进行梳理,有不同意见多多指教。

一、键

1)超键:唯一确定其他属性的集合

2)候选键:剔除超键里唯一确定集合中多余属性的属性集

3)主键:候选键挑选出来的

4)外键:外来客,B的主键跑到A中当期外键。

 

举例说明:

(学号,姓名,性别)假定学生不重名:

超键 :(学号,姓名),(学号,性别),(学号,姓名,性别),均可唯一确定该字段中任何一条记录。

候选键:(学号,姓名)

主键 :学号或者姓名。候选键中打败众多候选人,脱颖而出者。 

二、函数依赖

1)函数依赖:

某一属性能确定另外一个属性就叫做函数依赖,

例如:学号能确定姓名,就说姓名函数依赖于学号

但年龄,不能确定他叫什么,故年龄和姓名之间不存在函数依赖。

2)完全函数依赖:

xy的集合能推出 z,但是将xy拆分开来,但中任意一个都无法推出z,就说明z完全依赖于xy

3)部分函数依赖:

与完全依赖相反,xy推出z,但分开之后,例如x仍可推出z,这就属于部分函数依赖。

4)传递依赖:

X推出yy推出zx推出z

三、三范式

1NF:不含可拆分属性

(学号,姓名,性别,联系方式

由于联系方式可以有QQ、飞信、手机号等等,所以联系方式就是可再拆分的属性。故上述设计不符合INF.

2NF:消除部分函数依赖。

(学号,课程号,成绩,学分

学号和课程号,一同确定学生的成绩和该科学分。拆开学号和课程号,均无法唯一确定,谁哪一个得了都少分。所以该设计符合2NF

3NF:消除传递依赖 

(学号,系别,系地址)

学号确定学生所在系别,而系别又可以确定该系地址。这就造成了传递依赖。不符合3NF可进行拆分,拆分成(学号,系别)、(系别,系地址),形成多张表来消除传递依赖。


在今后的系统设计中,任何一个项目都离不开数据库设计,所以逐渐一步一步的将意识和行为同步,不断更趋向于专业化,设计出一个健壮的后台数据库,才能位系统减负,也是设计者专业素养和智慧的体现。

 

你可能感兴趣的:(专业化数据库设计)