数据库设计的三大范式介绍

学习笔记 马富天 2020-07-16 23:28:16 7 0

【摘要】什么是范式(NF= NormalForm)?如果要想设计一个结构合理的关系型数据库,必须满足一定的范式。范式是符合某一种设计要求的总结。

范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。但是操作困难,因为需要联系多个表才能得到所需要的数据,而且范式等级越高性能就会越差。权衡是否使用更高范式是比较麻烦的,一般在项目中,用的最多的也就是第三范式,用到第三范式也就足够了,性能好而且方便管理数据。

目前主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称 1NF。在第一范式的基础上进一步满足一些要求的为第二范式,简称 2NF。其余以此类推。

本文主要分别对第一范式、第二范式、第三范式进行讲解。

(一)第一范式

第一范式:保证列的原子性,保证列不可再分。

1NF 是关系模式应具备的最起码的条件,如果数据库设计不满足第一范式,那就不称为关系型数据库。关系数据库设计研究的关系范式化是在 1NF 上的。

举例说明:

错误的表结构设计:

  1. 学生编号-姓名-性别-联系方式
  2. 100001-张三-男-18806189087,北京市朝阳区双井街道

问题:以上的表不符合第一范式,联系方式字段可以再拆分,变更为正确的是:

  1. 学生编号-姓名-姓名-电话-详细住址
  2. 100001-张三-男-18806189087-北京市朝阳区双井街道

(二)第二范式

第二范式,首先要满足第一范式,其次每个非主属性完全依赖于主键。也就是说每个非主属性是由整个主键函数决定的,不能由主键的一部分来决定。第二范式是消除部分依赖。

举例说明:

错误的表结构设计:

  1. 学生-课程-课程教师-教室-教材

这里通过(学生,课程)可以确定课程教师、教材、教师,但是教材并不完全依赖于(学生、课程),只拿出(课程)就可以确定教材,这里就叫做不完全依赖(也称为部分依赖),出现这种情况,就不满足第二范式。

正确的变更为如下两张表:

  1. 表1:学生-课程-课程教师-教室-教材
  2. 表2:课程-教材

(三)第三范式

在满足第二范式的基础上,不存在传递依赖。也就是说如果非主属性之间存在了依赖,就会存在传递依赖,这样就不满足传递依赖。

举例说明:

  1. 学生-课程-教师-教师职称-教室

上表中(学生,课程)能够确定教师、教师职称、教室,满足了第二范式,但教师职称可依赖于教师,这里就出现了传递依赖。第三范式主要就是消除传递依赖。

变更为正确的是:

  1. 表1:学生-课程-教师-教室 
  2. 表2:教师-教师职称

(四)总结(面试中可能会被问到的问题)

1、什么是数据库范式?

2、数据库范式有哪些?

3、第一范式满足什么条件?(属性不可再拆分)

4、第二范式满足什么条件?(主键唯一)

5、第三范式满足什么条件?(不存在传递依赖)

版权归 马富天PHP博客 所有

本文标题:《数据库设计的三大范式介绍》

本文链接地址:http://www.numberer.net/452.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 Neo4j - CQL 查询语句的简介【纯个人总结】 》 下一篇《 使用 ctrl c 中断 python 程序时如何做到优雅的退出 》

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多