概念是用老师的,加上我自己的例子和分析!
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、所以,在数据库设计中,我们需要在严格遵从范式和系统性能之间取得一种平衡。在大多数情况下,只需要满足前三个范式就可以了。