数据库面试题——范式

1、范数的定义

在设计数据库时,为了使其冗余较小、结构合理,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则被称为范数。范数是符合某一设计规则的总结。

2、实际开发中的常见范式

(1)第一范式

定义:

数据库表中的所有字段值都是不可分割的原子值。

非第一范式举例:

原因:高三年1班含有年级和班级信息,可继续拆分,为非原子信息。

改:

(2)第二范式:

定义:

数据库表中的每一列都与主键完全相关,而不能只与主键的部分相关

例子:

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),主键为属性组(学号, 课程名称),因为存在如下决定关系

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

这个数据库表不满足第二范式,因为存在如下决定关系:

(课程名称) → (学分) 

(学号) → (姓名, 年龄)

即非主属性依赖于主键的一部分(如学分只依赖于课程名称,而不是学号和课程名称)。 

 

改:

把选课关系表SelectCourse改为如下三个表: 

学生:Student(学号, 姓名, 年龄);

课程:Course(课程名称, 学分); 

选课关系:SelectCourse(学号, 课程名称, 成绩)。

就符合了第二范式。

(3)第三范式:

定义:

数据库表中的每一列和主键直接相关,而不是间接相关。也就是属性不能传递依赖于主属性。

例子:

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系

 

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系

(学号) → (所在学院) → (学院地点, 学院电话)

改:

 

把学生关系表分为如下两个表

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院, 地点, 电话)。

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

weixin_41886551

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值