欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

什么是数据库三范式?

程序员文章站 2022-05-03 21:33:33
...

数据库三范式理解

第一范式(1NF):所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

理解注释:列不可分,或者理解为原子性。

第二范式(2NF):在理解第二范式(2NF)之前首先了解什么是组合主键,当一个字段无法确定唯一性的时候,需要其他字段来一起形成唯一性。就是说用来组成唯一性的字段如果有多个就是组合主键。

学生成绩(学号,课程号,成绩)
那学号和课程号就可以做为联合主键。
因为学号和课程号决定了成绩。也就是说。你要知道成绩,你就要知道学号,知道学号,但还不能知道某一科的成绩。还要知道课程号。
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一的区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识即主键。要求实体的属性完全依赖于主键关键字。第二范式主要是为了防止以下情况的发生,一张表存在组合主键时,其他非主键字段不能部分依赖。如:
学生成绩(学号,课程号,课程名称,课程成绩)
课程成绩由主组合主键学号和课程号决定,但是课程名称只由课程号可以决定,所以违反了第二范式。
理解注释:不能部分依赖。
第三范式(3NF):满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中除主键外,其他字段必须依赖主键。在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。如:
学生表(学号,学生姓名,学院,学院电话)
学院电话依赖学院,学院依赖学生信息,所以学院电话和学生信息之间存在传递依赖。所以不满足第三范式。
理解注释:不能存在传递依赖。即:除主键外,其他字段必须依赖主键。
附加:
对于是否建中间表的问题。
如果两张表之间关系为多对多的关系,则需要建中间表。如果两张表之间的关系为多对一或者一对多的关系,则通过主外键连接就行,不需要建立中间表。

以上就是什么是数据库三范式?的详细内容,更多请关注其它相关文章!