Access数据库应用教程(2010版)
上QQ阅读APP看书,第一时间看更新

1.3 关系数据库

关系数据库是基于关系模型的数据库。美国IBM公司的E.F.Codd于1970年发表论文,系统而严格地提出关系模型的概念,奠定了关系数据库的理论基础。20世纪80年代以来,计算机厂商推出的数据库管理系统几乎都支持关系模型。关系数据库是当今主流的数据库。Access就是一个关系数据库管理系统,使用它可以创建某一具体应用的Access关系数据库。

1.3.1 关系数据库的基本概念

学习Access关系数据库系统,首先需要理解和掌握有关关系数据库的基本概念。

1. 关系

关系的含义是数据间的联系,例如,图书编号、图书名称、作者、出版社和定价等组成有意义的图书信息,多条这样的信息组成一个关系。

一个关系就是一张二维表。通常将一个没有重复行、重复列,并且每个行列的交叉点只有一个基本数据的二维表格看成一个关系,每个关系都有一个关系名。这种用二维表的形式表示实体以及实体间联系的数据模型称为关系模型。

值得说明的是,在表示概念模型的E-R图转换为关系模型时,实体以及实体之间的联系都要转换为一个关系,即一张二维表。

图1-6为贯穿本书的图书管理系统的关系模型,其中包括4个关系组成的数据表,分别是“读者”表、“借阅”表、“图书”表和“图书分类”表,如表1-1~表1-4所示。本书后续章节中有部分例题的数据与这里列出的相同。

015-01

图1-6 图书管理系统的关系模型

表1-1 “读者”表

016-01

表1-2 “借阅”表

016-01

表1-3 “图书”表

016-01

表1-4 “图书分类”表

016-01

2. 元组

二维表的每一行在关系中称为一个元组。在Access中,一个元组对应表中的一条记录。

3. 属性

二维表的每一列在关系中称为属性。每个属性都有一个属性名,一个属性在其每个元组上的值称为属性值。一个属性包括多个属性值,只有在指定元组的情况下,属性值才是确定的。在Access中,一个属性对应表中的一个字段(Field),属性名对应字段名,属性值对应各个记录的字段值。

4. 域

属性的取值范围称为域。域作为属性值的集合,其类型与范围由属性的性质及其所表示的意义具体确定。同一属性只能在相同域中取值。例如,表1-1中的“性别”属性的域是“男”或“女”。

5. 关键字(Key)

在关系模型中,能唯一标识关系中不同元组的属性或属性组合,称为该关系的一个关键字。单个属性组成的关键字称为单关键字,多个属性组成的关键字称为组合关键字。需要强调的是,关键字的属性值不能取“空值”。所谓空值就是“不知道”或“不确定”的值,因为空值无法唯一地区分、确定元组。

在“读者”表中,“读者编号”属性可以作为使用单个属性构成的关键字,因为读者编号不允许重复。而“姓名”则不能作为关键字,因为可能存在重名的读者。

关系中能够成为关键字的属性或属性组合可能不是唯一的。凡是在关系中能够唯一区分、确定不同元组的属性或属性组合,均称为候选关键字。在候选关键字中选定一个作为该关系的主关键字,简称主键或主码。关系中的主关键字是唯一的。在图1-6所示的各表中,小钥匙图标表示该表的主键。

关系中某个属性或属性组合并非关键字,但却是另一个关系的主关键字,称此属性或属性组合为本关系的外部关键字。关系之间的联系是通过外部关键字实现的。例如,“分类号”是“图书”表和“图书分类”表的联系字段,它是“图书分类”表的主关键字,同时又是“图书”表的外部关键字。

6. 关系模式

对关系的描述称为关系模式,其表示格式如下。

