MySQL——三范式

MySQL——三范式

在设计和数据库有关的系统时,数据库表的设计至关重要,这些 设计关系整个系统的架构,需要精心的仔细考虑。数据库的设计主要包含了设计表结构和表之间的联系,在设计的过程中,有一些规则应该遵守,其中最佳实践就是遵循数据库三范式

一、第一范式

第一范式——每一列都保证原子性,列不可再分

第一范式是最基本的范式——如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系 统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分, 那么就可以将要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一 范式(1NF)的数据库就不是关系数据库

二、第二范式

第二范式——确保表中的每列都和主键相关,主要是为了消除冗余字段

第二范式在第一范式的基础之上更进一层,第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成 一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列, 以存储各个实例的唯一标识。

简而言之就是数据不存在部份依赖的情况,就称之为满足第二范式

三、第三范式

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,也就是说第三范式要求不能存在传递依赖,如果存在依赖关系,需要把表拆分

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关,不能依赖于其他表的主键

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么员工信息表中列出部门编号后就不能再将部门名称、部门简介等 与部门有关的信息再加入员工信息表中。如果不存在部门信息表, 则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性

三范式的最终目的就是为了减少数据冗余,但是在目前存储技术发展很快,大部分情况下是允许数据冗余的,所以大多数情况下数据库的设计并不会严格遵守三范式,而是以牺牲存储空间的代价来换取数据读取时间的效率。不过了解基本的数据库设计三范式还是有必要的

猜你喜欢

转载自blog.csdn.net/qq_42583242/article/details/108726054