关系型数据库三范式(笔记)

范式理解

关系型数据库在设计过程中需要考虑存储性能,所以建立规范的的数据库是需要满足一定的要求,用来规范数据数据存储方式以减少冗余,在关系型数据库中这些规范就可以称为范式。但是有些时候一昧的追求范式减少冗余,反而会降低数据读写的效率,这个时候就要反范式,利用空间来换时间。
目前关系数据库有迹可循共有8种范式,一般说来,数据库只需满足三范式即可

三范式

第一范式(1NF):字段不可分,强调列的原子性
第二范式(2NF):首先是1NF,然后有主键,并且非主键字段完全依赖主键
第三范式(3NF):首先是2NF,非主键字段不能相互依赖,即不能通过传递依赖

第一范式(1NF)

即表的列的具有原子性,不可再分解,即列的信息,不能分解,数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性 。
关系型数据库三范式(笔记)_第1张图片

第二范式(2NF)

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,要求数据库表中的每个实例或行必须可以被惟一地区分,为实现区分通常需要我们设计一个主键来实现,如有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式,通俗理解是任意一个字段都只依赖表中的同一个字段。
关系型数据库三范式(笔记)_第2张图片

第三范式(3NF)

第三范式(3NF)必须先满足第二范式(2NF);第三范式(3NF)要求表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放(能尽量外键join就用外键join);很多时候,我们为了满足第三范式往往会把一张表分成多张表。如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,称为传递依赖于主属性。
关系型数据库三范式(笔记)_第3张图片

反三范式

没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。

你可能感兴趣的:(笔记)