数据库设计范式
根据要求的程度不同,范式有多种级别
Edgar Frank Codd 于 1971 年相继提出
最常用的第一范式(1NF)、第二范式(2NF)和第三范式(3NF)
后来,又有人提出了 Boyce-Codd 范式(BCNF)、第四范式(4NF)和第五范式(5NF)等。
一般来说,数据库设计只需满足第三范式(3NF)就可以了。
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值,或不能有重复的属性。
简而言之,第一范式遵从原子性,属性不可再分。
用户与用户联系表,不满足第一范式(1NF)的情况、
张三 邮箱:zhangsan@example.com,手机号:1890000000
李四 邮箱:lisi@example.com,手机号:15900000000、17300000000
存在的问题:“联系方式”包含了多个值。
张三 zhangsan@example.com18900000000
李四 lisi@example.com1590000000017300000000
存在的问题:“手机号”属性重复。
第二范式(2NF)是在第一范式的基础上建立起来的,满足第二范式必须先满足第一范式。第二范式要求实体的属性完全依赖于主键,不能仅依赖主键的一部分(对于复合主键而言)。
简而言之,第二范式遵从唯一性,非主键字段需完全依赖主键。
第三范式(3NF)是在第二范式的基础上建立起来的,即满足第三范式必须先满足第二范式。第三范式要求一个数据表中每一列数据都和主键直接相关,而不能间接相关。
简而言之,第三范式就是非主键字段不能相互依赖。
用户编号 用户名 用户等级 享受折扣
1 张三 1 0.95
2 李四 1 0.95
3 王五 2 0.85
存在的问题:
用户享受的折扣与用户等级相关,两者存在依赖关系。采用这种方式设计的用户表存在如下问题。
插入异常:如果一个用户没有下过订单,则该用户无法插入;
删除异常:如果删除一个用户所有的订单,则该用户也会被删除;
更新异常:由于用户名冗余,修改一个用户时需要修改多条记录。如果稍有不慎,漏改某些记录,会出现更新异常。
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/535935f29c43b116285172f51】。文章转载请联系作者。
评论