当前位置: 首页 > news >正文

什么是三大范式, 为什么要有三大范式, 什么场景下不用遵循三大范式

什么是三大范式

三大范式是数据库设计遵循的规范, 分别是:

  • 第一范式(1NF):表中每列不可再拆分
  • 第二范式(2NF):1NF基础上,要求非主键列完全依赖于主键,不能只依赖于主键的一部分(针对联合主键)
  • 第三范式(3NF):2NF基础上, 要求任何非主键列必须直接依赖于主键,不能是传递依赖

为什么要有三大范式

减少数据冗余,保持数据一致性和完整性。

1NF

例: 有一个学生表,address字段的值为江苏省南京市雨花台区XX街道XX小区

idnameaddress
1张三江苏省南京市雨花台区XX街道XX小区

此时如果需要把学生按省,市,区分类, 无法满足需求;这里可以把address字段可以继续拆分为province, city, area, address,实现1NF

idnameprovincecityareaaddress
1张三江苏南京雨花台XX街道XX小区

2NF

例: 有一个学生课程表

学号(主键)课程(主键)教师姓名成绩学生姓名专业
1001C语言张三80李四金融工程
1002JAVA王五66王二计算机科学与技术

从上表看出, 教师姓名,成绩依赖于学号和课程,但学生姓名和专业仅依赖于学号,不依赖于课程,不符合2NF
可以拆成如下两张表,实现2NF

学号(主键)课程(主键)教师姓名成绩
1001C语言张三80
1002JAVA王五66
学号(主键)学生姓名专业
1001李四金融工程
1002王二计算机科学与技术

3NF

例:有个学生表(学号,姓名,学院,学院地点,学院电话), 学号为主键。
这个数据库符合2NF,但不符合3NF,因为(学院地点,学院电话)依赖于学院,需要把表拆分为如下两个表,以符合3NF:

  • 学生表(学号,姓名,学院)
  • 学院表(学院,学院地点,学院电话)

什么场景可以不遵循三大范式

为了提高查询效率,有时需要适当保留冗余数据,不必严格遵循三大范式
例: 订单表中添加"总金额"字段,"总金额"可以通过"数量"乘以"单价"得到,是冗余字段,不符合3NF。但是增加这个冗余字段,可以提高查询速度。

参考

https://juejin.cn/post/6844904184865619982


http://www.mrgr.cn/news/64805.html

相关文章:

  • TypeError: can‘t multiply sequence by non-int of type ‘float‘
  • Visitor 访问者模式
  • Django ORM详解:事务与F、Q函数使用
  • Java Iterator 实现杨辉三角
  • ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验
  • 红黑树的平衡之舞:数据结构中的优雅艺术
  • 《GBDT 算法的原理推导》 11-15更新决策树的叶子节点值 公式解析
  • Linux内核编程(十八)ADC驱动
  • 深入解析RSA算法:加密与安全性
  • Spring DispatcherServlet详解
  • 在vue中 什么是slot机制,如何使用以及使用场景详细讲解
  • JWT 是什么?JWT 如何防篡改?JWT 使用【hutools 工具包】
  • python爬虫之JS逆向入门,了解JS逆向的原理及用法(18)
  • 003 配置网络
  • springBoot动态加载jar,将类注册到IOC
  • 【数据分析】怎么提升GMV
  • df_new_last.iloc[:,-1]与df_new_last.iloc[:,:-1]
  • Redis 的使⽤和原理
  • IT运维的365天--018 如何在内网布置一个和外网同域名的网站,并开启SSL(https访问),即外网证书如何在内网使用
  • Kubernetes中常见的volumes数据卷
  • SPI协议——笔记
  • cangjie仓颉程序设计-数据结构(四)
  • [LeetCode] 面试题08.01 三步问题
  • 企业实现数字化转型需要考虑的方面?
  • LeetCode题练习与总结:超级次方--372
  • ‌SSB在时域上的特征