范式:Normal Format,是一种离散数学中的知识。是为了解决数据的存储与优化的问题,终极目标是为了减少数据的冗余。
范式是一种分层结构的规范,分为6层,每一层都比上一层更加严格,若要满足下一层范式,前提是必须满足上一层范式。
六层范式分为:1NF,2NF,3NF,4NF,5NF,6NF。1NF是最底层的范式,要求最低。6NF是最高层,要求最严格。
Mysq是一种关系形的数据库,会有空间的浪费,遵循范式也是为了节省存储空间,所以会利用范式来指导思想。
但是,范式只是为了解决空间问题,在设计数据库时又不可能完全按照范式的要求来实现,所以在一般情况下,只需要满足前三种范式。
1. 1NF
1NF--:原子性
第一范式要求字段的数据具有原子性,不可再分,如果一个字段中存储的数据在使用时,取出之前还需要再分,那么就不满足第一范式。
例如:
在设计一张球员信息表时,我在设计其球员名字和球队名本应该是两个字段,但如果设计成了一个字段,那么就不满足第一范式。
2. 2NF
第二范式:在表设计的时候,如果有复合主键存在(多字段主键),且表中非主键并不是由整个主键来确定的,而是依赖主键中的每个字段,称这种情况为部分依赖,第二范式解决的就是出现部分依赖的问题。
简单来说:
2NF--唯一性:表中的每条记录必须是唯一的。
例如:创建一学生成绩张表时,一个学生在早上考试时考了59,没有及格,下午参加补考时也考了59,如果没有定义一个唯一的数据来区分,就很难分清。
而增加了一个流水号后:
这样就很好区分两个数据,使两个数据具有了唯一性。
3. 3NF
第三范式:在一张表中,应该所有的字段都依赖于主键。而如果存在一个字段依赖于一个非主键字段而存在,那么把这种情况称为存在传递依赖,第三范式要解决的就是存在传递依赖的问题。
3NF--关联性:每列都与主键存在直接关系,不存在传递依赖。
例如:创建一张球队球员信息表,存储数据
表中球队作为主键,球员依附球队而存在,而球员的球鞋,号码依附与非主键字段球员而存在,不满足第三范式。
而应该拆分成其它的一个表。