第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)
比如:姓名、年龄、电话,要分三个字段,不能放一个里面,方便查询。
第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)
就是说你的数据不要造成主键重复。比如你把学生的姓名做主键,姓名是会重复的,要用学号做主键。
第三范式(3NF):满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)
比如一个表:学号、学生姓名、所选课程id、所选课程老师。学生姓名、所选课程id 依赖于 学号,所选课程老师 依赖于 所选课程id。
不过一般复杂的表为了避免连接查询都会有冗余字段,违反第三范式很正常。