-
2022-04-10 22:21:38
#第一范式:
# 保存原子性
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
#第二范式:
# 完全依赖于主键,消除部分依赖
# 某个属性既依赖于主键又依赖于其他属性,不能缺失一个
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
#第三范式:
# 消除传递依赖:
# 某个属性既对应了主键又对应了其他属性,可以缺失其中一个
满足第三范式,必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其它表中已包含的非主键字段。就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放(能尽量外键join就用外键join)。
更多相关内容 -
MySQL三范式
2020-12-14 16:17:06目录第一范式(1NF)第二范式(2NF)第三范式(3NF) 第一范式(1NF) 表的每一列都是不可分割的基本数据项 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/... -
Mysql数据库三范式
2022-02-05 23:14:19第三范式:所有非主键字段和主键字段之间不能产生传递依赖 第一范式 数据库表中不能出现重复记录,每个字段是原子性的不能再分 不符合第一范式的实例: 第一范式1.PNG 存在问题: 最后一条记录和第一条重复(不唯一...Mysql数据库三范式
数据库设计三范式
设计数据库表的时候所依据的规范,共三个规范:
第一范式:要求有主键,并且要求每一个字段原子性不可再分 第二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖 第三范式:所有非主键字段和主键字段之间不能产生传递依赖
第一范式
数据库表中不能出现重复记录,每个字段是原子性的不能再分
不符合第一范式的实例:
第一范式1.PNG
存在问题:
最后一条记录和第一条重复(不唯一,没有主键)
联系方式字段可以再分,不是原子性的第一范式2.PNG
关于第一范式,每一行必须唯一,也就是每个表必须有主键,这是数据库设计的最基本要求,主要采用数值型或定长字符串表示,关于列不可再分,应该根据具体的情况来决定。如联系方式,为了开发上的便利可能就采用一个字段。
第二范式
第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖
实例:
二1.PNG
确定主键:
二2.PNG
以上虽然确定了主键,但此表会出现大量的冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”,出现冗余的原因在于,学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号,而教师姓名部分依赖了主键的一个字段教师编号,这就是第二范式部分依赖。
解决:
解决.PNG
如果一个表是单一主键,那么它就是复合第二范式,部分依赖和主键有关系
以上是典型的“多对多”设计
第三范式
建立在第二范式基础上的,非主键字段不能传递依赖于主键字段(不要产生传递依赖)
三1.PNG
上表中,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键,班级名称字段依赖于班级编号,班级编号依赖于学生编号,这就是传递依赖,解决的办法就是将冗余字段单独拿出来建立表:
解决三.PNG
以上设计是典型的一对多的设计,一存储在一张表中,多存储在一张表中,在多的那张表中添加外键指向一的一方
几个经典的设计:
一对一:
第一种方案:分两张表存储,共享主键 第二种方案:分两张表存储,外键唯一
一对多:
分两张表存储,在多的一方添加外键, 这个外键字段引用一的一方中的主键字段
多对多:
分三张表存储,在学生表中存储学生信息,在课程表中存储课程信息, 在学生选课表中存储学生和课程的关系信息
共享主键.PNG
外键唯一.PNG
实际开发中,数据库设计尽量遵循三范式,但是还是根据实际情况进行取舍,有时可能会拿冗余换速度,最终目的是要满足客户需求
作者:我可能是个假开发
链接:https://www.jianshu.com/p/3e97c2a1687b
来源:简书
中,数据库设计尽量遵循三范式,但是还是根据实际情况进行取舍,有时可能会拿冗余换速度,最终目的是要满足客户需求作者:我可能是个假开发
链接:https://www.jianshu.com/p/3e97c2a1687b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 -
mysql-三范式
2021-10-14 20:56:10设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 当然正常情况下...1 MySQL三大范式详解(小白也能懂哦)
范式基础
范式的概念设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
当然正常情况下我们满足前三个范式就可以设计一个比较规范的数据库要遵循后边的范式,就必须先遵循前面的范式要求,比如第二范式就必须先遵循第一范式的,第三范式必须先遵循第二范式,以此类推
2 三大范式概念
第一范式(1NF):每个列都不可以再拆分。
第二范式(2NF):在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
第三范式(3NF):在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。3 三大范式举例
比如我们有一个表,以后的例子会对这个表进行三大范式的改造,然后把他变成规范的表:
1)进行第一范式的改造
第一范式(1NF):每个列都不可以再拆分
我们可以看到表中有一列可以再分,那就是系,所以把他进行第一范式的改造就变成了:2) 进行第一范式的改造
第一范式(1NF):每个列都不可以再拆分
我们可以看到表中有一列可以再分,那就是系,所以把他进行第一范式的改造就变成了:- 进行第二范式的改造
第二范式(2NF):在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
这第二范式不好理解,那么我们先了解几个概念:1).函数依赖:如果通过A属性(属性组),可以确定唯一B属性的值,那么B依赖于A。比如上图的姓名,完全依赖于学号
2).完全函数依赖:如果A是一个属性组,则B属性值的确定需要依赖于A属性组中的所有的属性值。属性组是指多个字段,那么比如我们要想知道一个分数,就必须依赖于学号和课程名称两个属性才能确定一个分数,其他的属性是不能确定某一个分数的
3).部分函数依赖:如果A是一个属性组,则B属性值的确定需要依赖A属性组的某一些字段即可,例如学号和课程名称为一个属性组,那么学生姓名其实就只需要学号就可以确定
4).传递函数依赖:如果A属性(属性组),可以确定唯一个B属性的值,再通过B属性的值又可以唯一确定C属性的值,例如一个学号确定一个系名,一个系名对应一个系主任
5).主键:在一张表中,一个属性或者属性组,被其他所有属性完全依赖,则称这个属性为该码的表,比如上图的学号和课程名称组成的属性组
其实第二范式就是还可以理解为
在第一范式的基础上消除非主键对主键的部分依赖
那么我们上图的主键为学号加课程名称组成的属性组,对于上图,我们可以看到,除了分数其他的都对主键是部分依赖,那么我们可以按照下图的方式进行改正:
经过第二范式的改造把一个表分成两个表,那么我们发现其实第二范式为我们消除了很多冗余的部分,比如改造前张无忌的姓名系名系主任在表中出现了三次,而改造后在两表才出现一次- 进行第三范式的改造:
第三范式(3NF):在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
根据第二点我们说的概念,修改后变成: -
MySQL 第一范式 第二范式 第三范式 BC范式
2019-08-04 14:28:31第一范式 第一范式:所有属性都是不可分割的原子值。 也就是每个属性都是不可再分的。 例如下图就不符合第一范式的要求 实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如...第一范式
第一范式:所有属性都是不可分割的原子值。
也就是每个属性都是不可再分的。
例如下图就不符合第一范式的要求实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。如果我们要在RDBMS中表现表中的数据,就得设计为下图的形式:
第二范式(2NF)
第二范式:在第一范式的基础上,要求非主属性都要和码有完全依赖关系
所谓完全依赖是指不能存在仅依赖码一部分的属性,必须是依赖全部属性。(区别于部分依赖)
如果有哪些数据只和码的一部份有关的话,它就不符合第二范式。同时可以得出:如果一个数据表的码只有单一一个字段的话,它就一定符合第二范式(前提是该数据表符合第一范式)。
(码可以由多个字段组成联合码,所以码可以是多属性)
2NF在1NF的基础之上,消除了非主属性对于码的部分属性依赖。首先来看看下图
(1)每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系与对应的系主任的数据也重复多次——数据冗余过大
(2)假如学校新建了一个系,但是暂时还没有招收任何学生(比如3月份就新建了,但要等到8月份才招生),那么是无法将系名与系主任的数据单独地添加到数据表中去的 ——插入异常
(3)假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(一个系所有学生都没有了,并不表示这个系就没有了)。——删除异常
(4)假如李小明转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据。——修改异常
所以这张表肯定不符合设计规范。我们来通过第二范式修改。
首先什么是依赖?依赖
若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。
例如,对于上图中的数据,找不到任何一条记录,它们的学号相同而对应的姓名不同。所以我们可以说姓名函数依赖于学号,写作 学号 → 姓名。但是反过来,因为可能出现同名的学生,所以有可能不同的两条学生记录,它们在姓名上的值相同,但对应的学号不同,所以我们不能说学号函数依赖于姓名。然后什么是码?
码
设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码)
如图中我们可以知道该表的码是(学号、课名)对于第二范式,所有的非主属性要依赖于全部主属性。
由图中我们可以得到两个主属性:学号 和 课程
“学号“和”课程“就组成了联合主键。(一个表只有一个主键。 主键可以由一个字段,也可以由多个字段组成)因为我们可以通过学号来确定一个学生的姓名 系名 系主任 这三个属性,无法确定课程和分数属性。
通过学生的学号和课程两个属性,可以确定分数。对于(学号,课名) → 姓名,有 学号 → 姓名,存在非主属性 姓名 对码(学号,课名)的部分依赖。
对于(学号,课名) → 系名,有 学号 → 系名,存在非主属性 系名 对码(学号,课名)的部依赖。
对于(学号,课名) → 系主任,有 学号 → 系主任,存在非主属性 系主任 对码(学号,课名)的部分依赖。所以表3存在非主属性对于码的部分函数依赖,最高只符合1NF的要求,不符合2NF的要求。
所以做出修改
删除某个系中所有的学生记录
该系的信息仍然全部丢失。——无改进
所以我们要使用第三范式。第三范式(3NF)
第三范式:任何非主属性不依赖于其它非主属性。
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。对于选课表,码为(学号,课名),主属性为学号和课名,非主属性只有一个,为分数,不可能存在传递函数依赖,所以选课表的设计,符合3NF的要求。
对于学生表,主码为学号,主属性为学号,非主属性为姓名、系名和系主任。因为 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖,所以学生表的设计,不符合3NF的要求。
为了让数据表设计达到3NF,我们必须进一步进行模式分解为以下形式:
选课(学号,课名,分数)
学生(学号,姓名,系名)
系(系名,系主任)新的函数依赖关系如图
修改后的表
第二范式和第三范式就是为了消除非主属性对码的部分函数依赖和传递函数依赖
BC范式
BC范式在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。主属性:包含在任何候选码中的属性成为主属性。
要了解 BCNF 范式,那么先看这样一个问题:
若:
某公司有若干个仓库;
每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。
那么关系模式 仓库(仓库名,管理员,物品名,数量) 属于哪一级范式?答:已知函数依赖集:仓库名 → 管理员,管理员 → 仓库名,(仓库名,物品名)→ 数量
码:(管理员,物品名),(仓库名,物品名)
主属性:仓库名、管理员、物品名
非主属性:数量
∵ 不存在非主属性对码的部分函数依赖和传递函数依赖。∴ 此关系模式属于3NF。基于此关系模式的关系(具体的数据)可能如图所示:
好,既然此关系模式已经属于了 3NF,那么这个关系模式是否存在问题呢?我们来看以下几种操作:
先新增加一个仓库,但尚未存放任何物品,是否可以为该仓库指派管理员?——不可以,因为物品名也是主属性,根据实体完整性的要求,主属性不能为空。
某仓库被清空后,需要删除所有与这个仓库相关的物品存放记录,会带来什么问题?——仓库本身与管理员的信息也被随之删除了。
如果某仓库更换了管理员,会带来什么问题?——这个仓库有几条物品存放记录,就要修改多少次管理员信息。
从这里我们可以得出结论,在某些特殊情况下,即使关系模式符合 3NF 的要求,仍然存在着插入异常,修改异常与删除异常的问题,仍然不是 ”好“ 的设计。造成此问题的原因:存在着主属性对于码的部分函数依赖与传递函数依赖。(在此例中就是存在主属性【仓库名】对于码【(管理员,物品名)】的部分函数依赖。
解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。
仓库(仓库名,管理员)
库存(仓库名,物品名,数量)这样,之前的插入异常,修改异常与删除异常的问题就被解决了。
-
mysql的三大范式
2022-03-21 16:49:33mysql的三大范式实例 -
mysql之三范式简述
2019-01-14 18:52:54目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般说来,数据库只需满足第三范式(3NF)就行了。下面用... -
MySQL的三大范式
2021-05-25 19:23:38文章目录数据库范式第一范式(1NF)第二范式(2NF)第三范式(3NF) 数据库范式 应用数据库范式可以带来许多好处: &... -
mysql 第一范式、第二范式、第三范式理解以及实际工作的时候怎么利用这三范式
2019-12-05 15:25:07一般的数据库设计都需要满足三范式,这是最基本的要求的,最高达到6NF,但是一般情况下3NF达到了就可以 一:1NF一范式的理解: 1NF是关系型数据库中的最基本要求,就是要求记录的属性是原子性,不可分,就是属性不... -
MySQL的三大范式以及设计规范
2022-02-28 21:30:02三大范式及巴斯(BCNF)范式 第一范式 第一范式主要是确保数据表中的每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。 属性的原子性是主观性的。 第二范式 在满足第一范式的... -
Mysql数据库设计三范式实例解析
2021-01-19 21:48:29三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物; 3NF:每列都与主键有直接关系,不... -
Mysql的三大范式
2020-12-14 11:39:08第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖) 几个概念: 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A 例如:学号–>姓名。 ... -
MySQL之范式的使用详解
2020-12-14 07:15:22通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。 第一范式(1NF) 第一范式其实是关系型数据库的基础,即任何关系型数据库都是符合第一范式的。简单的将第一范式就是每一行... -
第一范式、第二范式、第三范式
2021-02-08 16:43:19第一范式、第二范式、第三范式 第一范式 如果一个关系模式R的所有属性都是不可分的基本数据项,则R1NF(即R符合第一范式)。 两点: 一、每个字段都只能存放单一值 课程有两个值,不符合第一范式,可改为如下 二、每笔... -
mysql三范式
2021-01-28 00:13:53网上查找了一些资料,记录如下并加入自己的理解。设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库...目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCN... -
【Mysql】第一范式与第二范式
2021-02-07 08:17:081、第一范式(1NF)在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有... -
MySQL三大范式
2021-01-28 05:53:37一、数据库设计的范式数据库设计的范式即设计数据库时,需要遵循的一些规范。...目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(... -
MySQL之三范式:原子性 唯一性 避免数据冗余
2021-05-17 23:34:15第三范式:3NF 数据冗余 定义:当数据表中有字段是可以被推导出来的情况,这时候不能有冗余数据 什么意思呢? 比如有下面字段的表 id,name,age,sex,class_id,classname,depart 另一张表 id,classname,depart 这... -
MySQL三范式的通俗理解
2020-02-02 09:43:31第一范式就是属性不可分割,每个字段都应该是不可再拆分的。比如一个字段是姓名(NAME),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候就符合第一范式;但是在国外的话还要分为FIRST NAME和LAST NAME... -
MySQL五大范式
2021-01-21 16:03:51第一范式(1NF)数据表的每一列都要保持它的原子特性,也就是列不能再被分割。这张表就不符合第一范式规定的原子性,不符合关系型数据库的基本要求,在关系型数据库中创建这个表的操作就不能成功。不得不将数据表设计... -
mysql 之 三大范式
2021-01-18 20:48:35前言:在使用mysql中对表的设计,我们需要遵循三大范式。设计关系型数据库时,遵从不同的规范和要求,设计出合理的关系型数据库,这些不同的规范和要求称为不同的范式。各种范式呈递次规范,越高的范式数据库冗余越... -
MySQL数据库之数据库的第一范式、第二范式、第三范式、BC范式、第四范式等知识学习
2021-01-18 20:48:35本文主要向大家介绍了MySQL数据库之数据库的第一范式、第二范式、第三范式、BC范式、第四范式等知识学习 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。在设计与操作维护数据库时,最关键的问题... -
mysql 三大范式简单理解
2022-03-25 14:50:26mysql 三大范式的官方定义很深奥,光看字面意思就头大,...第三范式:在第二范式的基础上每一列都直接与主键建立关系,通过主键就可以查询到相应的值 借鉴了:MySQL数据库三范式 - 知乎 该博主写得很清晰明了。 ... -
MySQL 三大范式
2021-01-19 04:15:16第一范式:确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列).如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式.例如:顾客表(姓名、编号、地址、……)其中... -
mysql的三大范式详细解析
2021-11-22 16:33:43第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、 巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 当然正常情况下我们满足前三个范式就可以设计一个比较规范的数据库。 三大范式 第... -
MySql——数据库三范式
2022-03-13 13:13:36第二范式:在第一范式的基础上,所有非主属性完全依赖于主属性,不存在部分依赖 比如: t_student: sno sname 1 zs 2 ls t_teacher tno tname 1 张老师 2 李老师 3 ... -
MySql数据库设计三范式
2020-12-18 16:33:03第一范式 任何一张表都应该有主键,并且每一个字段原子性不可再分。 第二范式 建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。如果一个表是单一主键,那么它就复合第二范式,部分依赖和... -
【MySQL】第一范式、第二范式、第三范式、部分函数依赖、传递函数依赖、完全函数依赖等
2021-11-16 13:17:09要讲清楚范式,就先讲讲几个名词的含义吧: 在理解函数依赖之前,先来看一下函数依赖分析: 在关系中,包括在任何候选码中的属性称为主属性;不包括在任何候选码中的属性称为非主属性。 函数依赖只分析关系中的非主...