数据库-三大范式

第一范式(1NF)

第一范式(1NF):每一个列不可再分
理解:不能有可以被继续拆分的列
比如:

不满足第一范式(1NF)

姓名 班级
张三 计科1903

拆分列后满足第一范式(1NF)

姓名 专业 班号
张三 计科 1903

第二范式(2NF)

第二范式(2NF):在第一范式的基础上,每一个行的非主属性依赖于主属性
理解:每一行必须有一个主键,并且存在多对多关系时必须拆分开

比如:

不满足2NF:

订单编号 商品编号 商品名称 商品数量 商品价格 客户姓名 客户电话
0001 1 面包 10 $5 张三 130-2483-4321
0001 2 火腿 20 $3 张三 130-2483-4321
0002 2 火腿 5 $3 李四 155-1341-4521

原因分析:

表中选用(订单编号, 商品编号)联合作为联合主键。

但是我们发现,不是所有属性字段都完全依赖联合主键的,它们或许只依赖主键中的一部分,这种部分依赖的关系是不满足2NF的!

这里的例子中,商品名称、商品价格这两个字段都是只依赖于(商品编号)这个字段的,也就是说它们只依赖于联合主键中的一部分。因此我们需要进行拆表!

1.订单信息表

订单编号 客户姓名 客户电话
0001 张三 130-2483-4321
0002 李四 155-1341-4521

2.订单商品数量表

订单编号 商品编号 商品数量
0001 1 10
0001 2 20
0002 2 5

(商品数量是同时依赖于订单编号和商品编号的, 在这个表中,订单编号和商品编号仍然是作为联合主键)

3.商品信息表

商品编号 商品名称 商品价格
1 面包 $5
2 火腿 $3

第三范式(3NF)

第三范式(3NF):消除间接依赖

理解:每一行数据除了可以存储其他表的主键不能存储非主键列

比如:

不满足第三范式(3NF)

姓名 专业 班号 课程编码 课程名称 教师
张三 计科 1903 001 计算机 王五
李四 生化 5903 003 物化 赵六

拆分后满足第三范式(3NF)

姓名 专业 班号 课程编码
张三 计科 1903 001
李四 生化 5903 003
课程名称 课程名称 教师
001 计算机 王五
003 物化 赵六
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1NF: 强调列的原子性 即列不能够再分成其他几列 第一种表设计: 注意: 不符合第一范式,region列不具有原...
    蛮荒月阅读 814评论 0 0
  • 数据库设计三大范式 一个设计合理的表,能给服务器性能带来很大的提高,因此如何设计出比较合理的表就比较重要了,设计范...
    勤奋的派大星阅读 2,308评论 0 0
  • 概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,...
    stutterr阅读 25,142评论 6 20
  •   数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(i...
    小超_8b2f阅读 871评论 0 1
  • 数据库三大范式 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会...
    小敢敢不憨a阅读 352评论 0 0