1.2 关系数据库
数据库中存储和管理的数据都源于现实世界的客观事物。例如,在图书管理系统中的图书和读者,在教学管理系统中的学生、教师、课程;销售管理系统中的商品、客户、员工……由于计算机不能处理这些具体事物,人们必须要将其转换为计算机能够管理的数据。通常,这种转换过程分为两个阶段:首先要将现实世界转换为信息世界,即建立概念模型;再将信息世界转换为数据世界,即建立数据模型。
1.2.1 概念模型
现实世界中事物及联系在人们头脑中的反映,经过人们头脑的分析、归纳、抽象,形成信息世界。对信息世界所建立的抽象的模型,称之为概念模型。由于概念模型是用户与数据库设计人员之间进行交流的语言,因此概念模型一方面应该能够方便、直接地表达应用中的各种语义知识,另一方面它还应该简单、清晰、易于用户理解。目前常用实体联系模型表示概念模型。
1. 实体
实体是客观存在并且可相互区别的事物。它可以是实际的事物,如读者、图书、学生、教师、课程等;也可以是抽象的事件,如借书、选课、订货等活动。
2. 实体属性
实体的特性称为属性,一个实体可以用多个属性来描述。
例如,图书实体可以用条形码、书名、作者、出版社、出版年月、售价等属性来描述。
读者实体可以用读者证号、姓名、身份、性别、电话号码等属性来描述。
3. 实体型和实体集
用实体名及其属性集合描述的同类实体,称为实体型。
例如,图书(条形码、书名、作者、出版社、出版年月、售价)就是一个实体型。读者(读者证号、姓名、身份、性别、电话号码)也是一个实体型。
同类型实体的集合称为实体集。例如,所有的图书构成一个实体集。在图书实体集中,“P0000001马克思的人学思想袁贵仁北师大1996/06/06 19.0”表示一本具体的书。所有的读者也构成一个实体集。在读者实体集中,“005孙建平男研究生13507317845”表示一个具体的读者。
4. 实体间的联系
实体间的联系就是指实体集与实体集之间的联系。实体间的联系分为一对一、一对多和多对多3种。
(1)一对一联系
设有实体集A和实体集B,若实体集A中的每个实体仅与实体集B中的一个实体联系,反之亦然,则两个实体间为一对一联系,记为1:1。例如,班级和班长是两个实体集,一个班级只能有一个班长,而一个班长只能在一个班级任职,则班级和班长之间为一对一的联系。
(2)一对多联系
设有实体集A和实体集B,若对于实体集A中的每个实体,实体集B都有多个实体与之对应,反之,对于实体集B中的每个实体,实体集A中只有一个实体与之对应,则两个实体间为一对多联系,记为1:n。例如,班级和学生是两个实体集,一个班级有多名学生,而一个学生只能属于一个班级,则班级和学生之间为一对多的联系。
(3)多对多联系
设有实体集A和实体集B,若对于实体集A中的每个实体,实体集B都有多个实体与之对应;反之,对于实体集B中的每个实体,实体集A中也有多个实体与之对应,则两个实体间为多对多联系,记为m:n。例如,图书和读者两个实体集,一个读者可以借阅多本图书,而一本图书也可以被多位读者相继借阅,则图书和读者之间为多对多的联系。学生和课程两个实体集,一个学生可以选修多门课程,而一门课程也可以被多位学生选修,则学生和课程之间为多对多的联系。
5. E-R图
实体-联系模型使用E-R图(Entity-Relationship Diagram)来描述概念模型。在E-R图中,用矩形表示实体型,用椭圆表示实体的属性,用菱形表示实体型之间的联系,相应的实体名、属性名、联系名写明在对应的框内,用无向边将各种框连接起来,并在连接实体型的线段上标上联系的类型。图书与读者的E-R图如图1.11所示。
图1.11 读者与图书的E-R图
1.2.2 数据模型
建立概念模型之后,为了将其转换为计算机能够管理的数据,需要按计算机系统的观点对数据建模。数据模型直接面向数据库中数据的逻辑结构,有一组严格的语法和语义语言,可以用来定义、操纵数据库中的数据。它所描述的内容包括三个部分:数据结构、数据操作和数据完整性约束条件。数据结构是指储存在数据库中对象类型的集合,描述数据库组成对象以及对象之间的联系。数据操作是指对数据库中各种对象实例允许执行的操作的集合,包括操作及其相关的操作规则。数据完整性约束条件是指在给定的数据模型中,数据及其联系所遵守的一组通用的完整性规则,它能保证数据的正确性和一致性。
任何一个数据库管理系统都是基于某种数据模型的。20世纪70年代至80年代初期,广泛使用的是基于层次、网状数据模型的数据库管理系统。层次模型以树状结构表示实体及实体之间的联系,网状模型是以网状结构表示实体及实体之间的联系。
现在,关系模型是使用最普遍的数据模型,它以二维表的形式表示实体及实体之间的联系。关系模型以关系代数为基础,操作的对象和结果都是二维表,也就是关系。目前流行的数据库管理系统(如Oracle、Sybase、SQL Server、Visual FoxPro等)都是关系数据库管理系统。
随着处理复杂数据(如文档、复杂图表、网页、多媒体等)的需求不断增长,面向对象的数据模型也正在研究与发展。
1.2.3 关系模型
在关系模型中,基本数据结构就是二维表。实体及实体之间联系用二维表来表示,数据被看成二维表中的元素。关系操作的对象和结果都是二维表。
1. 关系术语
(1)关系:一个关系就是一张二维表,每个关系有个关系名。
对关系的描述称为关系模式,其格式为关系名(属性1,属性2,……,属性n)。在Visual FoxPro中,一个关系存储为一个数据表文件,文件的扩展名为dbf。关系模式对应于数据表的结构,其格式为表名(字段名1,字段名2,字段名3,……,字段名n)。如图1.12所示,图书(条形码,书名,作者,出版社,出版年月,售价)就是“图书”关系的关系模式,即“图书”表的结构。
图1.12 图书表
(2)元组:二维表的一行称为关系的一个元组,即Visual FoxPro数据表中的一条记录。
例如,(P0000001 李白全集 李白 上海古籍出版社 1997/06/01 19.0)就是“图书”关系的一个元组,即“图书”表的一条记录。
如图1.12所示,“图书”表共有10条记录。
(3)属性:二维表的一列称为关系的一个属性,即Visual FoxPro数据表中的一个字段。
例如,条形码、书名、作者、出版社、出版年月、售价等都是“图书”关系的属性,即“图书”表的字段。
(4)域:属性的取值范围称为域,即不同元组对同一个属性的取值所限定的范围。
例如,在“图书”关系中,书名属性的域是文字字符,出版年月属性的域是日期,售价属性的域是0以上的数值。
(5)关键字:能唯一标识元组的属性或属性的组合称为关键字。在Visual FoxPro数据表中,能标识记录唯一性的字段或字段的组合,称为主关键字或候选关键字。
例如,在“图书”关系中,每一本图书的条形码是唯一的,故“条形码”可作为图书表的关键字。而两本书的书名可能相同,所以“书名”就不能作为图书表的关键字。
(6)外部关键字:如果关系中的某个属性不是本关系的关键字,而是另一关系的关键字,称这个属性为外部关键字。
2. 关系的特点
在关系模型中,每个关系模式必须满足一定的条件,具备以下特点。
(1)关系必须规范化。最基本的要求是每个属性必须是不可分割的数据单元,即每个属性不能再细分为几个属性。
例如,在手工制表中,经常出现如表1.1所示的复合表格。在这个表格中,“必考科目”和“选考科目”不是基本的数据项,它是由多个基本数据项组成的复合数据项。在关系模式中,必须去掉必考科目和选考科目两个属性。
表1.1 复合表格示例
(2)在一个关系中,不能出现相同的属性名。在Visual FoxPro中,同一个数据表中不能出现同名的字段。
(3)在一个关系中,不能出现完全相同的元组。
(4)关系中元组的次序无关紧要,即任意交换两行的位置不影响数据的实际含义。
(5)关系中属性的次序无关紧要,即任意交换两列的位置不影响数据的实际含义。
3. 关系实例
一个具体的关系模型通常由若干个关系模式构成。在Visual FoxPro中,相互之间存在联系的数据表放在一个数据库文件中进行管理。数据库文件的扩展名为dbc。
例1.4 图书-读者-借阅关系模型。
在图书管理数据库中有图书、读者、借阅数据表,如图1.13所示。读者和图书这两个实体之间存在的是多对多的联系,“借阅”作为纽带表,把多对多的关系分解成两个一对多的关系。
图1.13 图书管理数据库的数据表
图书、读者、借阅关系模型在Visual FoxPro中如图1.14所示。
图1.14 图书管理数据库各数据表的联系
1.2.4 关系运算
关系模型中常用的关系操作包括查询操作和插入、删除、修改操作两大部分。
关系的查询表达能力很强,是关系操作中最主要的部分。查询操作可以分为传统的关系运算(并、交、差等)和专门的关系元算(选择、投影、连接)。
1. 传统的集合运算
(1)并运算。设关系R与S有相同的属性,关系R与关系S的并,将产生一个包含R和S所有不同元组的新关系,记作R∪S。
(2)交运算。设关系R与S有相同的属性,关系R与关系S的交,是既属于R也属于S的元组所组成的新关系,记作R∩S。
(3)差运算。设关系R与S有相同的属性,关系R与关系S的差,是所有属于R但不属于S的元组所组成的新关系,记作R-S。
例1.5 传统的集合运算。
如图1.15所示,关系ts1为王颖珊借过的图书,关系ts2为杨瑞借过的图书,则ts1∪ts2(ts1与ts2的并运算)为王颖珊和杨瑞借过的所有图书,ts1∩ts2(ts1与ts2的交运算)为王颖珊和杨瑞都借过的图书,ts1-ts2(ts1与ts2的差)为王颖珊借过但杨瑞未借过的图书。
图1.15 关系的并、交、差运算
2. 专门的关系运算
(1)选择:从关系中选出满足给定条件的元组的操作称为选择。选择是从行的角度进行运算,在水平方向选出满足条件的元组。新关系的关系模式不变,其元组是原关系的一个子集。
例如,从图1.12所示的图书表中筛选出所有出版社为中华书局的图书,就是一种选择运算,得到的结果如图1.16所示。
图1.16 关系的选择运算
(2)投影:从关系中选出若干属性组成新的关系称为投影。投影是从列的角度进行运算,在垂直方向抽取若干属性或重新排列属性。新关系的属性个数通常比原关系少,或者属性的排列顺序不同。
例如,从图1.12所示的图书表中抽取图书的条形码、书名、售价,就是一种投影运算,得到的结果如图1.17所示。
图1.17 关系的投影运算
(3)连接:连接是把两个关系中的元组按连接条件横向结合,拼接成一个新的关系。
最常见的连接运算是自然连接,它是利用两个关系中的公共字段或者具有相同语义的字段,把该字段值相等的记录连接起来。
例如,在图书管理数据库中,将借阅表和图书表根据公共字段条形码进行自然连接,得到一个包含读者证号、条形码、书名、作者、出版社、出版年月、售价、借阅日期、还书日期属性的关系,如图1.18所示。
图1.18 关系的连接运算
例1.6 关系运算。
查询读者王颖珊所借图书的书名、作者、借阅日期和还书日期。
在此关系运算中,既包含选择、投影,也包含连接。首先要把读者表和借阅表按照读者证号相同的条件连接起来,并且要选择姓名为王颖珊的元组。然后再将连接的结果与图书表按照条形码相同的条件连接起来,最后将连接的结果按照书名、作者、借阅日期和还书日期进行投影。
图1.19 关系合运算