日期:2014-05-16  浏览次数:20492 次

数据库 游标,范式的透彻理解

1:游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

/*游标的作用*/
--允许定位到结果集中的特定行。
--从结果集的当前位置检索一行或多行数据。
--支持对结果集中当前位置的行进行修改


2:事务是什么?

答:事务是作为一个逻辑单元执行的一系列操作。一个逻辑工作单元必须有4个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能称为一个事务。


3:范式

假设表(A,B,C,D)中A,B是候选键,那么:(A,B)→ C(或者D)

a:2NF说的是,不存在A(或者B)→C(或者D),也就是说非主属性的元素不能部分依赖于候选键(也就是主关键字到某个字段)。

b:3NF说的是,不存在(A,B)→ C → D这样的传递函数依赖(这里只是说非主属性)

c:BCNF范式,在3NF基础上,把主属性也算上了。不仅没有(A,B)→ C → D,还要

没有关键字段决定关键字段的情况。


1NF:第一范式。如果关系模式R的所有属性的值域中每一个值都是不可再分解的值,则称R属于第一范式模式。第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或由组属性组成。简而言之,第一范式就是无重复的列。

     


2NF:第二范式。如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称R为第二范式模式。(如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。) 

        <……超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
                  候选键(candidate key):不含有多余属性的超键称为候选键
                  主键(primary key):用户选作元组标识的一个候选键程序主键……>

        这里,注意点a非主属性,完全函数依赖,候选键(而不是候选键里面的某个字段)。 第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。

 

例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。

简而言之,第二范式(2NF)就是非主属性完全依赖于主关键字。

 

所谓完全依赖是指不能存在仅依赖主关键字一部分的属性(设有函数依赖W→A,若存在XW,有X→A成立,那么称W→A是局部依赖,否则就称W→A是完全函数依赖)。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

 

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

 

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

 

这个数据库表不满足第二范式,因为存在如下决定关系:

 

(课程名称) → (学分)

 

(学号) → (姓名, 年龄)

 

存在组合关键字中的字段决定非关键字的情况。所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。



3NF:第三范式。如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。 [ 消除传递依赖 ]

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。第三范式就是属性不依赖于其它非主属性。

所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。

因此,满足第三范式的数据库表应该不存在如下依赖关系:

 

关键字段 → 非关键字段x → 非关键字段y

 

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

 

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

 

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

 

(学号) → (所在学院) → (学院地点, 学院电话)

 

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

 


BCNF:BC模式。如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R为BCNF的模式



4NF:第四范式。设R是一个关系模式,D是R上的多值依赖集合。如果 D中成立非平凡多值依赖X→→Y时,X必是R的超键,那么称R是第四范式的模式。



4.设有关系R(S,D,M),其函数依赖集F={S→D,D→M}。则关系R至多满足2NF: 存在传递依赖关系,那么最多满足第二范式。因为3NF消除了非主属性的传递依赖关系,而2NF消除了非主属性到部分依赖关系。