您的位置:首页 > 数据库

关系数据库范式的例子

2008-01-10 04:19 316 查看

关系数据库范式的例子

楼主Patrick_DK(我有我的调调,就是这么屌)2002-12-09 18:21:17 在 MS-SQL Server / 基础类 提问
哪位能够针对下面这段关于关系数据库范式的解释,针对没个范式,给出一正一误两个简短的实际应用例子来说明呢?
比如INF,一个错误的例子是......的,它错在......,然后正确地符合INF的设计应该是......。

=========================================================================

所谓范式就是符合某一种级别的关系模式的集合。通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合。这一过程称为规范化。

1、  第一范式(1NF):一个关系模式R的所有属性都是不可分的基本数据项。
2、  第二范式(2NF):关系模式R属于第一范式,且每个非主属性都完全函数依赖于键码。
3、 第三范式(3NF):关系模式R属于第一范式,且每个非主属性都不伟递领带于键码。
4、  BC范式(BCNF):关系模式R属于第一范式,且每个属性都不传递依赖于键码。

问题点数:100、回复次数:4Top

1 楼pengdali()回复于 2002-12-09 19:25:38 得分 30

不到第一范式:
create 学生(姓名,性别年龄) ----(因为性别年龄列包括了两个属性)
第一范式不到第二范式:
create 学生(姓名,性别,年龄,语文老师名) --(因为老师列不是完全函数依赖于键码)
第二范式不到第三范式
create 学生(姓名,性别,年龄,语文老师id,数学老师id)
create 老师(老师id,老师名,老师年龄)
第三范式不到第四范式
create 学生(学生id,姓名,性别,年龄,籍贯)
create 关系表(学生id,老师id)
create 老师(老师id,老师名,老师年龄,籍贯)
第四范式
create 学生(学生id,姓名,性别,年龄,籍贯id)
create 关系表(学生id,老师id)
create 老师(老师id,老师名,老师年龄,籍贯id)
cteate 籍贯表(id,籍贯)
---------
好不容易才打完。
:)
多看看书吧!Top

2 楼tj_dns(愉快的登山者)回复于 2002-12-19 12:14:12 得分 10

总结,每个范式至少包括表数:
第一范式:一个表
第二范式:两个表
第三范式:三个表
第四范式:四个表Top

3 楼z5wjz(z5wjz)回复于 2002-12-19 13:02:05 得分 0

学习.Top

4 楼CoolAbu(阿卜-Never Stop(★★★★))回复于 2002-12-20 13:43:33 得分 60

Patrick_DK (我向西 引北风 晒成一身古铜) 好像是Java版的版主吧??;)我记得你的Java很不错。

第一范式:消除组中的重复,也就是说列中是否存储了其他列中的信息
第二范式:消除部分依赖列,也就是说是否有依赖于一部分主键的列
第三范式:消除非依赖列,是否有依赖于非主键的列

例如:

学生信息表

学生ID,姓名,地址,城市,邮政编码,所在年级,性别,参加课程,课程级别,课程ID,名称,描述,教师ID,教

师姓名,时间表,地点,先决课程

如果这么多字段在同一个表里,那么这种设计会被认为没有正规化,这里有很多重复的信息,为了把数据库设计转化

为第一范式,需要把信息分成两个表,并在两个表之间建立关系,如下:

学生表
学生ID,姓名,地址,城市,邮政编码,所在年级,性别

学生课程表
学生ID,课程ID,名称,描述,教师ID,教师姓名,时间表,地点

通过把学生从课程中分离,我们可以消除由不同的逻辑组引入的重复,我们必须满足消除信息重复的目标。接下来,

从第一范式到第二范式,我们需要消除表中仅仅部分依赖主键的列,这些列应该被分割到不同的表中。在学生课程表

中,许多列仅仅依赖于课程ID,而不依赖于学生ID,这个表的主键是学生ID+课程ID,因此把这个表分成两个表,如下



学生课程表
学生ID,课程ID,课程级别

课程表
课程ID,名称,描述,教师ID,教师姓名,先决课程,时间表,地点

既然对主键的部分依赖已经消除,数据库就已经满足第二范式了。为了进一步把数据库转化为第三范式,需要把表中

对构成主键的列的不依赖部分分离出去,教师姓名依赖于教师ID,而不依赖于课程ID,索引,这些列应该被分离以形

成一个新表,如下:

教师表
教师ID,教师姓名

最终的课程表如下
课程ID,名称,描述,教师ID,时间表,地点

一旦所有的数据库的设计依赖性都被消除,也就满足了第三范式。

不一定每种数据库设计都要达到第三范式,因为达到第三范式在查询的时候进行大量的连接操作,所以要针对你的情况设计你的数据库。

都是我一个字一个字敲的,好累,希望对你有些帮助,;)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: