当前位置:网站首页>数据库设计三大范式
数据库设计三大范式
2022-07-26 18:38:00 【知其黑、受其白】
阐述
目前关系数据库有六种范式:
第一范式(1NF)、
第二范式(2NF)、
第三范式(3NF)、
巴斯-科德范式(BCNF)、
第四范式(4NF)、
第五范式(5NF,又称完美范式)。
而通常我们用的最多的就是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
也就是本文要讲的“三大范式”。
第一范式(1NF)
要求数据库表的每一列都是不可分割的原子数据项。
举例说明:

在上面的表中,“家庭信息” 和 “学校信息” 列均不满足原子性的要求,故不满足第一范式,调整如下:

可见,调整后的每一列都是不可再分的,因此满足第一范式(1NF);
第二范式(2NF)
在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
举例说明:

在上图所示的情况中,同一个订单中可能包含不同的产品,因此主键必须是 “订单号” 和 “产品号” 联合组成,
但可以发现,产品数量、产品折扣、产品价格与 “订单号” 和 “产品号” 都相关,但是订单金额和订单时间仅与 “订单号” 相关,与 “产品号” 无关,
这样就不满足第二范式的要求,调整如下,需分成两个表:

第三范式(3NF)
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
举例说明:

上表中,所有属性都完全依赖于学号,所以满足第二范式,但是 “班主任性别” 和 “班主任年龄” 直接依赖的是 “班主任姓名”,而不是主键 “学号”,所以需做如下调整:

这样以来,就满足了第三范式的要求。
ps:如果把上表中的班主任姓名改成班主任教工号可能更确切,更符合实际情况,不过只要能理解就行。
总结
第一范式的关键词是列的原子性
第二范式的关键词是不能包含部分依赖
第三范式的关键词是不能包含传递依赖。
边栏推荐
- 2022/07/26 学习笔记 (day16) 抽象与接口
- 线性代数第3章向量
- 首席信息官引导业务变革的指南
- Software process that testers must know
- Linear algebra Chapter 4 linear equations
- "Weilai Cup" 2022 Niuke summer multi school training camp 2
- LeetCode每日一练 —— 27. 移除元素
- "Weilai Cup" 2022 Niuke summer multi school training camp 1
- 那些年解的疑难性能问题 --- ext4碎片整理
- File depth monitoring strategy
猜你喜欢

IJCAI2022开会了! Brescia等《证据推理和学习》教程,阐述其最新进展,附96页Slides

conda+pytorch环境教程

用低代码搭建千人食品制造企业高效管理系统案例分析

Pyqt5 rapid development and practice 3.6 packaging resource files

测试人员必须知道的软件流程

Pychart loads CONDA to create a pytorch virtual environment and reports an error. It is normal on the CONDA command line

高防服务器和高防IP的区别

Description of MDM separation of powers and classification and grading authority

Linear algebra Chapter 3 vector

C # create and read dat file cases
随机推荐
带你熟悉云网络的“电话簿”:DNS
Will 3R balanced financial products have risks? Is it risky?
Bug 反馈:同步失败
6种方法帮你搞定SimpleDateFormat类不是线程安全的问题
Configure the server environment
Configure the server environment
聊聊如何用 Redis 实现分布式锁?
“蔚来杯“2022牛客暑期多校训练营1
Leetcode daily practice - 88. Merge two ordered arrays
Pads draw 2.54mm row needle
"Weilai Cup" 2022 Niuke summer multi school training camp 2
torch.unsqueeze() squeeze() expand() repeat()用法及比较
彻底关闭win10自动更新
Data Lake -- concept, characteristics, architecture and case overview
Pycharm加载conda创建pytorch虚拟环境报错,在conda命令行正常
C#中关闭窗体的四种方法
Description of MDM separation of powers and classification and grading authority
EN 1504-6 products for protection and repair of concrete structures - reinforcement anchorage - CE certification
利用MySQL主从复制延迟拯救误删数据
服务器内存故障预测居然可以这样做