第一范式(1NF)
:强调的是字段的原子性,即一个字段不能够再分成其他几个字段。
说明:这种表结构设计就没有达到 1NF,要符合 1NF 我们只需把字段拆分,即:把 contact 字段拆分成 name 、tel、addr 等字段。
第二范式(2NF)
满足 1NF的基础上,另外包含两部分内容:一是表必须有主键。 二是非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分。
举例:OrderDetail表中的主键为OrderID(订单ID)和ProductID(产品ID),UnitPrice(单价)受ProductId(产品ID)约束,属于部分依赖于主键。同样ProductName(商品名称)受UnitPrice(订单ID)约束,属于部分依赖于主键,因此不满足第二范式要求。
修改后:
可以看出两个表中的红框为主键,非主键字段全部依赖于主键字段。满足二范式。
第三范式(3NF)
第三范式(3NF): 满足 2NF,另外非主键字段必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键字段 A 依赖于非主键字段 B,非主键字段 B 依赖于主键的情况。
举例:在Order表中OrderID为主键,其余字段都是直接依赖于主键,满足第二范式。通过观察,发现CustomerName(用户名称)、用户地址字段都是直接依赖于用CustomerID(用户ID),从而间接的依赖于主键。不满足第三范式。
修改后:
所有非主键字段都是直接依赖于主键字段。
ER模型