当前位置:网站首页>数据库设计:范式与反范式
数据库设计:范式与反范式
2020-11-08 21:14:00 【讓丄帝愛伱】
- 三范式
第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);
第 一范式和第二范式在于有没有分出两张表,
第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表,
第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)。
总结:
第1范式:每个表中都有1列,并且该列是不可拆分的最小单元 无重复的列
第2范式:1张表只描述一件事情 属性完全依赖于主键
第3范式:用外键做表的关联 直接依赖而不是间接(传递)依赖
要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
简而言之,第三范式就是属性不依赖于其它非主属性。 也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求
- 反范式
反范式允许表中存在传递函数依赖
范式与反范式的比较:
查询记录时,范式模式往往要进行多表连接,而反范式只需在同一张表中查询,当数据量很大的时候,显然反范式的效率会更好。
反范式有很多重复的数据,会占用更多的内存,查询时可能会较多地使用DROUP BY或DISTINCT等耗时耗性能的关键字。
当要修改更新数据时(例如修改Accounting部门的领导为Russell),范式更灵活,而反范式要修改全部的数据,且易出错。
…
总结:关于范式与反范式的比较还有很多很多,二者各有各的好处,在实际开发中应该根据需要合理地混用不同的模式,最大程度地结合发挥各自的优点。
版权声明
本文为[讓丄帝愛伱]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/2425659/blog/4708340
边栏推荐
- 寻找性能更优秀的不可变小字典
- RSA非对称加密算法
- Infix expression to suffix expression
- Introduction and application of swagger
- Dynamic ReLU:微软推出提点神器,可能是最好的ReLU改进 | ECCV 2020
- 文件拷贝的实现
- 数组初相识
- 寻找性能更优秀的动态 Getter 和 Setter 方案
- [cloud service] there are so many ECS instances on alicloud server, how to select the type? Best practice note
- Wechat applet related
猜你喜欢
采用注解+拦截器的方式进行异步执行的实现方式
线程池运用不当的一次线上事故
Flink series (0) -- Preparation (basic stream processing)
Suffix expression to infix expression
Dynamic query processing method of stored procedure
MongoDB增删改查操作
Flink系列(0)——准备篇(流处理基础)
Solve the failure of go get download package
VirtualBox install centos7
200人的程序员面试经验,都在这里了
随机推荐
Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
选择排序
Iterm2 configuration and beautification
使用基于GAN的过采样技术提高非平衡COVID-19死亡率预测的模型准确性
Python应用场景多不多?
Implementation of warehouse management system with ABP (net core) + easyUI + efcore
深拷贝
Constructors and prototypes
Iptables from introduction to mastery
给大家介绍下,这是我的流程图软件 —— draw.io
动态规划之子序列问题解题模板
【云服务】阿里云服务器ECS实例规格那么多,如何选型?最佳实践说明
Decorator (1)
寻找性能更优秀的不可变小字典
Creating a text cloud or label cloud in Python
Classical dynamic programming: longest common subsequence
Swagger介绍和应用
国内三大云数据库测试对比
Django之简易用户系统(3)
MongoDB数据库