2.3 关系数据库 l 2.3.1 关系数据库的概念
关系数据库(Relation database)是以关系模型为基础的数据库,它是利用关系来描述实体及实体之间的联系。简单地说,一个关系数据库是若干个关系的集合。一个关系可表示为一张二维表(也称数据表),一个关系数据库也可以理解为若干张二维表的集合。
Ø 一张数据表是由一系列的记录(行)组成,每一条记录由若干个数据项组成。数据项也是前面讲到的字段值、属性值,是关系数据库中最小的数据单位,不能再分解。
Ø 每一张数据表都有自己的表名。在同一个数据库中,表名唯一。当要访问数据库中的某一个数据项时,先通过表名找到相应的数据表,然后检索到该数据项所在的记录,最后通过记录访问到该数据项。
Ø “元组”、“分量”等概念多用于描述关系模型,可理解为理论范畴中的概念;而“记录”、“数据项”则分别是“元组”、“分量”在关系数据库中的映象,理解为它们的实例化对象。它们基本上是对应的。这种对应关系说明如表2.15所示(但这种对应关系不是严格的,在使用中要视上下文而定)。
• 2.3.2 关系数据库的特点
关系数据库的主要特点和优点包括:
Ø 具有较小的数据冗余度,支持创建数据表间的关联,支持较为复杂的数据结构。
Ø 应用程序脱离了数据的逻辑结构和物理存储结构,数据和程序之间的独立性高。
Ø 实现了数据的高度共享,为多用户的数据访问提供了可能。
Ø 提供了各种相应的控制功能,有效保证数据存储的安全性、完整性和并发性等,为多用户的数据访问提供了保证。
2.4 函数依赖 l 2.4.1 函数依赖的概念
定义2.3 设R(U)是属性集U上的一个关系模式,A, B ⊆ U,对于R(U)的任意一个可能的关系r,若关系r的两个元组x1, x2满足x1(A) = x2(A),则必有x1(B) = x2(B),那么A函数决定B,或称B函数依赖于A,记为A→B,A中的每个属性都称为决定因素(Determinant),其中x1(A)表示元组x1在属性集A上的取值。如果A→B且B→A,则记为A↔B;如果A→B不成立,则记为 AB。
Ø 函数依赖不是指关系模式R(U)的某一个或某一些关系满足的约束条件,而是指关系模式R(U)的所有关系均需要满足的约束条件。
【例2.2】表2.3所示的学生关系模式student(学号, 姓名, 性别, 专业号)。学号是不允许重复的,如果学号相同的两个学生元组在其他属性上的取值肯定相同,可以推出{学号} →{姓名}, {学号} → {性别}, {学号} → {专业号}。
l 属性间的这种函数依赖关系跟语义有关,它属于语义范畴的概念。
【例子】 如果不允许出现重名的学生元组,则可以有{姓名} →{学号},进而{学号} ↔ {姓名}。
l 如果属性集是由单个属性构成,标志集合的大括号“{”和“}”可以省略,如“{学号} →{姓名}”可以写成“学号→ 姓名”。
l 注意,在实际数据库开发中,可以从用户提供的需求说明中或是从基本常识中获取函数依赖关系,例如上述“学号→ 姓名”就是一个基本常识。
定义2.4 设R(U)是属性集U上的一个关系模式,A,B ⊆ U。若A→B是一个函数依赖,如果B→A,则称A→B为一个平凡函数依赖;如果B⊄A,则称A→B为一个非平凡函数依赖。
Ø 对于任意B⊆A,显然有A→B,它是一种平凡函数依赖。
【例子】“{学号, 姓名} → 姓名”是一种平凡函数依赖。由于平凡函数依赖没有实际意义,一般不予以讨论,在默认情况下提到的函数依赖均指非平凡函数依赖。