2.2 关系数据库
关系数据库是当前信息管理系统中最常用的数据库,关系数据库采用关系模式,应用关系代数的方法来处理数据库中的数据。
2.2.1 关系的基本概念
1. 关系的数学定义
1)域
域(Domain):一组具有相同数据类型的值集合。例如,{自然数},{男,女},{0,1}等都可以是域。
基数:一个域允许的不同取值个数称为这个域的基数。
[例2.1]
D1={张三,李四,王五},表示姓名的集合,基数是3。
D2={销售部,人事部},表示部门的集合,基数是2。
2)笛卡儿积
给定一组域D1,D2,…,Di,…,Dn(可以有相同的域),则笛卡儿积定义为:
D1D2…Di…Dn={(d1,d2,…,di,…,dn)∣di∈Di,i=1,2,…,n}
例2.1中的D1与D2的笛卡儿积为:
D1D2={(张三,销售部),(张三,人事部),(李四,销售部),(李四,人事部),(王五,销售部),(王五,人事部)}
其中,每个(d1,d2,…,di,…,dn)叫作元组,元组中的每一个值di叫作分量,di必须是Di中的一个值。
显然,笛卡儿积的基数就是构成该积所有域的基数累乘积,若Di(i=1,2,…,n)为有限集合,其基数为mi(i=1,2,…,n),则D1D2…Di…Dn笛卡儿积的基数M为:
例2.1中的D1与D2的笛卡儿积的基数是M=m1m2=3×2=6,即该笛卡儿积共有6个元组,它可组成一张二维表,如表2.2所示。
表2.2 D1与D2的笛卡儿积
3)关系
关系(Relation):笛卡儿积D1D2…Di…Dn的子集R称作在域D1,D2,…,Dn上的关系,记作:
R(D2,D2,…,Di…,Dn)
其中,R为关系名,n为关系的度或目(Degree),Di是域组中的第i个域名。
当n=1时,称该关系为单元关系;
当n=2时,称该关系为二元关系;
以此类推,若关系中有n个域,称该关系为n元关系。一般来说,一个取自笛卡儿积的子集才有意义如表2.3所示。
表2.3 D1与D2的笛卡儿积子集
关系可以分为以下三种类型。
- □ 基本关系(又称基本表):是实际存在的表,它是实际存储数据的逻辑表示。
- □ 查询表:是对基本表进行查询后得到的结果表。
- □ 视图表:是由基本表或其他视图导出的表,是一个虚表,不对应实际存储的数据。
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图
将其转换为关系模式如下。
销售员(销售员编号,姓名,性别,生日),主码为销售员编号。
商品(商品编号,名称,型号,价格),主码为商品编号。
销售员-商品(销售员编号,商品编号,时间),主码为销售员编号和商品编号。