关系数据库(RDBMS)小记

原文链接:http://www.cnblogs.com/z-sm/p/10634896.html

关系数据库三个范式

三个范式:

第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性

这里说的不可拆分通常是放在业务背景下而言的,是否可拆分视业务需求而定。如一张student表的adress表存省市县时,如果业务需要针对更细粒度地址如市、县做些CRUD操作则需要adress字段拆成province、city等字段。

第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情

如包含school_name、school_address字段的student表中,school_address是依赖于school而非student的,故应将school信息抽离到单独的表中。

 第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)

上述school信息抽离到单独表后,student表中只需有school_id(外键)来关联school即可,而不需要其他school相关属性,因为其他school属性直接依赖于school_id而非student_id

 

区别:

第 一范式和第二范式在于有没有分出两张表,第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表, 第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)

总结:

第一范式:每个表中都有1列,并且该列是不可拆分的最小单元

第二范式:1张表只描述一件事情

第三范式:用外键做表的关联

 

数据库范式只是理论上建议这样设计,实际中结合业务需要可视情况稍有违背,而不是死脑筋一味地按该范式来。

 

转载于:https://www.cnblogs.com/z-sm/p/10634896.html

上一篇:mysql – 用于存储产品信息的noSQL?


下一篇:如果查询在MySql中返回空值,如何设置0?