关系名(属性名1,属性名2,…,属性名n

关系既可以用二维表格来描述,也可以用数学形式的关系模式来描述。一个关系模式对应一个关系的结构。在Access中,这就是表的结构,其表示格式如下。

表名(字段名1,字段名2,…,字段名n

例如,“读者”表对应的关系模式可以表示为:读者(读者编号,姓名,性别,工作单位,电话,照片)。

可以这样定义关系模式和关系模型:关系模式是属性名及属性值域的集合,关系模型是一组相互关联的关系模式的集合。

1.3.2 关系的基本性质

在关系模型中,对关系做了种种规范性限制。关系具有以下基本性质。

(1)关系必须规范化,属性不可再分割。规范化是指关系模型中每个关系模式都必须满足一定的要求,最基本的要求是关系必须是一张二维表,每个属性必须是不可分割的最小数据单元,即表中不能再包含表。

例如,表1-5不能直接作为一个关系,因为该表的“联系方式”列有2个子列,这与每个属性不可再分割的要求不符。

表1-5 不能直接作为关系的表格

016-01

规范化表1-5,只需去掉“联系方式”项,将“电话号码”、“电子邮箱”直接作为基本数据项即可。规范化后的结果如表1-6所示。

表1-6 修改后的表格

表1-1 关系Student(学生情况表)

34599-00-025-1

(2)在同一关系中不允许出现相同的属性名。一个关系中每一列的属性名必须是唯一的,不能重复。

(3)关系中不允许有完全相同的元组。

(4)在同一关系中元组的次序无关紧要。任意交换两行的位置不影响数据的实际含义。

(5)在同一关系中属性的次序无关紧要。任意交换两列的位置不影响数据的实际含义,且不会改变关系模式。

以上是关系的基本性质,也是衡量一个二维表格是否构成关系的基本要素。在这些基本要素中,有一点是关键,即属性不可再分割,表中不能套表。

1.3.3 关系运算

关系模型的数据操作可以通过关系运算来实现。关系运算的输入是一个或多个关系,其输出为一个关系。关系的基本运算有两类,一类是传统的集合运算,如并、交、差;另一类是专门的关系运算,如选择、投影、自然连接。

1. 选择运算

从关系中挑选出满足给定条件的记录(或元组)的过程称为选择运算。

【例1-1】 从表1-3所示的“图书”关系中选择出版社为“人民邮电出版社”的元组,结果如表1-7所示。选择运算的结果是一个新的关系。

表1-7 选择运算的结果

016-01

2. 投影运算

从关系中挑选出指定的若干个字段(或属性)的过程称为投影运算。同样,投影运算的结果是一个新的关系。

【例1-2】 从表1-1所示的“读者”关系中选择读者编号、姓名、性别、工作单位4个属性列,结果如表1-8所示。

表1-8 投影运算的结果

016-01

3. 自然连接运算

选择和投影运算的操作对象只是一个关系,相当于对一个二维表进行切割。自然连接运算(也称为内连运算、inner join)要求两个关系参与运算,生成的新关系中包含满足连接条件的元组。如果需要连接两个以上的关系,应当两两进行连接。

参与自然连接运算的两个关系必须有一个公共属性(称为连接属性)。所谓公共属性,它是一个关系R(称为被参照关系或目标关系,常被称为一表)的主键,同时又是另一关系K(称为参照关系,常被称为多表)的外键。在图1-6中,“图书分类”表(一表)中的主键是分类号,而分类号在“图书”表(多表)中是外键。

自然连接运算的结果:在属性上是两个参与运算关系的属性叠加;在元组上是在多表元组的记录基础上,扩展连接属性相同时的一表对应的数据值。

【例1-3】 设有“读者”表和“借阅”表两个关系,如表1-1和表1-2所示。查找借阅过图书的读者编号、姓名、工作单位、图书编号、借阅日期。

由于读者编号、姓名、工作单位在“读者”表中,图书编号、借阅日期在“借阅”表中,因此需要将这两个关系通过公共属性名“读者编号”连接起来。连接条件必须指明两个关系的“读者编号”对应相等,然后对连接生成的新关系按照所需的5个属性进行投影。此例的查询结果如表1-9所示。

表1-9 自然连接与投影运算结果

016-01

1.3.4 关系的完整性约束

关系的完整性约束是为了保证数据库中数据的正确性和一致性,对关系模型提出的某种约束条件或规则。完整性通常包括实体完整性、参照完整性和域完整性。其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件。

通俗地说,数据库关系完整性约束实际上是定义数据必须满足的基本要求,当数据违反数据库关系完整性约束时,数据库将拒绝数据的插入或更新,通过关系完整性可以保证数据库中没有冗余、垃圾数据。或者说,通过定义关系的完整性约束,使得数据库有了一定的行为能力。当用户提交违背数据库关系完整性约束的数据时,数据库将拒绝用户的提交操作,以保证数据库中的数据是真实有效的。

1. 实体完整性

实体完整性是指关系的主关键字不能重复,也不能取空值,用来保证关系中的每个元组都是唯一的。主关键字的取值不同一定代表了两个完全不同的记录,即使它们的其他属性取值相同也是如此。

在现实世界中的实体是可以相互区分、识别的,即它们具有某种唯一性标识。在关系模式中,按实体完整性规则要求,主属性不得取空值。如果主关键字是多个属性的组合,则所有主属性均不得取空值。否则,表明关系模式中存在着不可标识的实体(因空值是“不确定”的),这与现实世界的实际情况相矛盾,这样的实体不具备实体完整性。

例如,表1-1中的“读者”关系,读者中可能存在姓名相同的人,但他们是两个不同的人,因此用“姓名”作为主关键字是不可取的。而“读者编号”能唯一标识一个读者,因此将“读者编号”属性作为主关键字。所有“读者编号”值不能重复,以保证每一个读者都是可以相互区分的实体;“读者编号”也不能取空值,否则无法对应某个具体的读者,并且这样的表格不完整,对应关系不符合实体完整性规则的约束条件。

2. 参照完整性

关系数据库中通常包含多个存在相互联系的关系(表),关系与关系之间的联系是通过公共属性来实现的。

所谓参照完整性是指参照关系K中外部关键字的取值必须是空值或者与被参照关系R中某个元组主关键字的值相同。

图1-6所示的两表之间的连线表示两表之间的参照完整性约束。如果将“借阅”表作为参照关系(多表),将“读者”表作为被参照关系(一表),将“读者编号”作为两个关系进行关联的属性,则“读者编号”是“读者”表的主关键字,是“借阅”表的外部关键字,即“借阅”表中的“读者编号”属性取值必须与“读者”表中的某个“读者编号”值相同。

说明

参照完整性建立了具有主关键字的关系与具有外部关键字的关系之间引用的约束条件。

3. 域完整性

域完整性又称为用户自定义完整性,是指根据应用环境的要求和实际需要将某些属性的值限制在合理的范围内,超出限定范围的数据不允许输入。例如,“性别”属性的取值只能是“男”或“女”,不能有其他值,在此范围之外的“性别”数据都违反了域完整性要求,数据库将不允许数据进行插入或更新操作。