Mysql数据库
⽬前关系数据库有六种范式:
第⼀范式(
1NF
)、第⼆范式(
2NF
)、第三范式(
3NF
)、巴斯
-
科德范式
(
BCNF
)、第四范式
(4NF
)和第五范式(
5NF
,⼜称完美范式)。满⾜最低要求的范式是
第⼀范式(
1NF
)。在第⼀范式的基础上进⼀步满⾜更多规范要求的称为第⼆范式
(
2NF
),其余范式以次类推。⼀般说来,数据库只需满⾜第三范式
(3NF
)就⾏了。所以
这⾥就只记录三范式相关的知识。
⼀ 范式
1NF:
字段不可分
; 2NF:
有主键,⾮主键字段依赖主键
; 3NF:
⾮主键字段不能相互依赖
;
解释
: 1NF:
原⼦性 字段不可再分
,
否则就不是关系数据库
; 2NF:
唯⼀性 ⼀个表只说明⼀个事
物
; 3NF:
每列都与主键有直接关系,不存在传递依赖
;
第⼀范式(1NF)
即表的列的具有原⼦性
,
不可再分解,即列的信息,不能分解
,
只要数据库是关系型数
据库
(mysql/oracle/db2/informix/sysbase/sql server)
,就⾃动的满⾜
1NF
。数据库表的每⼀
列都是不可分割的原⼦数据项,⽽不能是集合,数组,记录等⾮原⼦数据项。如果实体中
的某个属性有多个值时,必须拆分为不同的属性 。通俗理解即⼀个字段只存储⼀项信息。
关系型数据库
: mysql/oracle/db2/informix/sysbase/sql server
⾮关系型数据库
: (
特点
:
⾯向对象或者集合
) NoSql
数据库
: MongoDB/redis(
特点是⾯向⽂档
)
第⼆范式(2NF)
第⼆范式(
2NF
)是在第⼀范式(
1NF
)的基础上建⽴起来的,即满⾜第⼆范式
(
2NF
)必须先满⾜第⼀范式(
1NF
)。第⼆范式(
2NF
)要求数据库表中的每个实例或⾏
必须可以被惟⼀地区分。为实现区分通常需要我们设计⼀个主键来实现
(
这⾥的主键不包含
业务逻辑
)
。
即满⾜第⼀范式前提,当存在多个主键的时候,才会发⽣不符合第⼆范式的情况。⽐如有
两个主键,不能存在这样的属性,它只依赖于其中⼀个主键,这就是不符合第⼆范式。通
俗理解是任意⼀个字段都只依赖表中的同⼀个字段。(涉及到表的拆分)
第三范式(3NF)
满⾜第三范式(
3NF
)必须先满⾜第⼆范式(
2NF
)。简⽽⾔之,第三范式(
3NF
)要
求⼀个数据库表中不包含已在其它表中已包含的⾮主键字段。就是说,表的信息,如果能
够被推导出来,就不应该单独的设计⼀个字段来存放
(
能尽量外键
join
就⽤外键
join)
。很多
时候,我们为了满⾜第三范式往往会把⼀张表分成多张表。
即满⾜第⼆范式前提,如果某⼀属性依赖于其他⾮主键属性,⽽其他⾮主键属性⼜依赖于
主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。 通俗解释就是⼀
张表最多只存两层同类型信息。
巴斯
-
科德范式(
BCNF
)
Boyce-Codd Normal Form
(巴斯
-
科德范式)
在
3NF
基础上,任何⾮主属性不能对主键⼦集依赖(在
3NF
基础上消除对主码⼦集的依赖)
巴斯
-
科德范式(
BCNF
)是第三范式(
3NF
)的⼀个⼦集,即满⾜巴斯
-
科德范式(
BCNF
)
必须满⾜第三范式(
3NF
)。通常情况下,巴斯
-
科德范式被认为没有新的设计规范加⼊,
只是对第⼆范式与第三范式中设计规范要求更强,因⽽被认为是修正第三范式,也就是
说,它事实上是对第三范式的修正,使数据库冗余度更⼩。这也是
BCNF
不被称为第四范式
的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让⼈不
容易理解的地⽅。⽽真正的第四范式,则是在设计规范中添加了对多值及依赖的要求
第四范式
对于第四范式,从理论层⾯来讲是,关系模式
R
∈
1NF,
如果对于
R
对于
R
的每个⾮平凡多值依
赖
X
→
Y(Y
不属于
X),X
都含有候选码,则
R
∈
4NF
。
4NF
就是限制关系模式的
属性之间不允许有
⾮平凡且⾮函数依赖的多值依赖
。显然⼀个关系模式是
4NF
,则必为
BCNF
。
也就是说,当⼀个表中的⾮主属性互相独⽴时(
3NF
),这些⾮主属性不应该有多
值。若有多值就违反了第四范式。
第五范式
不得存在不遵循键约束的⾮平凡连接依赖。如果且只有⼀个表符合
4NF
,同时其中的每个
连接依赖被候选键所包含,此表才符合第五依赖。
⼆ 反三范式
没有冗余的数据库未必是最好的数据库,有时为了提⾼运⾏效率,提⾼读性能,就必
须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范
式,降低范式标准的⼯作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了
查询时的关联,提⾼查询效率,因为在数据库的操作中查询的⽐例要远远⼤于
DML
的⽐
例。但是反范式化⼀定要适度,并且在原本已满⾜三范式的基础上再做调整的