数据库情结之三范式
说完了图情结,不得不说的还有数据库情结。
不论个人采用分层重构系统还是合作开发,都对数据库进行了改造。不得不承认,原来的系统对重构的影响力是比较强的。
在数据库的重构之前,范式是必须看的。目前关系数据库有六种范式,:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
一、第一范式:
要求无重复的列,意思就是指数据库表的每一列都是不可分的基础数据项,同一列中不能有多个值。例如:几年几班,这应该是两个字段,而不应该放到一个字段里面。如果不满足第一范式,那么所建数据库就不是关系数据库。
例如:
二、第二范式:
要求完全依赖于主键(消除部分子函数依赖),说简单点就是属性完全依赖主键。
第二范式是在第一范式基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据表中的每个记录或行必须可以被唯一地区分。为实现区分通常要为表加上一个列,以存储各个记录的唯一标识。例如在学生表里面的学号列,在上机记录中的序号列。我感觉其实就是主键。
并且要求记录的属性完全依赖主关键字,就是说这个属性不能即依赖主关键字,还依赖别的关键字。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的表。
例如:
在这里面,学号和课程名称确定一条记录,但是学分只与课程名称有关,所以不满足第二范式,应写为:
(个人感觉第二范式是针对多字段组合主键用的)
三、第三范式:
要求属性不能依赖除主键外的属性。说简单点,就是要求一个数据库表中不包含已在其他表中包含的非主键信息。例如:在卡表里面,之包含一个学号字段,对于学生的专业、年级等信息完全没有。
在第一个表中,姓名、性别等是由学号唯一确定的,所以不满足第三范式,应写为:
数据库的范式,是一种参照,在设计数据库的时候,完全按照三范式设计的人,一定没有经过大脑思考,但是完全不知道三范式而去设计数据库,这个嘛,自己掂量一下吧。
原文地址:http://blog.csdn.net/jianxin1009/article/details/7303849