一:第一范式:
官方定义: 数据库表中的所有字段都是单一属性,不可再分的。强调的是列的原子性。
白话:每一列都有自己的属性说明,谁也帮不了谁,谁干谁的活。清晰明了。
二:第二范式
官方定义:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
白话:数据库表中有俩种身份 一种是主人 一种是仆人 仆人服务于主人。
例子:学生表中姓名、成绩、名次 这样一看就知道 姓名是主人 成绩和名次是仆人 服务于说明主人的信息
三:第三范式
官方定义:所有非主属性对任何候选关键字都不存在传递依赖
白话:有的时候字段有俩种身份既是主人又是仆人。
就是说我的仆人只服务于我 即使我是别人的仆人 我的仆人也不需要去服务我的主人
例子:学生表中姓名、成绩、名次、联系电话 但是联系电话现在需求有手机和固定电话俩种 这样一来本来联系电话只是个仆人
结果自己现在又是主人了,因为有俩个仆人需要服务联系电话。这个时候联系电话需要建一张主人表,然后让俩个仆人服务。
那么如果说表的字段变成 姓名、成绩、名次、手机电话、固定电话 第一范式是OK的
但是很显然的是 手机电话、固定电话的主人 是联系电话 而联系电话的主人是姓名
这样相当于越级了,所以呢怎么办 在开个主人表 也就是联系电话的 主人表
这个联系电话表 拥有 主键id 手机电话 固定电话
原来学生表还是 姓名、成绩、名次、联系电话
总结来说就是 仆人永远要服务于自己的主人 主人需要拥有自己的表 当然自己的主人也可以是别人的仆人 这就跟你无关了