范式整理及理解

范式

满足范式的数据库有以下特征:简洁,明了,不会因为发生插入(insert),删除(delete),更新(update)等操作发生异常。
数据库范式的级别:1nf,2nf,3nf,BCNF,4FN,5NF,一般商用满足BCFN就可以了。

**注:**符合高一级的范式必定符合第一范式,范式是建立在函数依赖基础上的。

函数依赖定义及类型

定义:
设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X。(可以理解为数学上的定义域和值域的关系)

平凡函数依赖

当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。

非平凡函数依赖

当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。

完全函数依赖
设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

部分函数依赖

设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

传递函数依赖
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

范式类型及主要特征

第一范式

如果关系模式R是第一范式的模式,那么,R的每一个关系r的属性都是原子项,不可分割。简单地说:第一范式一定是一个二维表。
第一范式的缺点:容易造成,数据冗余,插入,删除,修改异常。

第二范式

在第一范式的基础上,消除了非主属性对主键的部分依赖。

主键:可以确定一列数据的唯一性的字段。
主属性:码里面的属性就是主属性,其他的属性叫做非主属性。

每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。


一个学生上一门课,一定在特定某个教室。所以有(学生,课程) \longrightarrow 教室;
一个学生上一门课,一定是特定某个老师教。所以有(学生,课程) \longrightarrow 老师;
一个学生上一门课,他老师的职称可以确定。所以有(学生,课程) \longrightarrow 老师职称;
一个学生上一门课,一定是特定某个教材。所以有(学生,课程) \longrightarrow 教材;
一个学生上一门课,一定在特定时间。所以有(学生,课程) \longrightarrow 上课时间。

因此(学生,课程)是一个联合主键。

第二范式的问题

过于依赖主键造成的缺点:

  • 数据冗余:,每条记录都含有相同信息。
  • 删除异常:删除所有学生成绩,就把课程信息全删除了。
  • 插入异常:学生未选课,无法记录进数据库。
  • 更新异常:调整课程学分,所有行都调整。

解决方法:投影分解,将一个表分解成两个或若干个表。

第三范式

数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a–>b–>c 属性之间含有这样的关系,是不符合第三范式的。

冗余性:要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

表:学号, 姓名, 年龄, 学院名称, 学院电话
因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

第三范式的问题

  • 数据冗余:有重复值。
  • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

解决方法:

  • 继续投影分解
  • BC范式(BCNF):符合3NF,并且,主属性不依赖于主属性。
  • 若关系模式属于第一范式,且每个属性都不传递依赖于键码,则R属于BC范式。
发布了19 篇原创文章 · 获赞 9 · 访问量 878

猜你喜欢

转载自blog.csdn.net/qq_43761222/article/details/104575079