跳至主要內容

1.24 数据库范式 🎉

刘春龙...大约 3 分钟数据库mysql

1.24 数据库范式 🎉

范式是符合某一种设计要求的总结

在数据库中表的设计,必须保证其合理性,数据库表的设计关系整个系统的架构,关系到后续的开发效率和运行效率

关系型数据库有六种常见范式:

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF)
  • 巴斯-科德范式(BCNF)
  • 第四范式(4NF)
  • 第五范式(5NF)

在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以此类推。范式越高,设计质量越高,在现实设计中也越难实现

一般数据库设计,达到第三范式就足够了

数据库范式中的概念

  • 元组:可以理解为一张表中的每条记录,也就是每一行数据。
  • 属性:可以看作是“表的一列”。
    • 主属性:
      • 在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性。
      • 例如:在关系——学生(学号,姓名,年龄,性别,班级)中,主属性是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。
    • 非主属性:
      • 不包含在候选码中的属性称为非主属性,相对于主属性来定义的。

第一范式(1NF) 💎

最基本的范式,是其他范式的基础

数据库表每列都是不可分割的基本数据项,同一列中不能有多个值,

确保每列保持原子性

根据第一范式设计表

第一范式存在的问题

  • 数据冗余
  • 插入数据异常
  • 修改数据复杂
  • 删除异常

第二范式(2NF) 💎

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

根据第二范式设计表

第二范式存在问题

  • 插入异常
  • 删除异常

第三范式(3NF) 💎

必须满足第二范式

确保数据表中的每一列数据都和主键直接相关,而不能间接相关

根据第三范式设计表

符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。

数据库范式总结 💎

相关信息

数据库设计范式优点:

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

数据库设计范式缺点:

  • 性能降低,多表查询比单表查询速度慢

在实际设计中,要整体遵循范式理论

如果在某些特定的情况下还死死遵循范式也是不可取的,

因为可能降低数据库的效率,此时可以适当增加冗余而提高性能

第一范式(1NF):字段不能再分

第二范式(2NF):不存在部分依赖

第三范式(3NF):不存在间接依赖

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

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

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7