一、数据库设计范式及其意义和不足
数据库的设计范式是数据库设计必须满足的规范,数据库的规范通过优化表的结构,优化将数据组织到表中的方法,使数据更加清晰简洁。 实际上,通常将一个数据库划分为两个或多个表,并定义表之间的关系以实现数据分离。 可以在一个表中添加、删除和修改字段,并通过定义的关系将其传递到数据库中的其馀表中。 与分层思想的含义非常相似。 这样可以消除出现许多错误和垃圾邮件的机会,并减少更新信息所需的工作量。
目前主要有六种范式。 是第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。 满足最低要求的是第一范式,简称为1NF。 基于第一范式进一步满足一些要求的是第二范式,简称2NF。 其他以此类推
事物往往具有多方面性,设计范例也会产生一定的麻烦。 之所以操作困难,是因为需要访问多个表才能获得所需的数据。 另外,范式越高,性能越差。 因此,使用多高的范式需要权衡,一般在项目中,使用到第三范式就足够了,性能好,数据管理容易。
二、以数据库设计三范式为例进行介绍
说明:实例采用《学校机房收费系统》《学生信息表》、《学生上下记录表》部分字段
1、第一范式1NF
定义:数据库表中的所有字段都是单个属性,不能再分开。
简而言之,所有属性都是原子项,是不可分割的。
1NF是关系模型应具备的最低条件,数据库设计不能满足第一范式,就不称为关系数据库。 也就是说,只要是关系数据库,就一定要满足第一范式。
首先看看不符合1NF的表1-1
CardNo
施登特否
StudentName
Sex
部门
卡卡斯
用户身份
用户级别
时间
001
021101
小明
男人
教育学院,心理系,一班
100
操作者
操作员
2011/10/03,09:00
此表不适合1NF是因为Department和Time字段可以重新划分,应该更改为表1-2。
CardNo
施登特否
StudentName
Sex
凯迪
美国职棒大联盟
等级
卡卡斯
用户身份
用户级别
日期
时间
001
021101
小明
男人
教育学院
心理学家
1
100
操作者
操作员
2011/10/03
09:00
2、第二范式2NF
定义:在数据库表中,非键字段不依赖于其中一个候选键字段的某些函数,也就是说,它符合第二规范化。
《注:什么是函数依赖,详见百度百科(http://baike.Baidu.com/view/40008.htm )。
如果一个表中某个字段a的值由另一个字段或字段b中的一组值确定,则a函数被称为依赖于b。 ’
2NF可以减少插入异常,删除异常,修正异常。
简而言之,一方面,第二范式必须满足第一范式,否则就不必谈第二范式。
另一方面,如果一个表的非主键信息不是由整个主键函数确定的,即,如果该表的某些部分不是主键,或者某些部分依赖主键,则通常会违反2NF。
看看满足上面1NF的表1-2
CardNo
施登特否
StudentName
Sex
凯迪
美国职棒大联盟
等级
卡卡斯
用户身份
用户级别
日期
时间
001
021101
小明
男人
教育学院
心理学家
1
100
操作者
操作员
2011/10/03
09:00
在此表中,我们发现CardNo和StudentNo可以确定StudentName、Sex、Academy、Major、class、CardCash、UserID、Date和Time。 因此,CardNo和StudentNo的组合能够作为主键。
但是,我们发现CardCash并不完全依赖CardNo和StudentNo,只有CardNo才能识别CardCash。 因为一张卡一定有卡内金额。 这引起了一部分的依赖。 一旦发生这种情况,就不满足第二范式。
修改如下。
我们还会
来看另一个例子,学生上下机记录表,会更明显些。表2-1CardNo
StudentNo
StudentName
Sex
Department
Major
class
OnDate
OnTime
OffDate
OffTime
ConsumeTime
ConsumeMoney
001
0211
小明
男
教育学院
心理系
1
2011/10/14
09:00
2011/10/14
10:00
1
2
我们看到,在这张表中,StudentName,Sex,Department,Major,class都是直接依赖于StudentNo,而不依赖与表中的其他字段,这样的设计也不符合2NF非主键信息不是由整个主键函数来决定时。
我们可以把1-2和2-1优化为:
3-1
StudentNo
CardNo
UserID
UserLevel
Date
Time
021101
001
Operator
操作员
2011/10/03
09:00
3-2
CardNo
CardCash
001
98
3-3
CardNo
OnDate
OnTime
OffDate
OffTime
ConsumeTime
ConsumeMoney
001
2011/10/14
09:00
2011/10/14
10:00
1
2
3-4
StudentNo
StudentName
Sex
Academy
Major
class
021101
小明
男
教育学院
心理系
1
3、第三范式3NF
定义:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合3NF。
我们来看上例中优化后的表3-1
StudentNo
CardNo
UserID
UserLevel
Date
Time
021101
001
Operator
操作员
2011/10/03
09:00
在表中,一个UserID能确定一个UserLevel。这样,UserID依赖于StudentNo和CardNo,而UserLevel又依赖于UserID,这就导致了传递依赖,3NF就是消除这种依赖。
我们把3-1进行优化得到:
4-1
StudentNo
CardNo
UserID
Date
Time
021101
001
Operator
2011/10/03
09:00
4-2
UserID
UserLevel
Operator
操作员
我们看到,第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性。我们为没有与表的主键关联的所有信息建立了一张新表。每张新表保存了来自源表的信息和它们所依赖的主键。
三、总结
数据库设计规范化能让我们更好地适应变化,使你能够改变业务规则、需求和数据而不需要重新构造整个系统。