1.4 关系数据库
1.4.1 基本概念
1.关系术语
在关系数据库中,有以下几个常见的关系术语:
①关系。关系就是一个二维表格,每个关系都有一个关系名,在SQL Server 2008中,一个关系称为一个表(Table)。
②记录(元组)。在一个具体的关系中,每一行称为一个记录,又称元组。
③字段(属性)。在一个具体的关系中,每一列称为一个字段,又称属性。
④域。域就是属性的取值范围,即不同记录对同一个属性的取值所予以限定的范围。例如,“成绩”属性的域是0~100;“性别”属性的域范围为“男”和“女”。
⑤关键字。在一个关系中有一个或几个这样的字段(属性),其值可以唯一地标识一个记录,称为关键字。例如,学生表中的“学号”字段就可以作为一个关键字,而“姓名”字段因其值不唯一而不能作为关键字。
⑥关系模式。对关系的描述称为关系模式。一个关系模式对应一个关系,是命名的属性集合。其格式为:
关系名(属性名1,属性名2,…,属性名n)
例如:
学生(学号,姓名,年龄,性别)
课程(课程号,课程名,学分,学时)
选修(学号,课程号,成绩)
一个具体的关系模型则是若干个相联系的关系模式的集合。以上3个关系模式就组成了关系模型。
2.关系的约束
关系表现为二维表,但不是所有的二维表都是关系。成为关系的二维表有如下约束:
①不允许“表中套表”,即表中每个属性必须是不可分割的数据单元。或者说每个字段不能再分为若干个字段,即表中不能再包含表。
②在同一个关系中不能出现相同的属性名。
③列的次序可以任意交换,不改变关系的实际意义。
④表中的行称为元组,代表一个实体,因此表中不允许出现相同的两行。
⑤行的次序可以任意交换,不会改变关系的意义。
注意:上述各种名词,在实际的关系型DBMS中往往叫法不一样,如在SQL Sever大型数据库中把关系称为“数据库文件”或“表”,把属性称为“字段”,把元组称为“记录”。
1.4.2 关系运算
数学中的算术运算是大家熟悉的。例如,2+3是一个数学运算,该运算的运算对象是数值2和3,运算法则是加法,运算结果也是数值5。与此类似,关系运算的运算对象是关系(二维表),关系运算的法则包括选择、投影、连接,关系运算结果也是关系(二维表)。下面分别介绍这3种关系运算法则。
1.选择
选择(Selection)运算是在一个关系中找出满足给定条件的记录。选择是从行的角度对二维表格的内容进行筛选,形成新的关系。例如,学生表如表1-1所示。
表1-1 学生表
【例1-1】从学生表中选择男同学,其结果如表1-2所示。SQL语句如下:
表1-2 选择运算结果
通俗地说,选择运算是将满足条件的元组提取出来,组成一个新的关系。
2.投影
投影(Projection)是从一个关系中找出符合条件的属性列组成新的关系。投影是从列的角度对二维表的内容进行筛选或重组,形成新的关系。
【例1-2】从表1-1所示的学生表中筛选所需要的列:姓名和出生日期,结果如表1-3所示。SQL语句如下:
SELECT 姓名,出生日期
FROM 学生
表1-3 投影运算结果
从上述两例得知:选择从行的角度进行运算,投影则是从列的角度进行运算。
注意:若投影后出现完全相同的元组(行),则取消重复的元组(行)。
【例1-3】从表1-1所示的学生表中筛选性别列,结果如表1-4所示。SQL语句如下:
SELECT 性别
FROM 学生
表1-4 投影运算结果
3.连接
连接(Join)是从两个关系的笛卡儿积中选取属性之间满足一定条件的元组形成的新关系。在此不给出笛卡儿积的定义,仅仅通过一个举例对笛卡儿积进行初步了解,对于笛卡儿积的定义请大家参考离散数学。
设关系R和关系S分别如表1-5和表1-6所示。
表1-5 关系R
表1-6 关系S
说明:关系R中的属性A和关系S中的属性A取自相同的域。
对关系R和关系S做笛卡儿积的结果如表1-7所示。
表1-7 R和S的笛卡儿积
连接运算中有两种常用的连接:一种是等值连接(Equi-Join);另一种是自然连接(Natural Join)。等值连接是选取R与S的笛卡儿积的属性值相等的那些元组。自然连接要求两个关系中进行比较的分量必须是相同属性组,且要在结果中把重复的属性去掉。
【例1-4】关系R与关系S按属性A的值做等值连接的结果如表1-8所示。
表1-8 等值连接后的结果
自然连接Rs的结果如表1-9所示。
表1-9 自然连接后的结果
从表中可看出两点:第一点是一般的连接操作是从行的角度进行运算的;第二点是自然连接与等值连接的主要区别是自然连接中没有相同的列。
总之,在对关系数据库的查询中,利用关系的投影、选择和连接运算可以很方便地分解或构造新的关系。
1.4.3 关系数据库
基于关系模型建立的数据库称为关系数据库,它具有通用的数据管理功能,数据表示能力较强,易于理解,使用方便。20世纪80年代以来,关系数据库理论日益完善,并在数据库系统中得到了广泛的应用,是各类数据库中使用最为重要、最为广泛、最为流行的数据库。
关系数据库是一些相关的表和其他数据库对象的集合。这里有三层含义:
①在关系型数据库中,数据存储在二维表结构的数据表中,一个表是一个关系,又称实体集。通常:
● 一个表包含若干行,每一行称为一条记录,表示一个实体。
● 每一行数据由多列组成,每一列称为一个字段,反映了该实体某一方面的属性。
● 实体的属性中,能唯一标识实体集中每个实体的某个或某几个属性,称为实体的关键字,在关系数据库中,关键字称为主键。
②数据库所包含的表之间是有联系的,联系由表的主键和外键所体现的参照关系实现。通常:
● 关系表现为表。关系数据库一般由多个关系(表)组成。
● 表之间由某些字段的相关性而产生联系。在关系数据库中,表既能反映实体,又能表示实体之间的联系。
● 用表的主键和外键反映实体间的联系。在关系数据库中,外键(Foreign Key)是指表中含有的与另一个表的主键相对应的字段,用来与其他表建立联系。
③数据库不仅包含表,还包含其他的数据库对象,如视图、存储过程和索引等。
数据库是存储数据的容器,数据主要保存在数据库的表中,所以数据表是数据库的基本对象。除此之外,在数据库中还有其他对象,常用的有:
● 视图:是一个虚拟表,可用于从实际表中检索数据,并按指定的结构形式浏览。
● 存储过程:是一个预编译的语句和指令的集合,可执行查询或者数据维护工作。
● 触发器:是特殊的存储过程,可设计为在对数据进行插入、修改或删除时自动调用。
● 索引:用于实现快速对数据表中数据的检索访问,以及增强数据完整性。
● 规则:通过绑定操作,可用于限定数据表中数据的有效值或数据类型。
目前使用的数据库系统大都是关系数据库。现在关系数据库以其完备的理论基础、简单的模型和使用的便捷性等优点获得了最广泛的应用。本书中阐述的数据库模型都是关系模型。