关系数据库范式的例子

Patrick_DK 2002-12-09 06:21:17
哪位能够针对下面这段关于关系数据库范式的解释,针对没个范式,给出一正一误两个简短的实际应用例子来说明呢?
比如INF,一个错误的例子是......的,它错在......,然后正确地符合INF的设计应该是......。

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

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

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


...全文
480 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CoolAbu 2002-12-20
  • 打赏
  • 举报
回复
Patrick_DK (我向西 引北风 晒成一身古铜) 好像是Java版的版主吧??;)我记得你的Java很不错。

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

例如:

学生信息表

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

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

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

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

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

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


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

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

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



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


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

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

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

成一个新表,如下:

教师表
教师ID,教师姓名

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

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


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

都是我一个字一个字敲的,好累,希望对你有些帮助,;)
愉快的登山者 2002-12-19
  • 打赏
  • 举报
回复
总结,每个范式至少包括表数:
第一范式:一个表
第二范式:两个表
第三范式:三个表
第四范式:四个表
z5wjz 2002-12-19
  • 打赏
  • 举报
回复
学习.
pengdali 2002-12-09
  • 打赏
  • 举报
回复
不到第一范式:
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,籍贯)
---------
好不容易才打完。
:)
多看看书吧!

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