第2章 关系数据库基本知识 数据库系统的发展 概念模型和数据模型 关系模型与关系数据库 关系数据库体系结构 关系模型的运算理论简介 数据库是信息系统的基本数据组织方式,它将经过抽象的信息以一定的数据结构描述并集中成为资源,支持对这些数据资源进行统一规划和集中管理,实现数据的多用户共享、多应用共享。关系数据库是目前最成熟和应用最广泛的数据库系统。
2.1数据库技术的发展 1. 第一代数据库系统(20世纪70年代) Bachman于l 973年获美国计算机协会(ACM)颁发的图灵(Turing)奖。 2.1数据库技术的发展 1. 第一代数据库系统(20世纪70年代) 20世纪70年代,投入实际应用的数据库以层次数据库和网状数据库为代表。它们已实现了数据管理的“集中控制与数据共享”这一基本目标。 1963,美国通用电气公司的Bachman等人成功开发世界上第一个数据库管理系统IDS(Integrated Data Store),奠定了网状数据库的基础,IDS也是数据库系统的先驱。 1969,美国IBM公司成功研制出第一个商品化数据库管理系统IMS(Information Management System),是一个层次数据库系统。
主要特点: 支持格式化数据模型,支持三级模式体系结构(外模式、模式、内模式) 所谓导航:指用户不仅要了解“要干什么”,而且要指出“怎么干”。用户必须使用某种高级语言编写程序,一步一步地“引导”程序按照某一条预先定义的存取路径来访问数据库,最终达到要访问的数据目标。在访问数据库时,每次只能存取一条记录值。若该记录值不满足要求就沿着存取路径查找下一条记录值。 主要特点: 支持格式化数据模型,支持三级模式体系结构(外模式、模式、内模式) 用存取路径(指针)来表示数据间的联系,数据定义语言和数据操作语言相对独立 数据库语言采用过程性导航式语言 缺点:编程繁琐。用户既要掌握高级语言又要掌握数据库的逻辑结构和物理结构,程序设计很大程度依赖于设计者自己的经验和实践,因而只有具有计算机专业水平的应用程序员才能掌握和使用这类数据库操纵语言。应用程序的可移植性较差,数据的独立性也较差。 优点:存取效率高。存取路径由应用程序员指定,应用程序员可以根据他对数据库逻辑模式和存储模式的了解选取一条较优的存取路径。从而优化了存取效率。
第二代数据库是支持关系数据模型的关系数据库 1.关系模型的概念单一,实体用关系(表)来表示 2. 第二代数据库系统(20世纪70~80年代) 第二代数据库是支持关系数据模型的关系数据库 4.关系数据库语言是非过程化的 关系模型特点: 1.关系模型的概念单一,实体用关系(表)来表示 3.数据的物理存储和存取路径对用户透明 2.以关系代数和数理逻辑为数学基础
3. 新一代数据库系统(20世纪80年代以后) 随着计算机的广泛应用和信息社会的发展,特别是一些新的应用领域,如CAD/CAM、办公信息系统、地理信息系统、知识库系统、实时系统等,不断提出新的应用要求,上述传统数据库都表现出不同程度的局限性。 新的数据库需要支持以下一些功能: ① 存储和处理复杂对象。 ② 支持复杂的数据类型。 ③ 具有高性能的处理能力。 ④ 支持快捷的应用开发。 数据库系统的发展趋势可以归纳为以下三个方面: 1)从数据模型角度看 2)从技术角度看 3)从应用角度看
多媒体数据库提供了一系列用来存储图像、音频和视频对象类型,更好地对多媒体数据进行存储、管理、查询。 “应用驱动”和“技术驱动”相结合形成了新一代进入商业化应用的数据库管理系统的大家族。 分布式数据库允许用户开发的应用程序把多个物理分开的、通过网络互联的数据库当作一个完整的数据库看待。 并行数据库通过集群技术把一个大的事务分散到集群中的多个节点去执行,提高了数据库的吞吐量和容错性。
2.2数据模型 数据模型设计包括概念模型设计和数据模型设计两个阶段。 概念数据模型 (概念模型,信息模型) 结构数据模型 (数据模型) 数据库不仅反映数据本身所表达的内容,而且还反映数据之间的联系。由于计算机不能直接处理现实世界中的具体事物,所以必须事先将具体事物转换成计算机能够处理的数据。 数据模型是用来抽象、表示和处理现实世界中的信息,以便采用数据库技术进行集中管理和应用。 概念数据模型 (概念模型,信息模型) 数据模型设计包括概念模型设计和数据模型设计两个阶段。 结构数据模型 (数据模型)
(1)概念模型(又称信息模型) 概念模型:按用户观点将信息模型化。它把现实世界中的具体事物进行认识抽象,形成信息世界中的概念模型,通常称这一过程被称为概念模型设计,它是不依赖于特定数据库管理系统的一种信息结构。 (2)数据模型 数据模型是按计算机观点将数据模型化,是机器世界中数据之间关系及其操作的描述。根据概念模型,设计者需将其转换为某一个数据库管理系统支持的数据模型(例如关系模型),形成机器可处理的数据结构模型。
2.2.1概念模型 概念数据模型不依赖于具体的计算机系统和数据库管理系统,它对信息系统所涉及的客观对象的相关信息进行抽象描述,是信息系统分析的有效交流工具,是数据模型设计的基础。 最典型的概念数据模型是实体联系模型,简称E-R模型(Entiry-Relationship Data Model),采用“实体—联系”图(简称E-R图)来表示。 E-R图的优点是比较简单和灵活,可卓有成效地辅助系统开发人员和最终用户针对数据需求进行沟通交流。
(a)一对一联系 (b)一对多联系 (c)多对多联系 图2.3 E-R图及联系类型举例 E-R图主要包括实体、实体的属性和实体间的联系。
例如:学生、课程、教师等都是实体,而具体的某一个学生称为学生实体的一个成员。 实体是指在现实世界客观存在的具有公共属性并可相互区别的事物对象的集合。 1.实体 例如:学生、课程、教师等都是实体,而具体的某一个学生称为学生实体的一个成员。 在E-R图中,实体用矩形表示,方框内标出实体的名称。 2.属性 例如:在学生实体中,性别属性的域为{“男”,“女”}。 实体内各个成员所具有的特征就是属性。一个实体可以由多个属性来刻画,每个属性都有一个允许的取值范围,称为域。 在E-R图中,属性用椭圆形表示,椭圆内书写属性的名称,并用直线与相关的实体连接。
在E-R图中,主关键字属性用下划线表示。 在E-R图中,联系用菱形表示,菱形内书写联系名,并用直线将它与关联的实体相连接 。 实体中能够唯一标识实体的一组最小的属性集合称为实体的关键字。 一个实体可以有若干个关键字,通常选择一个作为主关键字。 3.关键字 在E-R图中,主关键字属性用下划线表示。 4.联系 例如,学生实体与课程实体之间具有“选修”联系,成绩可作为“选修”联系的一个属性。 联系是实体之间的一种关联。联系也可以具有属性。 学生 选课 课程 成绩 m n 在E-R图中,联系用菱形表示,菱形内书写联系名,并用直线将它与关联的实体相连接 。
联系可以分为三种类型:一对一联系、一对多联系、多对多联系 (1)一对一联系(1:1) :实体A中的每一个成员最多与实体B中的一个成员相关联,反之亦然。 2.3(a)所示,学生实体与优培生实体的联系是一对一的联系,因为一个学生最多只能被选拔为优培生一次,而一个优培生只能对应一个学生。 学校实体与校长实体的联系是一对一的联系,因为一个学校只能有一个校长,一个校长也只能在一个学校任职。 班长实体和班级实体、主教练实体和球队实体之间也都是一对一联系。 一对一联系
(2)一对多联系(1:n):实体A中的每一个成员可以与实体B中的多个成员相关联,反之,实体B中的每一个成员最多与实体A中的一个成员相关联。 单位实体和职工实体、父亲实体与子女实体之间也都是一对多的联系。 一对多联系
(3)多对多联系(m:n):实体A中的每一个成员可以与实体B中的多个成员相关联,反之,实体B中的每一个成员也可以与实体A中的多个成员相关联。 2.3(c)所示,学生实体与课程实体的联系是多对多的联系,因为一个学生可以同时选修多门课程,而一门课程可以被多个学生选修。 教师实体和学生实体、销售商实体和商品实体也都是多对多的关系。 多对多联系
2.2.2数据模型 概念模型需要转换为数据模型才能被计算机处理。数据模型由数据结构、数据操作和数据完整性约束三部分组成,是严格定义的一组概念的集合,这些概念精确地描述了系统的静态特性、动态特性和完整性约束条件。 数据操作 :是指对数据库中各种对象(如关系模型中的关系)的实例(即值)允许执行的操作的集合,包括操作及其有关的操作规则。数据库中的操作主要有检索和更新两大类。数据模型需要定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。数据操作是对系统动态特性的描述。 数据完整性约束:数据完整性约束条件是一组数据完整性规则的集合。数据完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定基于数据模型的数据库的状态以及状态的变化,以保证数据库中数据的正确、有效和相容。 数据结构:是对所关心的数据对象及其相互关系的描述。数据结构规定了如何把基本的数据项组织成较大的数据单位,以描述数据的类型、内容、性质和数据之间的相互关系。
数据结构是对数据模型静态特性的描述,数据操作是对数据模型动态特性的描述,数据完整性约束是对数据模型中数据状态转换时制约关系的描述。 通常根据数据模型的数据结构类型来命名数据模型,如层次模型、网状模型、关系模型、面向对象模型等,以相关模型为基础开发的数据库管理系统分别为层次数据库、网状数据库、关系数据库、面向对象数据库等。
层次模型 层次模型将实体之间联系描述为称树状。下面为一模型和数据组织实例。
网状模型 网状模型将实体之间联系描述为图。它比层次模型提供更大的灵活性,但在概念上、数据结构上都更复杂,编程较复杂,操作上也有诸多不便。下图为一网状模型举例。
关系模型 关系模型中实体以“表”的形式来表现。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。这种表格在数学上称为关系。 实体间的联系通过表的公共属性来描述。下面是一个建立了联系的学生表和班级表。
关系模型的缺点主要由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化。 关系模型具有许多优点,主要有: 以关系代数和数理逻辑为数学基础,经过多年发展,形成了严密的关系数据库理论。 数据结构简单、清晰,概念单一,即无论实体还是实体之间的联系都用关系(即表)来表示,对关系数据的检索结果也是关系。 存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库建立的工作。 关系模型的缺点主要由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化。 以关系模型组织的数据库系统称为关系数据库系统,它最为成熟,例如Oracle、Sybase、Informix、INGRES、SQL Server等关系数据库管理系统广泛应用于信息系统建设。
关系模型由关系数据结构、关系操作集合和数据完整性约束三部分组成。 2.3关系模型与关系数据库 关系数据库是以关系模型为基础的数据库。它与层次数据库、网状数据库相比,具有数据模型简单灵活、数据独立性高、语言接口性能好等优点,并且有着比较坚实的数学理论基础,是目前最成熟的数据库。 关系模型由关系数据结构、关系操作集合和数据完整性约束三部分组成。
关系模型是最重要的数据模型,目前,几乎所有的DBMS都支持关系模型。 关系模型把世界看作是由实体和联系构成。关系模型中实体以“表”的形式来表现。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。这种表格在数学上称为关系。 所谓联系,就是实体之间的关系,即实体之间的对应关系。 例如:学生和课程的选课对应关系。
数据库中包含6张表,分别描述学生、班级、课程、教师、选课、优异生6个实体,可以支持实现一个简单的教务管理系统。
2.3.1关系数据结构 1.基本表结构 包含以下概念: (1)表 (2)属性 (3)元组 基本表对应一个关系模式 关系模型的数据结构单一,采用二维表结构来表示实体以及实体之间的关系。一个关系对应于一张二维表。 (1)表 (2)属性 表中每一列描述实体集的一个特征,在关系数据库中被称为属性(也称字段、数据项);每一个属性都有自己的取值范围,称为域。 (3)元组 表中的每一行由一个实体的相关属性取值构成,称为元组,它相对完整地描述了一个实体。一个元组也被称为一条记录。元组中的一个属性值称为分量。
注意:关系是二维表格,但这个二维表格是有限制的 ① 表中的每一属性必须是基本数据类型。 例如:整型、实型、字符型等,数组或结构等不能作为属性的类型。 ② 表中的每一列的所有值必须是同类型、同语义的。 例如:表中的某一列包含学生的学号,则此表中所有行的此列都必须是学生的学号。 ③ 属性的值只能是所规定的域中的值。 例如:规定工资表中基本工资是正数,那么任何一个职工的基本工资都只能是正数;规定学生的性别只能在“男”或“女”中取值。
√ √ × 【例2.2】一个表中不同的属性具有相同域。 【例2.3】表中每一个分量都是不可分的数据项。不可出现“表中有表”的现象。 职业与兼职是两个不同的属性,但它们都取自同一个域集合: 职业={教师,工人,辅导员,作家} 【例2.3】表中每一个分量都是不可分的数据项。不可出现“表中有表”的现象。 √ √ ×
在一个关系模式中,关键字是保证表中记录具有唯一性的一种机制。 2.关键字 (1)候选关键字 候选关键字(Candidate Key)也称候选码,是关系表中按应用语义能唯一标志元组的最小属性的集合。在最简单的情况下,候选关键字只包含一个属性。在最极端的情况下,关系模式的所有属性组是这个关系模式的候选关键字,称为全码。 学号 姓名 成绩 1001 Mary 90 1002 Jane 80 1002 Mary 80 工号 姓名 1001 张玲 2001 赵信 3001 百杰
提示:一般情况下,为每个关系表都要定义主关键字,以保证任意两行数据不完全相同。 (2)主关键字 主关键字(Primary Key)也称主键,用户指定的用来在关系表中唯一标识元组的一个候选关键字。若一个关系有多个候选关键字,则只选定其中一个为主关键字。主关键字的值不能为空、不能重复。 提示:一般情况下,为每个关系表都要定义主关键字,以保证任意两行数据不完全相同。
【例2.4】主关键字的唯一性语义:学生表的主关键字的选择。 如果不允许表中出现姓名相同的学生,则该表中“学号”和“姓名”都是候选关键字,主关键字可以选定“学号”或“姓名”,如果允许表中出现姓名相同的学生,则“姓名”不能作候选关键字,主关键字只能是“学号”。
注意:候选关键字和主关键字可以唯一标识一条记录,它可以是一个属性,也可以是多个属性组成的属性组,由用户根据语义定义。 【例2.5】主关键字可以是一个属性组:选课表的主关键字选择。 学号 课号 成绩 1101 101 90 1102 80 113 95 1103
现实世界中的事物是相互联系的,这种联系需要通过数据模型体现出来。 3.表之间的关系 现实世界中的事物是相互联系的,这种联系需要通过数据模型体现出来。 联系可分为两种: (2)实体之间的联系,在概念模型中我们采用E-R图描述,反映到关系模型中就是表和表之间的关系。 (1)实体内部的联系,它反映了不同属性之间的联系,这在表的关系模式中已经被定义和体现。 例如,一个学号确定了一个学生的姓名。
在设计数据库和数据表时,可把复杂的事物进行分解,建立多个表来描述,并通过表之间的关系使信息仍保持整体的逻辑结构。 在关系数据模型中表和表之间的关系通过表的公共属性来实现。 尽管学生数据与班级数据分别存放在不同的表中,但是通过“学生”表和“班级”表中的公共属性“班号”就可以建立两个表之间的关联。例如,要查询学生“林豆豆”的班级名称,可先从学生表中查出她的班号是“11”,然后根据班号“11”在班级表中查出对应的班级名称“数学01”。 在两个表公共属性之间的关联定义实现了两个表的联接运算,它不仅支持对数据库的多表数据操作,而且可以实现相关联的数据表中的数据互相约束,从而保证数据的完整性,并可减少数据冗余。 在设计数据库和数据表时,可把复杂的事物进行分解,建立多个表来描述,并通过表之间的关系使信息仍保持整体的逻辑结构。
两个表具有能体现实体实际存在关系的公共属性。 关系数据模型使用了主关键字、外关键字、主表和外表等概念来描述表之间的关系: (1)外关键字:为实现表之间的关系,一个表中的主关键字与另一个表中与该主关键字相同或相容的属性(数据类型相同、语义相同,属性名可以不同)建立联系,这个起到联系作用的属性,称为另一个表的外关键字,简称外键。 (2)主表和外表 :当两个表关联后,公共属性作为主关键字所在的表称为主表,另一个表称为外表。 在两个表之间建立关系的一般原则 两个表具有能体现实体实际存在关系的公共属性。 该公共属性至少在其中一个表中是主关键字
学生实体和班级实体存在着属于关系,一个班级由多名学生构成,任何一个学生都属于且仅属于某一个班级。 【例2.6】班级表和学生表之间的一对多关系 。 学生实体和班级实体存在着属于关系,一个班级由多名学生构成,任何一个学生都属于且仅属于某一个班级。 外表 主表 用连线指示了各个表之间的关系,连线有箭头一端的表为主表,主表中用于建立关系的属性是主关键字;连线另一端是外表,外表中用于建立关系的属性是外关键字。 提示:建立关系的公共属性只是其中一个表的主关键字时,建立的一定是一对多关系。
提示:在关系中,主表对外表的限定作用要强于外表对主表的限定作用,根据实际的关系分析,选择一般性,主导性信息所在的表作为主表比较合适。 【例2.7】学生表和优培生表之间的一对一关系 。 学生实体和优培生实体有包含关系,优培生是学生的一个子集。它们的共同属性是“学号”,可以用来建立关系。 主表 外表 提示:当外键也是外表的主键时,即建立关系的公共属性在两个表都是主关键字时,建立的一定是一对一关系。 提示:在关系中,主表对外表的限定作用要强于外表对主表的限定作用,根据实际的关系分析,选择一般性,主导性信息所在的表作为主表比较合适。
【例2.8】教师表和课程表之间的一对多关系。 教师实体和课程实体之间存在授课关系。它们没有名字相同的属性,但教师表中的属性“工号”和课程表中的属性“任课教师”,数据类型和含义相同,且“工号”在教师表中是主关键字,可以用这对属性建立一个一对多关系,教师表是主表,课程表是外表。
① 任课关系。通过学生表和课程表之间的关系、以及教师表和课程表之间的关系,可以找到任课教师信息。 【例2.9】如何描述学生表和教师表之间的关系? 学生实体和教师实体之间存在师生关系(任课、班主任、指导教师等)。 如果需要表达以上某种师生关系,可以选择以下设计: ② 指导教师关系。可以在学生表中增加一个属性“工号”,用来记载该生的指导教师,然后利用“工号”来建立学生表和教师表的关系。 ① 任课关系。通过学生表和课程表之间的关系、以及教师表和课程表之间的关系,可以找到任课教师信息。 ③ 班主任。在班级表中增加一个属性“工号”,用来记载该班的班主任,然后在班级表和教师表之间建立关系。由于学生表和班级表之间已经建立了关系,在应用中,用户可以间接获得这种师生关系信息。
4.关系模式 关系模式通常记为: 关系名(属性名1,属性名2,…,属性名n) 表中的行定义(即表头)是实体相关属性的集合,称为该表的关系模式。关系模式就是对关系的描述,包括关系名、组成该关系的属性名、属性向域的映象。 关系模式通常记为: 关系名(属性名1,属性名2,…,属性名n) 属性向域的映象直接说明为属性的类型、长度。
在教务系统数据库中几个关系模式表示如下,其中加下划线的属性是关键字: 学生(学号,姓名,性别,出生日期,班号) 班号是外键(班级:班号) 优培生(学号,认定时间,学分绩点) 学号是外键(学生:学号) 班级(班号,班名,专业) 课程(课号,课程名,学分,任课教师) 任课教师是外键(教师:工号) 选课(学号,课号,成绩) 学号外键(学生:学号) 课号是外键(课程:课号) 教师(工号,姓名,性别,进校日期,职称)
关系模式确定后,在数据库物理设计阶段可以用表格来直观地详细描述关系模式的定义。每一个被定义的关系模式包括关系名、属性名、属性域的类型和约束、关系模式的主关键字和外关键字。 【例2.10】选课表的关系模型的表格描述。 属性名称 属性说明 类型定义 属性限定 关系(外键) 学号 学生代号 Char(4) Primary Key 学生表:学号 课号 课程代号 Char(3) 课程表:课号 成绩 课程成绩 Numeric(4,1) 上图所示为采用表格描述关系模式。”学号”的类型为长度为4的字符串;“课号”是长度为3的字符串;“成绩”为精度为4且保留1位小数的数值型。该表的主关键字为(学号,课号);该表通过“学号”与学生表建立关系,是学生表的外表,该表通过“课号”与课程表建立关系,是课程表的外表。
2.3.2关系完整性约束 域完整性规则 实体完整性规则 参照完整性规则 数据库必须保证所有表中的数据值与其所描述的应用对象的实际状态保持一致。 关系模型通过关系完整性约束条件来保证数据的正确性和一致性。所谓约束条件主要是指在表和列上定义的规则,数据库管理系统会依据这些约束条件维护数据完整性。 域完整性规则 实体完整性规则 参照完整性规则
1.域完整性 域完整性规定了属性的值必须是属性值域中的值。 域完整性又称为用户自定义完整性。它是在关系数据模型定义时,由用户对列值的数据类型、长度、单位、精度、格式、值域范围、是否允许为“空值”等进行限定。 所谓“空值”就是“不知道”或“无意义”的值。应当注意,空值不等于数值零,也不等于空字符或空字符串,因为没有成绩与成绩为零分显然是不同的。
【例2.15】表的域完整性规则应用。 (a)学生表 (b)学生表关系模式定义 关系数据库系统的域完整性的检查功能,会依据用户设置的规则限制不合法数据的填入,不需应用程序承担检查工作。 35
实体完整性是指关系中的数据记录在组成主关键字的属性上不能有空值,且主关键字的值不能相同。 2.实体完整性 实体完整性是指关系中的数据记录在组成主关键字的属性上不能有空值,且主关键字的值不能相同。 注意:实体完整性规则是针对基本关系表而言的。实体完整性主要是为了保障主关键字能唯一标识关系中的每个记录。大多数关系数据库都支持实体完整性检查,如果表中定义了主关键字,系统将进行强制检查。
学生表中,“学号”是主关键字。假定向学生表新加一条学生“王秋水”的记录 【例2.14】表的实体完整性规则应用。 学生表中,“学号”是主关键字。假定向学生表新加一条学生“王秋水”的记录 1103 1996-03-04 21 系统拒绝该记录的添加,因为它违反了实体 完整性规则,即学生表中已存在一条主关键字取 值为“1103”的记录。
参照完整性要求一个外表的外关键字的取值必须是其主表主关键字的存在值或空值。 3.参照完整性 参照完整性要求一个外表的外关键字的取值必须是其主表主关键字的存在值或空值。 数据库的表之间存在关系 ,甚至有些属性字段在多个表中重复出现,为了保证数据完整性,需要对表之间的数据进行约束。参照完整性是在表之间关系的基础上实施的表之间的数据约束。
【例2.15】表的参照完整性规则应用。 班级表和学生表之间通过“班号”建立了关系,学生表中的“班号”是外关键字,那么学生表中“班号”的取值必须是空值或在班级表中“班号”属性中出现过的值。 如果学生表的班号字段允许为空,它取空值表示该学生还没有被分配班级;否则只能取班级表出现过的班号值,即班级表中有该班级的记录。
(1)插入约束:当在外表中插入新记录时,必须保证其中的外关键字值在主表中出现过。 对数据库进行修改时,可能会破坏表之间的参照完整性,所以为了保证数据库中的数据的完整性,应该对数据库的修改加以限制,这些限制包括:插入约束、删除约束和更新约束。 (1)插入约束:当在外表中插入新记录时,必须保证其中的外关键字值在主表中出现过。 【例2.16】表的参照完整性的插入约束。向学生表中添 加一条学生“王秋水”的记录 5101 1994-1-1 88 插入约束会拒绝该记录的添加,因为班级表中不存在“班号”是“88”的班级,该记录违反了参照完整性规则。
(2)删除约束 :当要从主表中删除一条记录时,必须考虑外表数据的完整性。一般有两种约束: 限制删除,即如果系统检查该记录的主关键字值在某个外表中出现过,则不允许删除。 级联删除,即如果系统检查该记录的主关键字值在某个外表中出现过,则在删除主表中该记录的同时,将外表中与主关键字值对应的记录全部删除。 【例2.17】表的参照完整性的删除约束。删除班级表 中“班号”是“11”的记录 1.限制删除:不允许删除; 2.级联删除:同时删除学生表所有中”11”班的学生。
(3)更新约束:如果要修改主表中的主关键字值,必须考虑外表数据的一致性。一般有两种约束: 一是限制更新,即如果系统检查该记录主关键字值在某个外表中出现过,则不允许更新。 二是级联更新,即如果系统检查该记录主关键字值在某个外表中出现过,则在更新主表中该记录的同时,将外表中与主关键字值对应的记录的外关键字值全部更新。 【例2.18】 表的参照完整性的更新约束。欲将班级表 中“班号”是“11”的记录的班号更改为“88” 1.限制更新:不允许更新; 2.级联更新:同时更新学生表所有中“11”为“88”。
在数据库中有如下图所示的两个表,若职工表的主键是职工号,外键是部门号,部门表的主键是部门号,则SQL操作不能成功执行的是________。 A)从职工表中删除行('025','王百万','03',2900) B)将行('005','乔兴','04',750)插入到职工表中 C)将职工号为“001”的工资改为5700 D)将职工号为“003”的部门号改为'03'
通过以上例子的分析可以发现,保证数据的一致性和完整性对数据库是至关重要的。因此,在数据库设计时,必须充分考虑和应用关系完整性规则,以避免产生数据的不完整和不一致,给应用带来困难。另外,参照完整性也可以大大减少垃圾数据在数据库中的堆积。合理地利用关系完整性规则还可以简化应用程序开发,因为有些数据可以通过关系由数据库系统自动维护。 目前多数关系数据库都提供了比较完善的约束机制。只要用户在定义数据库时定义好约束规则,数据库管理系统会自动维护这些完整性约束来保证数据的完整性和一致性。
本书在2.5节介绍关系数据库操作的有关理论基础。 2.3.3 关系操作 关系模型的数据操作是以关系代数为理论基础的。 关系表可以看作是记录的集合。传统的集合操作包括并、交、差、广义迪卡儿积等,这些集合操作对应了数据库针对行的基本操作。 关系模型还专门定义了针对列的操作包括选择、投影、连接等。所有这些操作的结果,仍然是一个集合。 本书在2.5节介绍关系数据库操作的有关理论基础。
在关系模型各种操作运算的支持下,关系数据库主要支持以下一些针对关系表的操作: ① 插入。在一个表中插入一条或多条新记录。 ② 删除。从一个表删除一条或多条满足条件的记录。 ③ 修改。在一个表中修改满足条件的记录的某些字段的值。 ④ 查找。从一个或多个表中提取满足条件的数据、生成计算列或汇总数据。
关系数据库操作语言 关系数据库的基本操作语言是SQL(Structured Query Language)。 SQL语言以简洁的语法支持数据库的各类操作(查\插\删\改)。 SQL语言独立于数据库本身,独立于使用的机器、网络和操作系统。
2.4关系数据库体系结构 2.4.1关系数据库体系结构 从数据应用的角度来看,使用数据库有4类人员:用户、应用程序员、系统分析员和数据库管理员。由于他们对数据库的认识、理解和接触范围各不相同,从而形成了各自的数据库视图。 所谓视图是指观察、认识和理解数据的角度、范围和方法。 根据各类人员与数据库的不同关系,可把视图分为3种: 对应于用户和应用程序员的外部视图; 对应于系统分析员以及数据库管理员的逻辑视图; 对应于数据库管理员的内部视图。
由此形成数据库的三级模式结构,即外模式、逻辑模式和内模式。 系统分析员 &数据库管理员 用户和应用程序员视图 数据库管理员 数据库 应用 1 2 3 4 外视图 A B …… 外模式 逻辑视图 内视图 逻辑模式 内模式 姓名 学号 成绩 课程名 外模式
1.模式 模式又称逻辑模式,对应于一个应用的所有关系模式的集合以及关系完整性约束、所允许的关系操作就构成了关系数据库的逻辑模式。 一个数据库只有一个逻辑模式。 逻辑模式可以采用数据定义语言DLL描述。
教务系统数据库的关系图,反映了教务系统数据库的逻辑模式的概要信息。
2.外模式 外模式又称子模式或用户模式,对应于用户级,是某个或几个数据库用户和应用程序员所看到的数据库的局部数据视图。 外模式是从模式导出的子模式,可以利用数据操纵语言 DML对外模式进行操作。 一个数据库可以有多个外模式。
外模式可以通过定义“查询”或“视图”从“基本关系模式”导出: “查询”是根据指定条件对基本表进行查询所得的结果表,是临时表,虽然是实际存在的表,但数据也是来自基本表,且一般不再使用,具有一次性和冗余性的特点。 “视图”是为了方便查询和处理而设计的数据虚表,在数据库中只存储结构的定义,而没有存储对应的数据,数据来自数据库中的基本表。
【例2.19】从学生表变换得到学生生日视图。 如果只对学生表中的“姓名”和“出生日期”感兴趣,可定义子模式:学生生日(姓名,出生日期),则形成一个视图,从模式“学生表”导出子模式“学生生日”的变换如图所示。
【例2.20】从学生表、课程表和成绩表变换得到学生成绩子模式。 如果希望获得“姓名”,“课程名”和“成绩”,这三个字段分布在三个表中,可定义子模式:学生成绩(姓名,课程名,成绩),从模式“学生表”、“课程表”和“选课表”导出子模式“学生成绩”的变换如图所示。
3.内模式 内模式又称存储模式,是全体数据库数据的机器内部表示或存储结构描述,是真正存放在外存储器上的物理数据库,它描述了数据记录、索引、文件的组织方式和在存储介质上的物理结构。 内模式是数据库管理员创建和维护数据库的视图。 一个数据库只有一个内模式。
内模式主要关注以下问题: (1)关系存储 数据库逻辑结构中的关系模式与系统平台无关,但数据库存储模式必须考虑具体的计算机系统和所选定的DBMS,采用它们所支持的数据类型描述和完整性约束规则来定义数据表,并选取DBMS所支持的数据库文件结构存储方法,设计数据库文件的存储位置。 (2)关系存取 在数据库管理系统中,关系表中的数据按记录存储。为了提高对数据记录的查询效率,通常采用索引方法来建立数据记录的存取顺序。索引与书的目录或字典检字索引的原理是一样的。数据库管理系统一般集成了多种复杂的快速查找算法,但这些算法基本上都是以数据记录排序为前提的。
改善查询性能、加快依据索引字段对表中数据行的检索、强制保持表的数据唯一性等 ① 索引的概念 索引是由一个表中的一列或者若干列的值与其对应的记录在数据表中地址所组成。数据库中一个表的存储由两部分组成:数据页面和索引页面。 索引虽然能改善查询性能,但也耗费了磁盘空间,并且当对数据表进行数据增加、修改或删除时,系统需要花费一些时间来维护索引,所以通常不在一个表上建立太多索引,也不建立不常使用的索引。 创建索引的目的 改善查询性能、加快依据索引字段对表中数据行的检索、强制保持表的数据唯一性等 一般来说,需要在下面这些地方建立索引: 在主键和外键上创建索引。 在检索频繁的字段上建立索引。 在经常需要排序的字段上建立索引。
聚集索引的缺点:聚集索引重组了表的物理顺序,维护索引的时间和空间消耗都比较大 ② 索引的分类 聚集索引是对表中的数据行按指定索引字段值进行排序后再重新存储到磁盘上,使数据表的物理顺序与索引一致。 1)聚集索引 聚集索引的优点:检索速度比非聚集索引快 聚集索引的缺点:聚集索引重组了表的物理顺序,维护索引的时间和空间消耗都比较大 每个表只能建立一个聚集索引。 2)非聚集索引 非聚集索引的优点:不需要改变数据行的存储顺序 非聚集索引具有完全独立于数据行的结构,建立非聚集索引不需要将数据表中的数据行按索引字段值重新排序。 每个表只能建立一个聚集索引。
为了实现三个抽象层次间的联系和转换,数据库管理系统在三个模式间提供了两级映象: 4.数据库的三级模式的关系 数据库的三级模式是数据模型在三个级别的抽象,使用户能够逻辑地、抽象地处理数据而不必关心数据在计算机中的表示和存储,把数据的具体组织交给数据库管理系统。 为了实现三个抽象层次间的联系和转换,数据库管理系统在三个模式间提供了两级映象: ① 外模式与模式间的映象。 保证了数据的逻辑独立性,即当数据库的逻辑结构发生变化时,可通过调节外模式与模式间的映象关系,从而保证外模式不变,那么建立在外模式基础上的应用程序也不变
例如,有关系学生(学号,姓名,性别,年龄,专业),并为计算机专业学生建立了外模式CS学生(学号,年龄),应用程序中根据外模式“CS学生”编写。在后期数据库的应用中,发现数据库中“年龄”字段由于时间变化年龄值不确定,所以将其改为“出生年月”。这时我们只要通过调整从模式/外模式的映像就可以保持外模式不变了,即原来外模式中“年龄”直接从学生关系中获得,改为外模式中的“年龄”通过“出生年月”计算得到,外模式不变,建立在外模式上的应用程序也不用修改,这样,就实现了数据的逻辑独立性。
② 模式/内模式的映象 例如: 学生关系的存储位置、存取方式发生的变化,这时可以通过调整模式/内模式之间的映像关系从而保证模式不变。 模式/内模式的映象保证了数据的物理独立性,即当数据的存储结构发生变化时可以通过调节模式/内模式之间的映像关系从而保证模式不变。因为模式不变,外模式也就不变,建立在外模式上的应用程序也不变。 例如: 学生关系的存储位置、存取方式发生的变化,这时可以通过调整模式/内模式之间的映像关系从而保证模式不变。
2.4.2一个教务系统关系数据库 一个简单的教务系统的逻辑数据库结构和在SQL Server下的数据库设计(包括数据库逻辑结构和数据库物理结构),熟悉该数据库并体会数据库基本知识的应用,本书后续章节的例题都以该数据库为基础。 1.教务系统数据库的逻辑数据库结构
各个表的数据库物理结构设计如表2.1~2.6所示。这里只给出各关系表设计和完整性约束设计、索引设计。 2.SQLServer下的数据库物理设计 各个表的数据库物理结构设计如表2.1~2.6所示。这里只给出各关系表设计和完整性约束设计、索引设计。 字段名称 字段说明 类型定义 属性限定 索引 关系(外键) StudentCode 学号 char(4) Primary Key 主索引 StudentName 学生姓名 nvarchar (20) Not Null ClassCode 班号 char (2) Class: ClassCode Sex 性别 nchar (1) Not Null, "男"或"女" Birthday 出生日期 smalldatetime LiveInDorm 是否住校 bit Default 1 Telephone 联系电话 nvarchar (40) Photo 照片(存放路径和文件名) nvarchar(50) Description 个人介绍 nvarchar(100) PassWord 密码 nvarchar(16)
2.5关系模型的运算理论简介 了解关系模型的数学基础,对于理解关系模型、设计数据模式和实现应用很有帮助。 关系定义 关系运算
2.5.1关系定义 在关系模型中,无论是实体还是实体之间的联系均由单一的结构类型即关系(二维表)来表示。下面首先以关系代数中的集合理论引出关系定义。
例如,非负整数、整数、实数、长度小于25字节的字符串集合、[0,l]、大于等于0且小于等于I00的正整数等都可以是域。 域是一组具有相同数据类型的值的集合。 1.域 例如,非负整数、整数、实数、长度小于25字节的字符串集合、[0,l]、大于等于0且小于等于I00的正整数等都可以是域。 【例2.21】下列三个集合表示的域。 D1={陈佳迪,徐瑶琪},表示学生的集合; D2={男, 女},表示性别的集合; D3={上海, 浙江, 山西},表示籍贯的集合。
给定一组域D1,D2,…,Dn(这些域中可以有相同的域),则定义Dl,D2,…,D n的笛卡儿积为: 2.笛卡儿积 给定一组域D1,D2,…,Dn(这些域中可以有相同的域),则定义Dl,D2,…,D n的笛卡儿积为: D1×D2×…×Dn={(d1,d2,…,dn)| di∈Di,i=1,2,…n} 姓名 性别 籍贯 陈佳迪 男 上海 浙江 山西 女 徐瑶琪 笛卡儿积得到的也是一个集合,这个集合中的每一个元素称为一个n元组,简称元组。元组中的每一个di称为元组的一个分量,分别取自相应的集合Di。 【例2.22】例2.21中三个域的笛卡儿积。
笛卡儿积D1×D2×…×Dn的任意一个子集称为D1, D2,…,Dn上的一个n元关系。 3.关系 笛卡儿积D1×D2×…×Dn的任意一个子集称为D1, D2,…,Dn上的一个n元关系。 通常用R(D1,D2,…,Dn)表示,这里R为关系名,n是关系的度。 所以关系也是一个集合,它的元素为元组,通常用R表示。关系可以直观地用一个二维表表示,表的每一行对应一个元组,表的每一列对应一个域。由于域可以相同,为了加以区分,应对每列起一个名字,称为属性。显然,n元关系必有n个属性。 【例2.23】从例2.22中笛卡儿积的一个子集来构造一个关系。 姓名 性别 籍贯 陈佳迪 男 上海 徐瑶琪 女 浙江 构成了名为“学生”的关系模式,记为:学生(姓名,性别,籍贯)。其中,学生为关系名,姓名,性别,籍贯均为属性名。
2.5.2关系运算 关系代数以集合位基础的各种运算 ,可以支持对数据库的操纵要求,也是关系数据库操纵语言的理论基础。通常这类关系运算包括传统的集合运算和面向数据库的专门关系运算。
1.传统的集合运算 在传统的集合运算中,参加运算的集合都以元组(记录)作为它的元素,其运算是从“水平”的角度,即从行的角度来进行的。这些运算都是二元运算,由两个关系产生一个新的关系,主要包括并、交、差和笛卡儿积。 如果关系R和关系S具有相同的关系模式或相容(相容指两个关系含有相同属性结构,且对应属性的值域相同) ,则和可进行并、交、差运算。
(1)并运算 关系R和关系S的并运算形式化表示为: 并运算由属于R和属于S的所有元组组成,其结果关系的属性的个数与R或S相同。并运算实现了数据记录的合并,即表的插入操作。 【例2.24】文学社表和合唱团表的并运算。
b) 合唱团表S a) 文学社表R
交运算由既属于R又属于S的元组组成,其结果关系的属性的个数与R或S相同。交运算获得两个关系中相同的记录。 (2)交运算 关系R和关系S的交运算形式化表示为: 交运算由既属于R又属于S的元组组成,其结果关系的属性的个数与R或S相同。交运算获得两个关系中相同的记录。 (3)差运算 关系R和关系S的差运算形式化表示为: 差运算由属于R但不属于S的元组组成,其结果关系的属性的个数与R或S相同。
b) 合唱团表S a) 文学社表R 【例2.25】文学社表和合唱团表的交运算。 【例2.26】文学社表和合唱团表的差运算。
(4)广义笛卡儿积 广义笛卡儿积也是双目运算,但和并、交、差运算不同,它不要求参加运算的两个关系模式相同或相容。 关系R和关系U广义笛卡儿积运算形式化表示为: 一个n列的关系R和一个m列的关系U的广义笛卡儿积是一个(n + m)列元组的集合,元组的前n列是关系R的一个元组,后m 列是关系U的一个元组。若关系R有k1 个元组,关系U有k2个元组,则关系R和关系U的广义笛卡儿积有k1*k2个元组,广义笛卡儿积运算获得两个关系中记录联结。
【例2.24】文学社表和课程表的笛卡儿积运算。 c) 课程表U a) 文学社表R R*U
2.专门的关系运算 这种运算是为数据库的应用而引进的特殊运算,它主要是从列的角度即属性的角度来进行的,但有时也会对行有影响。专门的关系运算主要包括选择、投影、连接等。 (1)选择 选择操作是一元运算,它在关系中选择满足某些条件的元组,即在表中选择满足某些条件的行。因此选择结果的关系模式与原关系模式相同,只是数据是原数据的子集。选择操作实现了关系的水平分割。 关系R关于选择条件F的选择操作记为:
a) 文学社表R
(2)投影 投影操作是一元运算,它在关系中选择某些属性,因此选择结果的关系模式是原关系模式的子集。选择操作实现了关系的垂直分割。 关系R是k元关系,在其分量集合A的投影操作记为: (3)连接 连接操作是二元运算,指从两个关系的笛卡尔积中选取满足一定条件的元组。 连接条件中的属性称为连接属性,两个关系中的连接属性应该是可比的,即是同一类的数据类型,如都是数字型或字符型。连接条件中的运算符可以是=,>,>=,<,<=,<>,当此运算符取“=”时,称为等值连接。 如果等值连接中连接属性为相同属性(或属性组),而且在结果关系中去掉重复属性,则此等值连接称为自然连接。
专门的关系运算举例 c) 课程表U a) 文学社表R R和U等值联结 R和U自然联结