建立数据库系统离不开数据模型。模型是对现实世界的抽象,在数据库技术中,我们用模型的概念描述数据库的结构与语义,对现实世界进行抽象。能表示实体类型及实体间联系的模型称为“数据模型”。
数据模型的种类很多,目前被广泛使用的可分为两种类型。一种是独立于计算机系统的数据模型,完全不涉及信息在计算机中的表示,只是用来描述某个特定组织所关心的信息结构,这种模型称为“概念数据模型”。概念模型是按用户的观点对数据建模,强调其语义表达能力,概念应该简单、清晰、易于用户理解,它是对现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具。其典型代表就是著名的“实体-关系模型”,我们将在1.4节详细介绍实体-关系模型的知识。
另一种数据模型是直接面向数据库的逻辑结构,它是对现实世界的第二层抽象。这种模型直接与数据库管理系统有关,称为“逻辑数据模型”,包括层次模型、网状模型、关系模型和面向对象模型。逻辑数据模型应该包含数据结构、数据操作和数据完整性约束三个部分,通常有一组严格定义的无二义性语法和语义的数据库语言,人们可以用这种语言来定义、操作数据库中的数据。
在逻辑数据模型的四种模型中,层次模型和网状模型已经很少应用,而面向对象模型比较复杂,尚未达到关系模型数据库的普及程度。目前理论成熟、使用普及的模型就是关系模型。关系模型是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上是一张二维表格。关系模型用键导航数据,其表格简单,用户只需用简单的查询语句就可以对数据库进行操作,并不涉及存储结构、访问技术等细节。SQL语言是关系数据库的代表性语言,已经得到了广泛的应用。典型的关系数据库产品有
DB2、Oracle、Sybase、SQL Server等。
1.2.1 关系数据模型基本概念在关系数据模型中,关系可以看成由行和列交叉组成的二维表格,表中一行称为一个元组,可以用来标识实体集中的一个实体。表中的列称为属性,给每一列起一个名称即为属性名,表中的属性名不能相同。列的取值范围称为域,同列具有相同的域,不同的列也可以有相同的域。表中任意两行(元组)不能相同。能唯一标识表中不同行的属性或属性组称为主键。
尽管关系与传统的二维表格数据文件具有类似之处,但是它们又有区别,严格地说,关系是一种规范化的二维表格,具有如下性质:
◆属性值具有原子性,不可分解。
◆没有重复的元组。
◆理论上没有行序,但是有时使用时可以有行序。
在关系数据库中,关键码(简称键)是关系模型的一个重要概念,是用来标识行(元组)的一个或几个列(属性)。如果键是唯一的属性,则称为唯一键;反之由多个属性组成,则称为复合键。键的主要类型如下:
◆ 超键 在一个关系中,能唯一标识元组的属性或属性集称为关系的超键。
◆ 候选键 如果一个属性集能唯一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。
◆ 主键 如果一个关系中有多个候选键,则选择其中的一个键为关系的主键。用主键可以实现关系定义中“表中任意两行(元组)不能相同”的约束。
例如,在本书的示例数据库图书管理系统中,我们以图书明细表为例。在该表中,我们假设图书编号列是唯一的,因为图书馆管理员是通过该编号对图书进行操作的。因此,把图书编号作为主键是最佳的选择,而如果使用图书名称列作为主键则会存在问题。为此,最好创建一个单独的键将其明确地指定为主键,这种唯一标识符在现实生话中很普遍,例如,身份证号、牌照号、订单号、学生标识号和航班号等。
◆外键 如果一个关系R中包含另一个关系S的主键所对应的属性组F,则称此属性组F为关系R的外键,并称关系S为参照关系,关系R是依赖关系。为了表示关联,可以将一个关系的主键作为属性放入另外一个关系中,第二个关系中的那些属性就称为外键。
例如,同样是在图书管理系统数据库,有一个出版社表用来描述出版社的各种信息,像电话、地址和网址等,在该表中使用“出版社编号”作为主键。为了表示图书与出版社之间的联系,我们可以将出版社表中的主键“出版社编号”作为新列添加到图书明细表中。
在这种情况下,图书明细表中的“出版社编号”就被称为外键,因为“出版社编号”是其所在表以外(出版社表)的一个主键。
当出现外键时,主键与外键的列名称可以是不同的。但必须要求它们的值集相同,即图书明细表中出现的“出版社编号”一定要和出版社表中的值匹配。
1.2.2 关系模型数据操作语言关系模型提供一组完备的高级关系运算,以支持对数据库的各种操作。关系数据库的数据操作语言(DML)的语句分为查询语句和更新语句两大类。查询语句用于描述用户的各类检索要求;更新语句用于描述用户的插入、修改和删除等操作。
关系数据操作语言建立在关系代数基础上,具有以下特点:
◆ 以关系为单位进行数据操作,操作的结果也是关系。
◆非过程性强。很多操作只需指出做什么,而勿需步步引导怎么去做。
◆以关系代数为基础,借助于传统的集合运算和专门的关系运算,使关系数据语言具有很强的数据操作能力。
下面我们介绍在数据操作语言中对数据库进行查询和更新等操作的语句:
◆ SELECT语句 指定的条件在一个数据库中查询的结果,返回的结果被看作记录的集合。
◆ SELECT...INTO语句 用于创建一个查询表。
◆ INSERT INTO语句 用于向一个表添加一个或多个记录。
◆ UPDATE语句 用于创建一个更新查询,根据指定的条件更改指定表中的字段值。UPDATE语句不生成结果集,而且当使用更新查询更新记录之后,不能取消这次操作。
◆DELETE语句 用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足WHERE子句中的条件,可以使用DELETE删除多个记录。
◆ INNER JOIN操作 用于组合两个表中的记录,只要在公共字段之中有相符的值。可以在任何FROM子句中使用 INNER JOIN 运算。这是最普通的连接类型。只要在这两个表的公共字段之中有相符的值,内部连接将组合两个表中的记录。
◆LEFT JOIN操作 用于在任何FROM子句中组合来源表的记录。使用LEFT JOIN 运算来创建一个左边外部连接。左边外部连接将包含从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
◆ RIGHT JOIN操作 用于在任何FROM子句中组合来源表的记录。使用 RIGHT JOIN 运算创建一个右边外部连接。右边外部连接将包含从第二个(右边)表开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。
◆ PARAMETERS声明 用于声明在参数查询中的每一个参数的名称及数据类型。PARAMETERS 声明是可选的,但是当使用时,需置于任何其他语句之前,包括 SELECT语句。
◆ UNION操作 用于创建一个联合查询,它组合了两个或更多的独立查询或表的结果。所有在一个联合运算中的查询,都须请求相同数目的字段,但是,字段不必大小相同或数据类型相同。
1.2.3 Codd准则和完整性规则根据关系数据理论和Codd准则的定义,一种语言必须能处理与数据库的所有通信问题,这种语言有时也称为“综合数据专用语言”。该语言在关系型数据库管理系统中就是SQL。SQL的使用主要通过数据操作、数据定义和数据管理三种操作实现。其中Codd提出了RDBMS的12项准则。
◆信息准则 关系数据库中的所有信息都应在逻辑一级上用一种方法,即表中的值,显示的表示。
◆ 保证访问准则 依靠于表名、主键和列名,保证能以逻辑的方式访问数据库中的每个数据项。
◆ 空值的系统化处理 RDBMS支持空值(不同于空的字符串或空白字符串,并且不为0)系统化地表示缺少的信息,且与数据类型无关。
◆ 基于关系模型的联机目录 数据库的描述在逻辑上应该和普通数据采用同样的方式,使得授权用户可以使用查询一般数据所用的关系语言来查询数据库的描述信息。
◆ 统一的数据字语言准则 一个关系系统可以具有多种语言和多种终端使用方式(如表格填空方式、命令行方式等)。但是,必须有一种语言,它的语句可以表示为具有严格语法规定的字符串,并能全面地支持以下功能:数据定义、视图定义、数据操作(交互式或程序式)、完整约束、授权、事务控制(事务开始、提交、撤销)。
◆视图更新准则 所有理论上可更新的视图也应该允许由系统更新。
◆ 高阶的插入,更新和删除 把一个基本关系或导出关系作为一个操作对象进行数据的检索以及插入、更新和删除。
◆ 数据的物理独立性 无论数据库的数据在存储表示上或存取方法上做任何变化,应用程序和终端活动要都保持逻辑上的不变性。
◆ 数据的逻辑独立性 当基本表中进行理论上信息不受损害的任何变化时,应用程序和终端活动都要保持逻辑上的不变性。
◆ 数据完整性的独立性 关系数据库的完整性约束必须是用数据子语言定义并存储在目录中的,而不是在应用程序中加以定义的。至少要支持以下两种约束:实体完整性,即主键中的属性不允许为NULL。参照完整性,即对于关系数据库中每个不同的非空的外码值,必须存在一个取自同一个域匹配的主键值。
◆分布的独立性 一个RDBMS应该具有分布独立性。分布独立性是指用户不必了解数据库是否是分布式的。
◆无破坏准则 如果RDBMS有一个低级语言(一次处理一个记录),这一低级语 言不能违背或绕过完整性准则以及高级关系语言(一次处理若干记录)表达的 约束。
数据库管理系统是对数据进行管理的大型系统软件,它是数据库系统的核心组成部分,用户在数据库系统中的一切操作,包括数据定义、查询、更新及各种控制,都是通过DBMS进行的。
关系模型的完整性规则是对数据的约束。关系模型提供了三类完整性规则:实体完整性规则、参照完整性规则和用户定义的完整性规则。其中实体完整性规则和参照完整性规则是关系模型必须满足的完整性的约束条件,称为关系完整性规则。
◆实体完整性 指关系的主属性(主键的组成部分)不能是空值。空值(null)就是指不知道或是不能使用的值,它与数值0和空字符串的意义都不一样。
◆ 参照完整性 如果关系的外键R1与关系R2中的主键相符,那么外键的每个值必须在关系R2中主键的值中找到或者是空值。
◆用户定义完整性 是针对某一具体的实际数据库的约束条件。它由应用环境所决定,反映某一具体应用所涉及的数据必须满足的要求。关系模型提供定义和检验这类完整性的机制,以便用统一的、系统的方法处理,而不必由应用程序承担这一功能。