Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊数据库范式

聊聊数据库范式

作者头像
bisal
发布于 2020-08-24 09:23:44
发布于 2020-08-24 09:23:44
7680
举报

最近给新员工做了一次数据库基础的培训,其中涉及个主题,就是数据库范式,从理论层面讲,数据库会包含第一范式、第二范式、第三范式、BC范式、第四范式、第五范式等,但是一般情况下,满足第三范式就足够了。

什么是第三范式?我们要从第一范式开始看。

第一范式,理论概念是数据库表中的字段都是单一属性的,不可再分。举个例子,学生信息表,“地址”字段存储了学生的地址,可以看到,当前不是单一属性的,我们检索的时候,可能会根据“省”、“市”作为条件,该字段是可以继续进行分解的,

将“地址”字段拆成“省份”、“城市”、“详址”三个字段,此时每个字段就是单一属性的了,当前的设计就是符合第一范式,

第二范式,理论概念是数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,不能部分依赖。听着抽象,翻译一下,应该包括了三层含义,

1. 首先就是符合第一范式。

2. 表必须存在主键。

3. 非主键列不能只依赖于主键的一部分。

如下这张表,主键是“快递单号”和“商品编号”,但是像“价格”依赖于“商品编号”,“数量”依赖于“快递单号”,都是依赖于主键的一部分,这种情况,就是不符合第二范式的,

因此,拆分为这三张表,快递信息表中都是和快递相关的字段,商品信息表中都是和商品相关的字段,快递项目表则是快递和商品的关联表,每张表中非主键列都依赖于主键的全部,此时,就是符合第三范式的,

第三范式,理论概念是在第二范式的基础上,数据表中不存在非关键字段对任一候选关键字段的传递函数依赖,即除了主键外,其他字段必须依赖主键。如下例子,“爸爸”是主键,但是“儿子的玩具车”和“儿子的玩具枪”依赖的是“儿子”,并不依赖于主键,存在传递函数依赖的关系,因此不符合第三范式,

可以拆成这两张,每张表中的非主键字段,都只依赖于主键,不存在传递函数依赖的关系,因此这是符合第三范式的,

符合第三范式的表设计,可以说是从理论层面比较纯粹的设计了,但在实操层面,这种设计,未必一定可行。其实无论是数据库设计,还是系统架构的设计,都是为了业务需求服务的,都需要考虑实际的业务场景,仅从理论上考量,有时候未必能够满足业务的需求。

例如在第一范式中的例子,如果你的需求,会根据“区”、“路”进行检索,“详址”字段,当前的设计还可以继续拆,究竟什么是“单一属性”的粒度,还是取决于业务场景。例如在第二范式的例子,拆成了三张表,确实结构清晰,但是可能每次检索快递和商品信息的时候,都需要三表关联,如果数据量很大,表的字段属性再复杂些,对性能造成的影响就会更明显,此时,根据业务场景,向表中冗余一些字段,虽然违反了范式,但是能在满足业务需求和性能需求中得到平衡,可能就是一种更合适的方案。

