你了解数据库三大范式吗?用来解决什么问题?

数据库的三大范式偶尔会被问起,面试官想考察的是我们平时开发中建表、字段时的一些经验和见解,并不是希望听到那些理论的东西。所以可以先大概说一下三大范式的概念,然后从实际开发经验出发,结合数据表设计方面说起。

第一范式:强调的是列的原子性,即每一列都是不可再分的最小数据单元。

举例:一张用户表中的有个地址字段,它包括了国家省份城市,这个字段就不符合第一范式,因为它还可以继续拆分为三个字段,国家,省份,城市。

第二范式:
1、满足第一范式
2、表必须有一个主键
3、对于没有包含在主键中的列(非主键的其他列)必须完全依赖于主键,而不能只依赖于主键的一部分(比如联合主键中的某一个键)

第三范式:
1、满足第二范式
2、非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列B 依赖于主键的情况。

举例:比如一张学生表的主键是学生id,它还包括两个字段分别是班级id,班级描述。这个班级描述字段并不直接依赖于主键,而是依赖于班级id。所以不符合第三范式。

三大范式解决的问题:

  • 消除重复数据减少冗余数据,从而让数据库内的数据能划分的更合理,让磁盘空间得到更有效利用的一种标准化标准;
  • 消除潜在的异常(插入异常,更新异常,删除异常)

你可能感兴趣的:(面试,MySQL,数据库,database,sqlserver)