在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
数据库设计之三范式是什么?有什么作用?范式:是对设计数据库提出的一些规范,设计数据库时遵循一定的规则,建立冗余较小、结构合理的数据库更便于查找数据。
学习目标:知道一个表结构的设计是否符合三范式的要求
1. 数据库设计之三范式是什么?
范式: 对设计数据库提出的一些规范,目前有迹可寻的共有8种范式一般遵守3范式即可。
第一范式(1NF): 强调的是列的原子性即列不能够再分成其他几列。
第二范式(2NF): 满足 1NF,另外包含两部分内容,表必须有一个主键,非主键字段必须完全依赖于主键而不能只依赖于主键的一部分。
第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
2. 第一范式(1NF)
如图所示的表结构:

说明:这种表结构设计就没有达到 1NF,要符合 1NF 我们只需把列拆分,即:把 contact 字段拆分成 name 、tel、addr 等字段。
3. 第二范式(2NF)
如图所示的表结构:

说明:这种表结构设计就没有达到 2NF,因为 Discount(折扣),Quantity(数量)完全依赖于主键(OrderID),而 UnitPrice单价,ProductName产品名称 只依赖于 ProductID, 所以 OrderDetail 表不符合 2NF。
我们可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)这样就符合第二范式了。
4. 第三范式(3NF)
如图所示的表结构:

说明:这种表结构设计就没有达到 3NF,因为 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
我们可以把【Order】表拆分为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。
5. E-R模型的介绍
E-R模型即实体-关系模型,E-R模型就是描述数据库存储数据的结构模型。
E-R模型的使用场景:对于大型公司开发项目,我们需要根据产品经理的设计,我们先使用建模工具, 如:power designer,db desinger等这些软件来画出实体-关系模型(E-R模型)。然后根据三范式设计数据库表结构,E-R模型的效果图:

说明:实体:用矩形表示,并标注实体名称;属性: 用椭圆表示,并标注属性名称;关系: 用菱形表示,并标注关系名称(一对一,一对多,多对多)
(1)一对一的关系:

说明:关系也是一种数据,需要通过一个字段存储在表中,1对1关系,在表A或表B中创建一个字段,存储另一个表的主键值
(2)一对多的关系:

说明:1对多关系,在多的一方表(学生表)中创建一个字段,存储班级表的主键值
(3)多对多的关系:

说明:多对多关系,新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值
5. 小结
范式就是设计数据库的一些通用规范。
1NF强调字段是最小单元,不可再分
2NF强调在1NF基础上必须要有主键和非主键字段必须完全依赖于主键,也就是说 不能部分依赖
3MF强调在2NF基础上 非主键字段必须直接依赖于主键,也就是说不能传递依赖(间接依赖)。
E-R模型由 实体、属性、实体之间的关系构成,主要用来描述数据库中表结构。
开发流程是先画出E-R模型,然后根据三范式设计数据库中的表结构
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
业余学Python能做什么?对职业发展有什么帮助?
业余学Python能做什么?一般来说,Python有Web开发、数据科学和脚本三大应用。无论对于零基础小白,还是已经工作想要提升自己的在职人员,学好这些内容都会对职业发展有着重要作用。下面小编将详细为大家分析,Python学好了能从事什么岗位的工作。
11792
2019-08-27 10:26:20
零基础学习Python 基础知识入门篇
众所周知,Python是一门集优雅、明确和简单于一体的编程语言,近来随着Python语言在各个行业领域的广泛运用,Python的学习者是越来越多。本文为大家整理了零基础小白入门Python的必需要学习的一些基础知识,内容包括标识符、关键字、引号、编码、输入输出、缩进、多行、注释、数据类型等等。有学习需要的小伙伴赶紧看下去吧!
7623
2019-11-03 22:23:49
Python数据分析可视化教程学习
随着数据分析与数据挖掘行业的日益火爆,Python数据分析可视化教程也成为了许多人提升职业竞争力的必修课。本文将详细为大家介绍Python数据分析可视化教程的具体内容,全文会围绕着为什么学?学什么?学了有什么用?这几个问题展开,让大家全面了解该教程适不适合自己学习。如果对数据分析感兴趣就接着看下去吧!
7846
2020-04-03 15:54:58
人工智能难学吗?通过培训能学会吗?
很多人都认为学习人工智能非常难,其实只要认真参加培训班的培训,人工智能也并不难学。以前的计算机专业是一个领域较宽的培养模式,在更多人学习java、UI设计等不同的专业时,人工智能的课程就显得更加稀少了,即算是各高校的优秀学生,在不准备对人工智能进行专研的基础下,对人工智能的了解可能只能达到“高级科普”的程度。
7354
2020-06-15 17:44:25
Python 新版本中的 6 个新特性,你去体验了么?
两周之前(2021年10月4日),一个新的Python版本发布了,Python 3.10。在新的版本中,Python 添加了独特且有价值的功能,同时删除了一些旧功能。我们可以将任何新软件版本中添加或删除的功能归为多个类别,例如语法特性、添加到默认库或对现有特性的改进。
5688
2021-10-22 11:40:26
