数据库三大范式
郝伟 2021/04/30
经过多年经验总结,数据库的设计如果满足一定的规则,那么就会具有良好的扩展性和可维护性。这里的规则就是三大范式。只要遵守了三大范式,我们就会发现数据库具有写入良好的SQL语句(选择,更新,插入或删除)将很难,有时实际上不可能使用大量的程序编码。
第一范式原则(1NF):原子性,即无符合属性,属性不可分割,表中的字段是最小单位,无法再拆分成更小的单位了。
举例来说,学生信息组成学生信息表,有姓名、年龄、性别、学号等信息组成。不能将这些内容用一个字段表示,而是根据内容表示成多个字段。不过需要注意,最小单位也往往是由实际需求决定的,比如有的项目中姓名是一体的不需要分别处理,而在其他的一些项目中对姓名需要单独使用,此时姓名就需要拆分成姓和名两个字段。
第二范式(2NF):依赖性,即无部分依赖,所有字段都完全依赖于主键。本质上,所有的属性必需是此表的基本属性。
主键实际上就是一条记录的唯一性的保证,其他字段依赖于主键的具体含意是与主键所表示是相同一个对象。
举例来说,在订单表中,有订单编号、用户编号、用户名和用户手机。那么用户名和用户手机都违背了2NF,因为用户名和用户手机都只依赖于用户编号,而不依赖于订单号。
第三范式(3NF):独占性,即无传递性,不存在A.p => A->B.p 没有传递依赖。
所谓传递依赖,是指在主体中A可以推出B,B可以推出C,此时A与C就是传递依赖关系,C就是冗余的。
举例来说,在学生表中,有编号(A),出生所在市(B),出生所在省(C),那么有了编号可以推出出生所在市,而有了出生所在市即可推出出生所在省,此时编号和出生所在省就是传递依赖关系。
1NF (First Normal Form) 原子性,所有属性都不再拆分。
A relation R is in first normal form (1NF) if and only if all underlying domains contain atomic values only.
2NF (Second Normal Form) 所有属性必需完全依赖于主键。
A relation R is in second normal form (2NF) if and only if it is in 1NF and every nonkey attribute is fully dependent on the primary key.
3NF (Third Normal Form) 没有传递依赖。
A relation R is in third normal form (3NF) if and only if it is in 2NF and every nonkey attribute is non-transitively dependent on the primary key.
Boyce/Codd Normal Form
A relation R is in Boyce/Codd normal form (BCNF) if and only if every determinant is a candidate key.
4NF (Fourth Normal Form)
A relation R is in fourth normal form (4NF) if and only if, wherever there exists an MVD in R, say A -> -> B, then all attributes of R are also functionally dependent on A. In other words, the only dependencies (FDs or MVDs) in R are of the form K -> X (i.e. a functional dependency from a candidate key K to some other attribute X). Equivalently: R is in 4NF if it is in BCNF and all MVDs in R are in fact FDs.
5NF (Fifth Normal Form)
A relation R is in fifth normal form (5NF) - also called projection-join normal form (PJ/NF) if and only if every join dependency in R is a consequence of the candidate keys of R.
For every normal form it is assumed that every occurrence of R can be uniquely identified by a primary key using one or more attributes in R.
FD = Functional Dependency
MVD = Multi-Valued Dependency
The Five Normal Forms - formal definitions
https://www.databasedesign-resource.com/normal-forms.html
Normal Forms in DBMS
https://www.geeksforgeeks.org/normal-forms-in-dbms/
数据库设计三大范式与BCNF
https://www.pianshen.com/article/8630838593/