数据库开发技术标准教程
上QQ阅读APP看书,第一时间看更新

2.2 关系数据库

关系数据库是当前信息管理系统中最常用的数据库,关系数据库采用关系模式,应用关系代数的方法来处理数据库中的数据。

2.2.1 关系的基本概念

1. 关系的数学定义

1)域

域(Domain):一组具有相同数据类型的值集合。例如,{自然数},{男,女},{0,1}等都可以是域。

基数:一个域允许的不同取值个数称为这个域的基数。

[例2.1]

D1={张三,李四,王五},表示姓名的集合,基数是3。

D2={销售部,人事部},表示部门的集合,基数是2。

2)笛卡儿积

给定一组域D1D2,…,Di,…,Dn(可以有相同的域),则笛卡儿积定义为:

D1D2DiDn={(d1d2,…,di,…,dn)∣diDi,i=1,2,…,n}

例2.1中的D1D2的笛卡儿积为:

D1D2={(张三,销售部),(张三,人事部),(李四,销售部),(李四,人事部),(王五,销售部),(王五,人事部)}

其中,每个(d1d2,…,di,…,dn)叫作元组,元组中的每一个值di叫作分量,di必须是Di中的一个值。

显然,笛卡儿积的基数就是构成该积所有域的基数累乘积,若Dii=1,2,…,n)为有限集合,其基数为mii=1,2,…,n),则D1D2DiDn笛卡儿积的基数M为:

例2.1中的D1D2的笛卡儿积的基数是M=m1m2=3×2=6,即该笛卡儿积共有6个元组,它可组成一张二维表,如表2.2所示。

表2.2 D1D2的笛卡儿积

3)关系

关系(Relation):笛卡儿积D1D2DiDn的子集R称作在域D1D2,…,Dn上的关系,记作:

RD2D2,…,Di…,Dn

其中,R为关系名,n为关系的度或目(Degree),Di是域组中的第i个域名。

n=1时,称该关系为单元关系;

n=2时,称该关系为二元关系;

以此类推,若关系中有n个域,称该关系为n元关系。一般来说,一个取自笛卡儿积的子集才有意义如表2.3所示。

表2.3 D1D2的笛卡儿积子集

关系可以分为以下三种类型。

  • □ 基本关系(又称基本表):是实际存在的表,它是实际存储数据的逻辑表示。
  • □ 查询表:是对基本表进行查询后得到的结果表。
  • □ 视图表:是由基本表或其他视图导出的表,是一个虚表,不对应实际存储的数据。

2. 关系的性质

(1)列是同质的。即每一列中的分量是同一类型的数据,来自同一个域。表2.4中姓名来自姓名域,性别来自性别域,部门都是部门域内的数据。

表2.4 员工信息表

(2)关系中行的顺序、列的顺序可以任意互换,不会改变关系的意义。

例如,表2.4中,第一行与第三行交换位置不会影响关系的意义。

(3)关系中的任意两个元组不能相同。

如员工信息表中,不允许出现元组相同的情况。表2.5是不允许的。

表2.5 错误的信息表

(4)关系中的元组分量具有原子性。

即每一个分量都必须是不可分的数据项。

3. 关系的属性和码

(1)属性(Attribute)。

表中的一列即为一个属性,为每一个属性赋一个名称即属性名。例如,表2.4中有5列,即对应5个属性,分别是:员工编号、姓名、性别、部门、生日。

(2)候选码(Candidate Key)。

若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(也称候选键)。

(3)主码(Primary Key)。

若一个关系中有多个候选码,则选定一个为主码(也称主键)。

2.2.2 关系模型

关系模型源于数学,用二维表来组织数据。这个二维表在关系数据库中称为“关系”。关系数据库就是“关系”的集合。在关系系统中,用户感觉数据就是一张张表。表是逻辑结构而不是物理结构,实际上在物理层可以使用任何有效的存储结构来存储数据。比如,有序文件、索引、哈希表、指针等。因此,表是对物理存储数据的一种抽象表示,对很多存储细节的抽象,如存储记录的位置、记录的顺序、数据值的表示以及记录的访问结构。用关系表示实体以及实体之间联系的模型称为关系数据模型。关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

1. 关系模型的数据结构

关系模型的数据结构非常简单,即为关系。关系,就是二维表,它满足三个条件:关系表中的每一列都是不可再分的基本属性;表中各属性不能重名;表中的行、列次序并不重要,即可以交换行、列的次序。例如,表2.5中“部门”和“生日”次序的变换不影响表达的语义。

2. 关系操作

关系操作的特点是集合操作,即操作的对象和结果都是集合。关系模型的数据操作主要包括查询、插入、删除和修改数据。早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。关系代数和关系演算均是抽象的查询语言,另外还有一种介于关系代数和关系演算之间的SQL(Structured Query Language)。SQL不仅具有丰富的查询功能,还具有数据定义和数据控制的功能,充分体现了关系数据语言的特点和优点,已经成为关系数据库的标准语言。

3. 关系的完整性

关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变性。

1)实体完整性

关系模型使用主码作为元组的唯一标识,主码所包含的属性称为关系的主属性。实体完整性指关系数据库中所有表都必须有主码,并且主属性不能取空值(NULL)。

例如,商品信息表中“商品编号”为主码,则“商品编号”不能取空值。如果主码由多个主属性构成,则每个主属性均不可为空。例如,订单关系中的订单(客户号,商品号,时间,数量),“客户号”和“商品号”为订单表的主码,则“客户号”和“商品号”两个属性都不能取空值。

实体完整性规则是针对基本关系而言的。关系模型中的每一行记录都对应客观存在的一个实例或一个事实。现实世界中的实例是可以区分的,其中的某些属性唯一地标识了该实例,对应到关系模型中即主码。主码为空,意味着该实体不可区分,是模糊的实体,这在数据库中是不允许的。

2)参照完整性

参照完整性有时也称为引用完整性。现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然产生了关系与关系之间的引用关系。参照完整性就是描述实体之间的引用的。

3)用户定义的完整性

用户定义的完整性也称为域完整性或语义完整性。任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,不同的数据库应用系统根据应用环境不同,往往还需要一些特殊的约束条件,用户定义的完整性是针对某一具体应用领域定义的数据库约束条件,例如,要求表中某属性的数据具有正确的数据类型、格式和有效的数据范围等。

数据库设计时,需将E-R图转换为关系模式。前面分析过的销售员销售商品E-R图如图2.3所示。

图2.3 销售员销售商品E-R图

将其转换为关系模式如下。

销售员(销售员编号,姓名,性别,生日),主码为销售员编号。

商品(商品编号,名称,型号,价格),主码为商品编号。

销售员-商品(销售员编号,商品编号,时间),主码为销售员编号和商品编号。