Access数据库技术与应用
上QQ阅读APP看书,第一时间看更新

1.2 关系模型理论

1.2.1 实体、属性与联系

1.实体、属性

客观世界的万事万物在数据库领域内被称为实体(entity)。实体可以是实实在在的客观存在,例如工人、学生、商店、医院;也可以是一些抽象的概念或地理名词,如哮喘病、上海市。实体的特征(外在表现)称为属性(attribute),属性的差异能使人们区分同类实体。如一个人可以具备下列属性:姓名、年龄、性别、身高、肤色、发式、穿着等,根据这些属性就能在熙熙攘攘的人群中一眼认出所熟悉的人。

实体本身并不能被装进数据库,要保存客观世界的信息,必须将描述事物外在特征的属性保存在数据库中。例如,要管理学生信息,可以储存每一位学生的学号、姓名、性别、出生年月、出生地、家庭住址、各科成绩等,其中学号是人为添加的一个属性,用于区分两个或多个因巧合而属性完全相同的学生。在数据库理论中,这些学生属性的集合称为实体集(entity set),学号属性称为学生实体的码(key),又称关键字,码可以由一个属性构成,也可以由多个属性联合组成;在数据库应用中,实体集以数据表的形式呈现。

2.联系

客观事物往往不是孤立存在的,相关事物之间保持着各种形式的联系方式。在数据库理论中,实体(集)之间同样也保持着联系,这些联系同时也制约着实体属性的取值方式与范围。下面以“系”表和“导师”表为例进行说明,如表1-1和表1-2所示。

表1-1 “系”表

表1-2 “导师”表

假如问及李小严在哪个系任教,可以先检索“导师”表的“姓名”属性,得到李小严的系编号是“D02”。至于“D02”究竟是何系,然后据此再查阅“系”表,得知“D02”代表社科系。这个例子说明,实体集(数据表)之间是有联系的,“导师”表依赖于“系”表,“系编号”是联系两个实体集的纽带,离开了“系”表,则导师的信息不完整。在数据库技术术语中,两个实体集共有的属性称为公共属性。

3.实体的联系方式

实体的联系方式通常有3种:一对多、多对多和一对一。

(1)一对多

一对多联系类型是客观世界中事物间联系的最基本形式,上面例子中的“系”表与“导师”表这两个实体的联系方式就属于一对多联系,因为一个系可以有多名导师,而一名导师只能属于一个系。如果一个公司管理数据库中有“部门”表和“职工”表两个实体集,则两个表之间的关系也是一对多联系,因为一名职工只能隶属于一个部门,而一个部门则可以有许多名职工。

在数据库应用中,一对多联系形式无须直接表达,只要将“一”实体的码放入“多”实体中来隐含表示。例如,上例中“系”表中的码是“系编号”属性,要表达“系”表和“导师”表的一对多联系只需将“系编号”属性放入“导师”表中作为两个表之间的公共属性,如表1-1和表1-2所示。

(2)多对多

多对多联系类型是客观世界中事物间联系的最普遍形式,实际生活中“多对多”联系的实例可以说俯拾即是,例如:在一个学期中,一名学生要学若干门课程,而一门课程要让若干名学生来学习;一名顾客要逛若干家商店才能买到称心的商品,而一家商店必须有许多顾客光顾才得以维持;一个建筑工地需要若干名电工协同工作才能完成任务,反之一名电工一生中需要到许多个工地工作等。上述例子中,学生与课程之间、顾客与商店之间、电工与建筑工地之间的关系均为多对多联系。

在数据库应用中,多对多联系形式无法直接表达,必须引入第三个实体(又称复合实体)实现,将两个“多”实体中的码联合起来作为复合实体的码。例如,要表达“职工”表和“工地”表之间的多对多联系就需引入“工作量”表,“职工”表的码是“职工号”属性,“工地”表的码是“工地编号”属性,而“工作量”表的码是“职工号”+“工地编号”属性,分别如表1-3、表1-4和表1-5所示。

说明:在数据库应用中,一个多对多联系实际上是转换为两个一对多联系来间接表达的。例如,上例中,“职工”表和“工地”表之间的多对多联系是转化为两个一对多联系:“职工”表和“工作量”表(公共属性是“职工号”)、“工地”表和“工作量”表(公共属性是“工地编号”)。

