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

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

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

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

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

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

这样以来,就满足了第三范式的要求。
ps:如果把上表中的班主任姓名改成班主任教工号可能更确切,更符合实际情况,不过只要能理解就行。
总结
第一范式的关键词是列的原子性
第二范式的关键词是不能包含部分依赖
第三范式的关键词是不能包含传递依赖。
边栏推荐
- torch. Usage and comparison of unsqueeze() squeeze() expand() repeat()
- [MySQL must know and know] log details
- Reentrantlock learning - Basic Attributes
- LeetCode每日一练 —— 26. 删除有序数组中的重复项
- EN 1504-6 products for protection and repair of concrete structures - reinforcement anchorage - CE certification
- Aof & RDB of J2 redis
- Description of MDM separation of powers and classification and grading authority
- Redis6
- jar文件 反编译(IDEA环境)
- [yolov5] - detailed version of training your own dataset, nanny level learning, logging, hand-in-hand tutorial
猜你喜欢
![[C language implementation] - dynamic / file / static address book](/img/5a/655d9a4799b3e874a454a183dee3f1.png)
[C language implementation] - dynamic / file / static address book

Sre person in charge of station B personally describes the multi activity disaster recovery construction after the 713 accident | takintalks share

还在用Xshell?你out了,推荐一个更现代的终端连接工具

AttributeError: ‘Upsample‘ object has no attribute ‘recompute_ scale_ factor‘

C # upper computer development - modify the window icon and exe file Icon
![[MySQL must know and know] log details](/img/68/0c32ae42bfa013d10310ab67b1de58.png)
[MySQL must know and know] log details

线性代数第3章向量

拿铁DHT-PHEV产品响当当,销量会不会让李瑞峰想通了呢?

知识管理系统是什么?你需要知道这些

MySQL教程:MySQL数据库学习宝典(从入门到精通)
随机推荐
All you want to know about interface testing is here
NLP learning path
YOLO V2详解
首席信息官引导业务变革的指南
AttributeError: ‘Upsample‘ object has no attribute ‘recompute_ scale_ factor‘
服务发现原理分析与源码解读
SEO, client rendering ', server rendering, search engine understanding
openstack 虚拟机网卡被重名为cirename0
[MySQL must know and know] log details
DOM案例:10秒倒计时-写跳转页面相关的知识
Fair lock process of reentrantlock learning
C#中关闭窗体的四种方法
IJCAI2022开会了! Brescia等《证据推理和学习》教程,阐述其最新进展,附96页Slides
YOLO V1详解
节约gas-ChiToken的用法
C # create and read dat file cases
Do you know the difference between safety test, functional test and penetration test?
To add a composite primary key
Wechat applet plug-in -- wxml to canvas (generate pictures)
配置服务器环境