您当前的位置: 首页 >  数据库

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

第十章 数据库三范式

梁云亮 发布时间:2021-07-12 20:41:48 ,浏览量:2

概念

• 必须保证数据库设计的合理性 ​ 数据库设计关系整个系统的架构,关系到后续开发效率和运行效率 ​ 数据库的设计主要包含了设计表结构和表之间的联系 • 如何是合理数据库 ​ 结构合理 ​ 冗余较小 ​ 尽量避免插入删除修改异常 • 如何才能保证数据库设计水平 ​ 遵循一定的规则 ​ 在关系型数据库中这种规则就称为范式 • 什么是范式(NF= NormalForm) ​ 范式是符合某一种设计要求的总结。 ​ 要想设计一个结构合理的关系型数据库,必须满足一定的范式。

第一范式(1NF)

字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式 数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。

• 要求

  • 最基本的范式
  • 数据库表每一列都是不可分割基本数据项,同一列中不能有多个值
  • 简单说就是要确保每列保持原子性
  • 第一范式的合理遵循需要根据系统的实际需求来定

• 示例

  • 用户表(用户名,家庭地址)
  • 用户表(用户名,省,城市,详细地址)
  • 系(系名称,系主任,系高级职称人数)
  • 系(系名称,系主任,系教授人数,系副教授人数)
第二范式(2NF):

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。 要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键或主键。

第二范式(2NF)要求实体的属性完全依赖于外键。所谓完全依赖是指不能存在仅依赖主键一部分的属性,如果存在,那么这个属性和主键的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主键。

• 要求

  • 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
  • 即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

• 示例

  • 学号和课程编号作为联合主键
  • 课程名称只依赖于课程编号,而和学号没有关系 在这里插入图片描述 • 解决
  • 提取出学生表
  • 提取成课程表
  • 提取选课表,存放选课记录

在这里插入图片描述

第三范式:

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主键信息。 所以第三范式具有如下特征: 1,每一列只有一个值 2,每一行都能区分。 3,每一个表都不包含其他表已经包含的非主键信息。 例如,帖子表中只能出现发帖人的id,而不能出现发帖人的id,还同时出现发帖人姓名,否则,只要出现同一发帖人id的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。

• 要求

  • 确保数据表中的每一列数据都和主键直接相关,而不能间接相关
  • 属性不依赖于其他非主属性。

• 示例1:学生班级表

学号(主键)学生姓名班级编号班级名称班级信息023145张三9876543班特招班023146李四9876543班特招班023147王五9876554班普通班023258赵六9876543班特招班

完善之后的方案:

学号(主键)学生姓名班级编号023145张三987654023146李四987654023147王五987655023258赵六987654 班级编号(主键)班级名称班级信息9876543班特招班9876554班普通班

• 示例2:订单明细表

编号(主键)图书id图书名称价格作者出版社出版日期数量0231451精通Java60.00张三清华出版社200710231462Oracle65.00李四机械出版社200910231473JSP87王五电子出版社201430232581精通Java60.00张三清华出版社200720232592Oracle65.00李四机械出版社20093

完善之后的方案:分割成图书表和订单表两种表

图书id图书名称价格作者出版社出版日期1精通Java60.00张三清华出版社20072Oracle65.00李四机械出版社20093JSP87王五电子出版社20144Struts256赵六清华出版社2005 编号(主键)图书id数量0231451102314621023147330232582202325923 范式的优缺点

• 优点

  • 结构合理
  • 冗余较小
  • 尽量避免插入删除修改异常

• 缺点

  • 性能降低
  • 多表查询比单表查询速度慢
  • 数据库的设计应该根据当前情况和需求做出灵活的处理。
  • 在实际设计中,要整体遵循范式理论。
  • 如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。

• 示例:

​ 比如经常购物车条目的中除了条目编号,商品编号,商品数量外,可以增加经常使用的商品名称,商品价格等

图书表

图书id图书名称价格作者出版社出版日期1精通Java60张三清华出版社20072Oracle宝典65李四机械出版社20093JSP87王五电子出版社20144Struts256赵六清华出版社2005

订单表中增加冗余列图书名称、价格,以空间换时间。

编号(主键)图书id图书名称价格数量0231451精通Java6010231462Oracle宝典6510231473JSP8730232581精通Java602 小结

• 范式是指导数据设计的规范化理论,可以保证数据库设计质量

• 第一范式:字段不能再分

• 第二范式:不存在局部依赖

• 第三范式:不含传递依赖(间接依赖)

• 使用范式可以减少冗余,但是会降低性能

• 特定表的的设计可以违反第三范式,增加冗余提高性能

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0505s