表1-3 “职工”表

表1-4 “工地”表

表1-5 “工作量”表

(3)一对一

一对一联系较为少见,它表示某实体集中的一个实体对应另一个实体集中的一个实体,反之亦然。例如,为补充系的信息,添加一个“系办”表,表示每个系的系部办公室地点。从常识得知,一个系只有一个系部办公室,反之一个系部办公室只为一个系所有,如表1-1和表1-6所示。

由于“系”表与“系办”表中的每一行是一一对应的,因此可省略“系办”表中的“系编号”属性。实际应用中,更多的是将两表合二为一,如表1-7所示。

表1-6 “系办”表

表1-7 “系”表

1.2.2 3种数据模型

从数据库的逻辑结构角度,可以对现实世界中的实体、实体间联系以及数据的约束规则进行抽象,归纳出3种数据模型,分别是层次模型、网状模型和关系模型。

1.层次模型

在层次模型中,实体间的关系形同一棵根在上的倒挂树,上一层实体与下一层实体间的联系形式为一对多。现实世界中的组织机构设置、行政区划分关系等都是层次结构应用的实例。基于层次模型的数据库系统存在天生的缺陷,其访问过程复杂,软件设计的工作量较大,现已较少使用。

2.网状模型

网状数据模型又称网络数据模型,它较容易实现普遍存在的多对多关系,数据存取方式要优于层次模型,但网状结构过于复杂,难以实现数据结构的独立,即数据结构的描述保存在程序中,改变结构就要改变程序,因此目前已不再是流行的数据模型。

3.关系模型

关系模型自1970年被提出后,迅速取代层次模型和网状模型成为流行的数据模型。它的原理比较简单,其特征是基于二维表格形式的实体集,即关系模型数据库中的数据均以表格的形式存在,其中表完全是一个逻辑结构,用户和程序员不必了解一个表的物理细节和存储方式;表的结构由数据库管理系统(DBMS)自动管理,表结构的改变一般不涉及应用程序,在数据库技术中称为数据独立性。

例如,“导师”表中“姓名”字段原来可以容纳3个字符(在Unicode编码中,一个字符既可以表示一个英文字符,也可以表示一个汉字),随着外籍教师的引进,原来的“姓名”显然无法容纳一个西文的名字,于是将其扩展到20个字符,但相应的数据库应用程序却无须进行任何改动。

在基于关系数据模型的数据库中,现实世界中的一个实体转换为关系数据库中的一张表,实体的属性转换为表中的一列,称为字段(field);用于区分实体唯一性的码称为主键(primary key)。例如,在表1-1中,“系”实体转换为“系”表,有3个字段,其中“系编号”字段是主键。实体间的一对多联系通过将“一”表中的主键放入“多”表中作为外键(foreign key)来间接实现,例如,表1-1和表1-2;实体间的多对多联系通过引入第三张表来间接实现,并将两个“多”表的主键联合起来作为新表的主键,例如,表1-3、表1-4和表1-5。

基于关系数据模型的数据库系统称为关系数据库系统,所有的数据分散保存在若干个独立存储的表中,表与表之间通过公共属性实现“松散”的联系,当部分表的存储位置、数据内容发生变化时,表间的关系并不改变。这种联系方式可以将数据冗余(即数据的重复)降到最低。目前流行的关系数据库DBMS产品包括Access、SQLServer、My SQL、Fox Pro、Oracle等。

1.2.3 表的特点

在关系型数据库中,数据以表的形式保存,表具有以下特点:

(1)表由行、列组成,表中的一行数据称为记录,一列数据称为字段,每一列都有一个字段名。

(2)表中列的左右顺序是任意的。

(3)每个字段只能取一个值,不得放入两个或两个以上的数据。例如“导师”表的“姓名”字段只能放入一个人名,不应该同时放入曾用名,在确实需要使用曾用名的场合,可以添置一个“曾用名”字段。

(4)表中字段的取值范围称为域。同一字段的域是相同的,不同字段的域也有可能相同,例如“工资”表中的“基本工资”与“奖金”两个字段的取值范围都可以是10000以内的实数。

(5)表中行的上下顺序是任意的。

(6)表中任意两行记录的内容不应相同。