1NF
、2NF
、3NF
第一范式:数据库中的每一列必须是不可拆分的最小单元,满足每一列的原子性。
上图表的设计明显不符合第一范式,因为列下面又出现了复合列,破坏了数据库中的每一列都必须不可拆分的最小单元的原则。实际上在现有的Relational DBMS
中,这种结构的表也是创建不出来的,关系型数据库不允许把数据库表的一列再分成两列或者多列,所以在关系型数据库中创建的表均满足最基础的第一范式。
创建:
id | region |
---|---|
1 | 中国上海市 |
2 | 中国浙江省 |
3 | 加拿大魁北克省 |
如果业务需要的话,则region
还可以继续拆分为:country
和province
id | country | province |
---|---|---|
1 | 中国 | 上海市 |
2 | 中国 | 浙江省 |
3 | 加拿大 | 魁北克省 |
第二范式:属性完全依赖于主键,消除部分子函数依赖。
简而言之,第二范式(2NF
)就是非主属性完全依赖于主键。
第二范式要求数据库表中的每一行都可以被唯一区分!为实现区分通常要为表添加一唯一属性列,用来存储每一行