因此,无论何种范式,都是理论基础,在实操过程中,还是要考虑实际业务场景的需求,有时候就需要“反范式”,套用一句广告词“没有最好的设计,只有最合适的设计”。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
什么是三范式
目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库只需要满足第三范式就行了。
utopia
2023/10/17
2490
什么是三范式
软考高级架构师:数据库的范式 1NF 、2NF 、3NF 和 BCNF
数据库范式是一系列规范条件的集合,这些规范条件定义了数据库表结构的合理性,以减少数据冗余和改善数据的逻辑结构。主要的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和巴斯-科德范式(BCNF)。每个高级范式都建立在前一个范式的基础上。
明明如月学长
2024/05/25
7140
软考高级架构师:数据库的范式 1NF 、2NF 、3NF 和 BCNF
MySQL (4) 第一范式 第二范式 第三范式 BC范式
第一范式:所有属性都是不可分割的原子值。 也就是每个属性都是不可再分的。 例如下图就不符合第一范式的要求
全栈程序员站长
2022/08/31
1.2K0
MySQL (4) 第一范式 第二范式 第三范式 BC范式
举例说明一下怎么算是第一范式、第二范式、第三范式?
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。
全栈程序员站长
2022/08/31
5560
数据库的第一范式,第二范式,第三范式,BCNF范式理解
所谓的第一范式就是数据库中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,如果出现重复的属性则需要重新构建实体,新的实体由重复的属性构成。 见图
全栈程序员站长
2022/08/31
9410
数据库的第一范式,第二范式,第三范式,BCNF范式理解
关系数据库设计相关四大范式
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入 (insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了 大量不需要的冗余信息。
jack.yang
2025/04/05
770
数据库六大范式(数据库一范式二范式怎么区分)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键
全栈程序员站长
2022/07/30
5960
数据库六大范式(数据库一范式二范式怎么区分)
[数据库] 第一范式、第二范式、第三范式、BC范式
关键码 1) 超键:在关系中能唯一标识元组的属性或属性集称为关键模式的超键。 2) 候选键:不含有多余属性的超键称为候选键。也就是在候选键中在删除属性就不是键了。 3) 主键:用户选作元组标识的候选键称为主键。一般不加说明,键就是指主键。 4) 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键。
全栈程序员站长
2022/08/31
8120
[数据库] 第一范式、第二范式、第三范式、BC范式
MySQL 数据类型的属性 约束 三大范式
mysql的约束是 ☞ 对数据表数据的一种约束行为,约束主要完成对数据的检验,如果有相互依赖数据,保证该数据不被删除。
宁在春
2022/10/31
1.3K0
MySQL 数据类型的属性 约束 三大范式
数据库三范式
不符合第一范式的例子: 表:字段1  字段2  字段3  字段4 字段3.1 字段3.2
全栈程序员站长
2021/05/19
3630
10分钟入门关系型数据库(一):三范式
本文介绍了关系型数据库的基本概念,包括第一范式、第二范式、第三范式以及函数依赖和传递函数依赖。通过这些概念,可以帮助我们在数据库设计中减少冗余,提高数据的一致性和完整性。在实际工作中,我们需要根据业务场景选择合适的设计,运用之妙,存乎一心。
刁寿钧
2017/06/20
1.7K0
系统设计之数据库范式
在设计数据库时,必须遵守一定的规则,在关系数据库中,就是范式。 字数虽少,信息量大。 什么是范式呢?(这个概念可忽略,说白了,就是个规则)是某一级别的关系模式的集合,
赵腰静
2018/03/09
1.3K0
系统设计之数据库范式
数据库范式
沉默十秒钟,感觉像回到了学校,做个类似留言板,BBS类的学生系统;不是鄙视学生时代,而是有些恍惚
码农戏码
2021/03/23
4030
关于SQL Server数据库设计的感悟,请指教
有问题的时候,我经常回来博客园寻找答案,久而久之,总结了一些东西。 妄自菲薄,请大家多指出错误,并给出意见 数据库设计三范式基本原则 第一范式:数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。 也就是说,绝对不要出现下面的情况
跟着阿笨一起玩NET
2018/09/18
1K0
通俗理解数据库范式
数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆。   本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述。但对于初学者应该是个不错的入门。我写下这些的目的主要是为了加强记忆,其实我也比较菜,我希望当我对一些概念生疏的时候,回过头来看看自己写的笔记,可以快速地进入状态。如果你发现其中用错误,请指正。 下面开始进入正题:
慕白
2018/08/03
1.2K0
通俗理解数据库范式
范式的数据库具体解释
设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这样的规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。眼下关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足很多其它要求的称为第二范式(2NF),其余范式以次类推。一般说来。数据库仅仅需满足第三范式(3NF)即可了。以下我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。 在创建一个数据库的过程中,范化是将其转化为一些表的过程,这样的方法能够使从数据库得到的结果更加明白。这样可能使数据库产生反复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。 以下是范化的一个样例 Customer Item purchased Purchase price Thomas Shirt 40 Maria Tennis shoes 35 Evelyn Shirt 40 Pajaro Trousers 25 假设上面这个表用于保存物品的价格,而你想要删除当中的一个顾客,这时你就必须同一时候删除一个价格。范化就是要解决问题,你能够将这个表化为两个表。一个用于存储每一个顾客和他所买物品的信息,还有一个用于存储每件产品和其价格的信息,这样对当中一个表做加入或删除操作就不会影响还有一个表。
全栈程序员站长
2022/07/06
6050
数据库的三大范式
没有规矩,不成方圆。这句话在数据库的规范中同样适用,所以就有了这几项规定,数据库的三大范式。
半月无霜
2023/03/03
7850
第二范式和bcnf范式区别(bcnf范式通俗解释)
建立在第一范式的基础上,每一个非主属性要完全函数依赖于候选键(或者说是主键,任一个候选键都可以做主键)。即非主键列完全依赖于主键,而不能是依赖于主键的一部分,必须满足两个条件:
全栈程序员站长
2022/08/01
9280
数据库范式
关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。 第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系。例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 规范成为1NF有三种方法: 一是重复存储职工号和
用户1075292
2018/01/23
6960
数据库设计范式之逻辑设计
候选码通常有一个或多个,用于唯一确定一个元组(行,对象)。举例:主键,唯一索引都可以是候选码。
架构之家
2022/12/28
9580
数据库设计范式之逻辑设计
相关推荐
什么是三范式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档