时间:2021-07-01 10:21:17 帮助过:2人阅读
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
目录:
一。三大范式概念
1、第一范要求数据库表中的每个实例或行必须可式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,也就是说确保数据库表中的所有字段值都是不可分割的原子值,即同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。
2、第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
3、第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。信息表,则根据第三范式简而言之,第三范式就是属性不依赖于其它非主属性。
二.范式总结
简而言之三大范式总结出来每一个范式可以一句话就可以概括
第一范式(1NF):确保表中的字段具有原子性不可再分
第二范式(2NF):确保表中的每列都和主键相关
第三范式(3NF):确保每列都和主键列直接相关,而不是间接相关
三.实例
第一范式:
第一范式是最基本的范式,而要想合理遵循它还是得根据实际的需求来制定。
首先,在我们的数据表中可能会用到“地址”这个属性,我们可以将他设为一个字段,但是我们的系统如果经常访问“地址”这个字段下的城市的时候,那么我们就有必要将我们的“地址”拆分成‘省’,‘市’,‘区’以及详细地址进行一个多部分的存储,这样我们在进行地址的一个操作那么将会非常的方便这样设计才算满足了数据库的第一范式。
编号 | 姓名 | 年龄 | 性别 | 联系电话 | 省 | 市 | 区 | 详细地址 |
1 | 张三 | 26 | 男 | 18800001122 | 黑龙江 | 哈尔滨 | 道外区 | xxx路88号 |
第二范式:(确保表中的每列都与主键有关)
什么是表中的每列都与主键有关(主要针对联合主键)?与主键有关也就是说每一张表中只能保存一种数据,不能把多种数据保存在同一张表中。
我们来拿员工表举例
员工编号 | 员工名称 | 部门编号 | 部门名称 |
1 | 张三 | 1 | 市场部 |
在这张表中是以员工编号与部门编号作为联合主键这样在该表中“部门名称”与主键不相关而仅仅与部门编号相关,这样便违反了第二范式的原则。
如果把这张表拆分
部门编号 | 部门名称 |
1 | 市场部 |
员工编号 | 员工姓名 | 部门编号 |
1001 | 张三 | 1 |
这样设计大大减少了数据库的冗余。
第三范式:(确保每一列都与主键有直接关系而不是间接)
这次我们拿订单表进行举例
订单编号 | 客户编号 | 负责人 | 订单项目 |
001 | 1001 | 张三 | 挖掘机 |
客户编号 | 客户姓名 | 客户年龄 |
1001 | 李四 | 30 |
在设计这张订单表时我们将客户编号作为一个外键来与订单编号进行关联,而不可以在订单表中添加其他信息,所以满足第三范式
数据库三大范式
标签: