写点什么

数据库设计范式

用户头像
在即
关注
发布于: 2021 年 03 月 22 日
数据库设计范式

根据要求的程度不同,范式有多种级别

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

存在的问题:

用户享受的折扣与用户等级相关,两者存在依赖关系。采用这种方式设计的用户表存在如下问题。

插入异常:如果一个用户没有下过订单,则该用户无法插入;

删除异常:如果删除一个用户所有的订单,则该用户也会被删除;

更新异常:由于用户名冗余,修改一个用户时需要修改多条记录。如果稍有不慎,漏改某些记录,会出现更新异常。


发布于: 2021 年 03 月 22 日阅读数: 7
用户头像

在即

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
数据库设计范式