数据库中三范式的理解

来源:互联网 发布:人大报刊资料数据库 编辑:程序博客网 时间:2024/04/23 19:52
  概念是用老师的,加上我自己的例子和分析!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1583690
1、第一范式:
1.1、一个列不能有多个值
1.2、一个表不能有重复行
例如下表:
这个表违反了第一范式,姓名为张三的人,年龄字段不是唯一值
姓名为李四的记录比其他记录多出一个字段也是错误的
有两条相同的记录也是错误的
姓名
性别
年龄
 
张三
21,22(错误1)
 
李四
22
26(错误2)
王五
26
(错误3)
王五
26
 
 
2、第二范式:
2.1、普通字段完全依赖于主键字段
 
例如下表:
学生选课表:主键(学号)
首先我录入的10条记录是满足第一范式的
    不满足第二范式(普通字段完全依赖于主键字段),因为学院地点、学院电话两个普通字段
并不是完全依赖于主键,而是依赖于所在学院字段。
学号
姓名
年龄
所在学院
学院地点
学院电话
101
XM1
20
计算机学院
教学一幢
02888888888
102
XM2
21
计算机学院
教学一幢
02888888888
103
XM3
19
计算机学院
教学一幢
02888888888
104
XM4
22
计算机学院
教学一幢
02888888888
105
XM5
21
计算机学院
教学一幢
02888888888
106
XM6
22
计算机学院
教学一幢
02888888888
107
XM7
23
计算机学院
教学一幢
02888888888
108
XM8
20
计算机学院
教学一幢
02888888888
109
XM9
18
计算机学院
教学一幢
02888888888
110
XM10
25
外语学院
教学二幢
02899999999
 
 
3、第三范式:
3、普通字段不依赖于其它普通字段,并且相互独立。
例如下表:
学生关系表:主键(学号,课程名称)
我认为是违反了第三范式,(普通字段不依赖于其它普通字段,并且相互独立。
学分依赖于课程名称,也依赖于成绩,应该考虑成绩是否符合要求,取得学分。
应该增加一个字段,说明实际获得的学分是多少,还有就是增加考试日期字段
学号
姓名
年龄
课程名称
成绩
学分X
101
XM1
20
计算机基础
80
2
102
XM2
21
计算机基础
68
2
103
XM3
19
计算机基础
80
2
104
XM4
22
计算机基础
59
2
105
XM5
21
计算机基础
70
2
106
XM6
22
计算机基础
64
2
107
XM7
23
计算机基础
87
2
108
XM8
20
计算机基础
68
2
109
XM9
18
计算机基础
78
2
110
XM10
25
英语
87
2.5
 
2、口诀:两个不能,两个依赖
3、各范式的使用范围
3.1、必须保证数据是有效的,不重复的。所以第一范式必须满足。
3.2、一个表中有多种事物时,尽量保证两个表只保存一种事物的编码,两种事物的具体属性保存在各自的表中。有时为了查询的效率,可以适当冗余常用字段。所以第二范式可以适当违反。
3.3、一个表中只有一种事物,但有附加属性或计算列,这些列可以分离出形成新的表,也可以不分离。所以第三范式也可以适当违反。
4、范式级别的考虑:
4.1、范式越高,信息分类越细,表越多,信息冗余越少,但查询关联也就越多,查询速度也就越慢。
4.2、所以,在数据库设计中,我们需要在严格遵从范式和系统性能之间取得一种平衡。在大多数情况下,只需要满足前三个范式就可以了。
 
原创粉丝点击