-
2021-01-28 05:53:37
一、数据库设计的范式
数据库设计的范式即设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
二、第一范式(1NF)
每一列都是不可分割的原子数据项。
三、第二范式(2NF)
在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上将非主属性对主码的部分函数依赖转为完全函数依赖)。
【注】在这里需要介绍几个概念
函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A。
例如:学号-->姓名。 (学号,课程名称) --> 分数
完全函数依赖:A-->B, 如果A是一个属性组,而B属性值的确定需要依赖于A属性组中所有的属性值,则称B完全依赖于A。
例如:(学号,课程名称) --> 分数
部分函数依赖:A-->B, 如果A是一个属性组,而B属性值的确定只需要依赖于A属性组中某一些值即可,则称B部分依赖于A。
例如:(学号,课程名称) -- > 姓名
传递函数依赖:A-->B,B -- >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,再通过B属性(属性组)的值可以确定唯一C属性的值,则称 C传递函数依赖于A。
例如:学号-->系名,系名-->系主任
码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
例如:该表中码为:(学号,课程名称)
主属性:码属性组中的所有属性。
非主属性:除去码属性组的属性。
四、第三范式(3NF)
在2NF的基础上,要求任何非主属性不依赖于其它非主属性(在2NF基础上消除传递函数依赖)。
更多相关内容 -
MySQL五大范式
2021-01-21 16:03:51第一范式(1NF)数据表的每一列都要保持它的原子特性,也就是列不能再被分割。这张表就不符合第一范式...缺点表中的第一行数据都存储了系名、系主任,数据的冗余太大如果有一个新的系还没有开始找到学生,那么不能讲该...第一范式(1NF)
数据表的每一列都要保持它的原子特性,也就是列不能再被分割。
这张表就不符合第一范式规定的原子性,不符合关系型数据库的基本要求,在关系型数据库中创建这个表的操作就不能成功。不得不将数据表设计为如下形式。
第二范式(2NF)
概率:属性必须完全依赖于主键。
下满这张表不符合第二范式的要求。
缺点
表中的第一行数据都存储了系名、系主任,数据的冗余太大
如果有一个新的系还没有开始找到学生,那么不能讲该系的信息添加到数据表中去,从数据表中看不到该系的存在
如果将某个系的学生信息全部删除,那么这个系在数据表里也就不存在了,但这个系还存在。
如果某个人要转系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据
依赖
在数据表中,属性(属性组)X确定的情况下,能完全退出来属性Y完全依赖于X。
完全依赖
完全依赖是针对于属性组来说,当一组属性X能推出来Y的时候就说Y完全依赖于X。
部分依赖
一组属性X中的其中一个或几个属性能推出Y就说Y部分依赖于X。
结论:当一个第一范式的候选码只有一个属性的时候,那它就是第二范式(2NF)
候选码
当一个属性或者属性组确定的情况下,这张表的其余所有属性就能确定下来,这个属性或者属性组就叫做或候选码。
一张表可以有多个候选码
一般只选一个候选码作为主键
从表中找到两个属性:学号和课程
学号可以推出姓名、系名、系主任。
课程可以推出成绩。
将它们两个设置为联合主键
存在的部分依赖
姓名对学号存在部分依赖
系名对学号存在部分依赖
系主任对学号存在部分依赖
这显然不符合第二范式的要求,做出修改:
表一中分数完全依赖于学号和课程的属性
表二中姓名、系名、系主任完全依赖于学号的属性
第二范式消除了第一范式的部分依赖
第三范式(3NF)
概念:所有的非主属性不依赖于其他的非主属性
传递函数依赖
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
在改进后的学生表中:
主属性:学号
非主属性:姓名、系名、系主任
知道系名可以推出系主任,所以非主属性系主任对主属性学号存在传递函数依赖,这不符合非主属性不依赖于其它的非主属性的设计要求。将该数据表改进如下:
第三范式消除了第二范式的传递函数依赖
BC 范式
主属性不能对候选码存在部分函数依赖或者传递函数依赖
这张表不存在部分函数依赖于传递函数依赖,属于第三范式
表中的依赖关系
仓库名—————>管理员
管理员—————>仓库名
物品名—————>数量
主属性:仓库名、管理员、物品名
非主属性:数量
存在的问题
先新添加一个仓库,但尚未存放任何物品,不可以为该仓库指派管理员,因为物品名也是主属性,根据实体完整性的要求,主属性不能为空
某仓库被清空后,该仓库的信息也被清空
当需要更新仓库管理员,该仓库存放了多少物品,就要修改多少条信息。
在这个问题中就是存在了主属性对于候选码的部分依赖,也就是仓库名对于管理员和物品名的部分依赖。
修改为
仓库(仓库名,管理员)
库存(仓库名、物品数、数量)
第四范式(4NF)
消除表中的多值依赖
设R是一个关系模型,D是R上的多值依赖集合。如果D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。
例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。
优缺点:表的冗余性,提高了多表的联合查询的效率。
范式之间的关系
范式的目的
减小数据的冗余性
提高效率
-
mysql三大范式
2022-01-13 17:41:35设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为...第一大范式(1NF) 保证每列的原子性。即每一个字段都不能再分割。 这里可以看到home列保存的应该是家庭信息,但是设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小,但相对的数据库性能会有所下降。
目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库只需要满足第三范式就行了。
第一大范式(1NF)
保证每列的原子性。即每一个字段都不能再分割。
这里可以看到home列保存的应该是家庭信息,但是这个字段是可以分成家庭人口和家庭住址的,所以应该改成下面这样
第二大范式(2NF)
一张表只描述一件事情。必须满足第一大范式。
这么做的问题有:- 数据冗余:假如说一个学生选了多门课程,则学号和学生姓名将会重复
- 更新异常:假如修改了某个课程的编号,则必须修改所有数据的"编号"值
- 插入异常:假设要开一门新课程,暂时没有人选修,那么由于没有"学号"、"学生姓名"关键字,"课程"与"编号"也无法记录入数据库。
- 删除异常:假设一批学生已经完成课程,这些记录就应该从数据库表中删除。但是,与此同时,"课程"和"学分"也被删除了,显然,这最终可能会导致插入异常。
所以必须将一张表拆分成两张表
第三范式(3NF)
表中的字段和主键直接对应不依靠其他中间字段,说白了就是,决定某字段值的必须是主键。
“班级名称”、“班级信息"等字段不能直接和“学号”字段对应,必须通过"班级编号”,才可以对应到"学号"。同样会造成和第二范式一样的问题。修改之后如下:
范式和性能的问题
- 实际开发考虑商业化的需求和目标(成本、用户体验),性能比规范性更加重要
- 在考虑性能的同时,需要适当的考虑一下规范性
- 故意增加一些冗余字段(为了多表查询变成单表查询)
- 关联查询的表不得超过三张
- 增加计算列:计算列是由表中的其它多个列计算所得 增加派生列可以减少统计运算 在数据汇总时可以大大缩短运算时间
-
数据库的三大范式以及五大约束
2021-01-28 00:49:56数据库设计三大范式(重点):第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;例如:userInfo:山东省烟台市 131777368781 userAds:山东0省烟台市...数 据 库
今天小编来讲一下数据库的相关知识点,数据库的三大特性可谓是:实体属性和关系。
实体:表; 属性:表中的数据(字段); 关系:表与表之间的关系;
数据库设计三大范式(重点):
第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
例如:userInfo:山东省烟台市 131777368781 userAds:山东0省烟台市 userTel:131777368781
第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
例如:订单表只描述订单相关的信息,所以所有字段都必须与订单id相关 产品表只描述产品相关的信息,所以所有字段都必须与产品id相 关;因此不能在一张表中同时出现订单信息与产品信息;如下图所示:
第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);
例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户id即可,而不能有其他的客户信息。因为其他的客户信息直接关联于用户id,而不是直接与订单id直接相关。
【如何更好的区分三大范式】
第 一范式和第二范式在于有没有分出两张表,第二范式是说一张表中包含了所种不同的实体属性,那么要必须分成多张表, 第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)。
【数据库五大约束】
1.primary KEY:设置主键约束;
2.UNIQUE:设置唯一性约束,不能有重复值;
3.DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2
4.NOT NULL:设置非空约束,该字段不能为空;
5.FOREIGN key :设置外键约束。
【主键】
1.主键的注意事项?
主键默认非空,默认唯一性约束,只有主键才能设置自动增长,自动增长一定是主键,主键不一定自动增长;
2.设置主键的方式?
在定义列时设置:ID INT PRIMARY KEY
在列定义完之后设置:primary KEY(id)
【外键】
1.设置外键的注意事项:
只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB 外键必须与参照列的数据类型必须相同(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同)。
2设置外键的语法:
CONSTRAINT 外键名 FOREIGN KEY (外键字段)REFERENCES 参照表 (参照字段) ON DELETE SET NULL ON UPDATE CASCADE 设置参照完整性
3.外键约束的参照操作?
参照表的完整性操作:当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对;
参照操作可选值:
RESTRICT拒绝参照表删除或更新参照字段;
RESTRICT和NO ACTION相同,但这个指令只在mysql生效;
CASCADE删除或更新参照表的参照字段时,外键表的记录同步删除更新;
SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL;
转自:https://www.cnblogs.com/waj6511988/p/7027127.html
-
MySQL三大范式及其实践理解
2021-02-02 12:59:08而通常我们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。举例说明:在上面的表中,“家庭信息”和... -
mysql的三大范式详细解析
2021-11-22 16:33:43mysql的三大范式详解范式基础三大范式三大范式举例: 范式基础 设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、 巴斯-科德范式(BCNF)、第四... -
MySQL三大范式 举例说明,通俗易懂
2021-03-28 15:59:19数据库三大范式 无规矩不成方圆, Java有很多的规范,设计模式有7大原则,数据库同样也有它的规范,按照规范来设计维护数据库是程序员必备的素质, 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)... -
MySql 三大范式和五大约束
2019-08-21 23:51:101、三大范式 1.1 第一范式(1NF) 1.2 第二范式(2NF) 1.3 第三范式(3NF) 1.4 范式的区分方法 2、五大约束 -
MySQL三大范式详解(小白也能懂哦)
2020-05-18 10:33:481.范式基础 1.1范式的概念 设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式...2.三大范式 2.1三大范式概念 第一范式(1NF):每个列都不可以再拆分。 第 -
MySQL数据库中的六大范式
2021-12-27 22:11:14MySQL数据库范式 -
关于MySQL的三大范式
2021-01-20 03:22:07三大范式: 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF) 、 第四范式(4NF)和第五范式(5NF,又称完美范式)。 满足最低要求的范式是第一范式(1NF)。在第一... -
【mysql系列】数据库六大范式详解
2022-03-07 14:26:33第五范式(5NF,又称完美范式) 最常接触到的是前三个范式 范式具体是用来干嘛的? 我们在设计关系数据库时,要遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈... -
MySQL三大范式和五大约束
2019-12-05 19:52:02一 数据库设计三大范式 1.1第一范式(1NF) 原子性、 数据不可再分。 原地址表 ID StuAddress 1 天津 10080 2 上海 10082 3 杭州 10083 4 深圳 10084 ... ... 调整之后的表 ID ... -
Mysql数据库设计 数据库三大范式
2022-03-12 13:38:57三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。 表与... -
mysql 之 三大范式
2021-01-18 20:48:35前言:在使用mysql中对表的设计,我们需要遵循三大范式。设计关系型数据库时,遵从不同的规范和要求,设计出合理的关系型数据库,这些不同的规范和要求称为不同的范式。各种范式呈递次规范,越高的范式数据库冗余越... -
4.MYSQL 三大范式+BC范式
2018-09-07 22:32:36前言 首先,你得知道范式是干啥的? 范式就是规范我们建表的依据,为后续的增删改查...实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据... -
mysql-三范式
2021-10-14 20:56:101 MySQL三大范式详解(小白也能懂哦) 范式基础 范式的概念 设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4... -
『mysql』三大范式
2021-01-12 11:33:45关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。 范式可以理解为一张... -
MYSQL-三大范式和表约束(通俗易懂)
2022-03-07 19:24:15本篇文章主要介绍了对MYSQL中的三大范式的理解,以及表约束类型和表的关系 -
Mysql详解——范式
2022-04-26 20:19:25第五范式 一、数据库的设计规范 1. 范式 在关系型数据库中,关于数据库表设计的基本原则,规则被称为范式,范式的英文名称为Normal Form,简称NF。要想设计一个合理的关系型数据库,就需要满足一定的范式。 目前... -
mysql之三范式简述
2019-01-14 18:52:54目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般说来,数据库只需满足第三范式(3NF)就行了。下面用... -
Mysql:三大范式,五大约束,多表查询,子查询
2019-09-16 21:15:18day08三大范式:五大约束:主键约束:唯一约束非空约束:默认约束:外键约束多表关系:非等值查询等值查询笛卡尔积现象:如何清除笛卡尔积内连接外连接子查询: 三大范式: 第一大范式:每一列都是最小的原子单位,不... -
数据库之六大范式详解
2021-02-05 09:54:41关系数据库中的关系满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式,简称2NF,其余范式以此类推。对于各种范式之间有如下... -
mysql数据库表设计的三大范式,及五大约束:
2021-12-21 02:57:58什么是设计范式? 设计表的依据,按照三大范式可以避免数据的冗余。 数据库的三大范式 ...数据库的五大约束? 1.主键约束:唯一性,非空性。 2.唯一约束:只能是唯一一个。 3.外键约束:另一张... -
Mysql中的范式
2018-08-30 09:42:55数据库中的范式有第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式(BCNF),第四范式(4NF),第五范式(5NF)(又称完美范式) 第一范式----数据库中的表(所有字段值)都是不可分割的原子数据项。 第二范式----...