简单来说就是:原子性、唯一性、独立性
后一范式都是在前一范式已经满足的情况进行附加的内容
第一范式(1NF):原子性
存储的数据应不可再分。
不满足原子性:
满足原子性:
第二范式(2NF):唯一性
非主键字段的值必须完全依赖主键(不能部分依赖)
主键有下面两种情况:
设定一个字段为主键:一个字段的值就可以明确确定一行数据。
设定多个字段为主键:只有这多个字段的值都确定后才能确定一行数据。此时也称为“联合主键”。
假设联合主键有两个字段:学号和班级
PRIMARY KEY (StudentID, ClassID)
那么非主键字段需要同时依赖学号和班级,而不能只依赖其中一个字段(这叫部分依赖)。
第三范式(3NF):独立性
消除传递依赖(非主键值不依赖于另一个非主键值)。
例如:此时主键是学生id,但非主键字段(院系电话)依赖于另一个非主键字段(院系),故不符合第三范式。
进行改进拆分后,满足第三范式:
注意
三范式是条件的叠加补充,后一范式需满足前一范式。
在实践中,满足三范式只要做到“一个表只存一种数据”基本就可以实现。
有时候为了数据的使用方便,还会(需要)故意违反范式。