数据库设计三大范式
# 数据库设计三大范式
# 范式?
范式就是指规范。
是否使用范式,取决于项目的需求,没有统一的标准。
**范式(Normal Form)**是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。
数据库范式有六种,分别为
1NF,2NF,3NF,BCNF,4NF,5N
,一般在设计关系型数据库的时候,能考虑到前三者1NF、2NF、3NF
就够了,能用到BCNF
就已经很吊了。
# 是哪三个范式?
- 1NF 保证每列的原子性
- 2NF 非键字段必须依赖键字段
- 3NF 消除传递依赖
在范式化的数据库中,每个事实数据会出现并且只出现一次;相反,在反范式化的数据库中,信息是冗余的,可能会存储在多个地方。
- 第一范式 (1NF):属性不可分。
- 第二范式 (2NF):1NF + 表必须有一个主键 + 非主键必须完全依赖于主键。
- 第三范式 (3NF):2NF + 非主键列必须直接依赖于主键,不能存在传递依赖。
# 1NF 保证每列的原子性
保证列不能再被分割。
比如有一张表有如下几个字段:
编号、商品名、进货、销售、备注
其中
进货
和销售
两者都还可以分出数量
和单价
等等属性。显然这张表不符合1NF。
# 2NF 非键字段必须依赖键字段
要满足第二范式(2NF
)必须先满足第一范式(1NF
)。
任意一个字段都只依赖表中的同一个字段。一个表只用来描述一件事,说白了就是别他妈没事找事。
# 3NF 消除传递依赖
要满足第三范式(3NF
)必须先满足第二范式(2NF
)。
要求一个数据库表中不包含已在其它表中已包含的非主键字段。也就是说一个表不能有多余的字段,这个表中的字段该干嘛干嘛,不需要的字段就别进来瞎凑热闹。
在一些特殊情况下采用第三范式,比如,需要数据冗余来提高性能的时候。
编辑 (opens new window)
上次更新: 2022/09/26, 16:55:15