【从零开始学习计算机科学】数据库系统(二)关系数据库 与 关系代数
- 关系数据库
-
- 结构化查询语言SQL
-
- 数据定义语言(DDL)
- 数据查询语言(Data Query Language, DQL)
- 数据操纵语言(Data Manipulation Language, DML)
- 数据控制语言(Data Control Language, DCL)
- 关系型数据库的优缺点
- 关系数据结构及形式化定义
-
- 相关概念
- 关系代数
-
- 传统的集合运算
-
- 并 Union
- 差 Difference
- 交 Intersection
- 广义笛卡尔积 Extended Cartesian Product
- 专门的关系运算
- 选取Selection
- 投影Projection
- θ \theta θ连接( θ \theta θ Join)
- 除法Division
关系数据库
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。当创造一个关系数据库的时候,你能定义数据列的可能值的范围和可能应用于那个数据值的进一步约束。而SQL语言是标准用户和应用程序到关系数据库的接口。其优势是容易扩充,且在最初的数据库创造之后,一个新的数据种类能被添加而不需要修改所有的现有应用软件。主流的关系数据库有oracle、db2、sqlserver、sybase、mysql等。
在关系型数据库中,实体以及实体间的联系均由单一的结构类型来表示,这种逻辑结构是一张二维表。
以下为一个学生选课系统,区实体和实体间联系在数据库中的逻辑结构可通过下图展示。
关系型数据库以行和列的形式存储数据,这一系列的行和列被称为表,一组表组成了数据库。下图所示的员工信息表就是关系型数据库的表。
属性说明:
二维表:也称为关系,它是一系列二维数组的集合,用来代表与存储数据对象之间的关系。它由纵向的列和横向的行组成。
行:也叫元组或记录,在表中是一条横向的数据集合,代表一个实体。
列:也叫字段或属性,在表中是一条纵行的数据集合。列也定义了表中的数据结构。
主属性:关系中的某一属性组,若它们的值唯一地标识一个记录,则称该属性组为主属性或主键。主属性可以是一个属性,也可以由多个属性共同组成。在上图中,学号是学生信息表的主属性,但是课程信息表中,学号和课程号共同唯一地标识了一条记录,所以学号和课程号一起组成了课程信息表的主属性。
结构化查询语言SQL
关系型数据库的核心是其结构化的查询语言(Structured Query Language, SQL),SQL 涵盖了数据的查询、操纵、定义和控制,是一个综合的、通用的且简单易懂的数据库管理语言。同时 SQL 又是一种高度非过程化的语言,数据库管理者只需要指出做什么,而不需要指出该怎么做即可完成对数据库的管理。
SQL 可以实现数据库全生命周期的所有操作,所以 SQL 自产生之日起就成了检验关系型数据库管理能力的“试金石”,SQL 标准的每一次变更和完善都引导着关系型数据库产品的发展方向。
SQL 至少包含以下四个部分。
数据定义语言(DDL)
DDL 包括 CREATE、DROP、ALTER 等动作。在数据库中使用 CREATE 来创建新表,DROP 来删除表,ALTER 负责数据库对象的修改。
例如,创建学生信息表使用以下命令:
CREATE TABLE StuInfo(id int(10) NOT NULL,PRIMARY KEY(id),name \\varchar(20), female bool,class varchar(20));
数据查询语言(Data Query Language, DQL)
DQL 负责进行数据查询,但是不会对数据本身进行修改。
DQL的语法结构如下:
SELECT FROM 表名1,表2
where 查询条件 \#可以组合 and、or、 not、 =、between、and、in、like 等;
group by 分组字段
having (分组后的过滤条件)
order by 排序字段和规则;
数据操纵语言(Data Manipulation Language, DML)
DML 负责对数据库对象运行数据访问工作的指令集,以 INSERT、UPDATE、DELETE 三种指令为核心,分别代表插入、更新与删除。
向表中插入数据命令如下:
INSERT 表名 (字段1,字段2,......,字段n,) VALUES (字段1值,字段2值,......,字段n值) where 查询条件;
数据控制语言(Data Control Language, DCL)
DCL 是一种可对数据访问权进行控制的指令。它可以控制特定用户账户对查看表、预存程序、用户自定义函数等数据库操作的权限,由 GRANT 和 REVOKE 两个指令组成。
DCL 以控制用户的访问权限为主,GRANT 为授权语句,对应的 REVOKE 是撤销授权语句。
关系型数据库的优缺点
关系型数据库已经发展了数十年,其理论知识、相关技术和产品都趋于完善,是目前世界上应用最广泛的数据库系统。
关系型数据库的优点主要有:
容易理解:二维表结构非常贴近逻辑世界的概念,关系型数据模型相对层次型数据模型和网状型数据模型等其他模型来说更容易理解。
使用方便:通用的 SQL 使用户操作关系型数据库非常方便。
易于维护:丰富的完整性大大减少了数据冗余和数据不一致的问题。关系型数据库提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制和死锁问题的解决。
关系型数据库的缺点主要有:
随着各类互联网业务的发展,关系型数据库难以满足对海量数据的处理需求,存在以下不足。
高并发读写能力差:网站类用户的并发性访问非常高,而一台数据库的最大连接数有限,且硬盘 I/O 有限,不能满足很多人同时连接。
对海量数据的读写效率低:若表中数据量太大,则每次的读写速率都将非常缓慢。
扩展性差:在一般的关系型数据库系统中,通过升级数据库服务器的硬件配置可提高数据处理的能力,即纵向扩展。但纵向扩展终会达到硬件性能的瓶颈,无法应对互联网数据爆炸式增长的需求。还有一种扩展方式是横向扩展,即采用多台计算机组成集群,共同完成对数据的存储、管理和处理。这种横向扩展的集群对数据进行分散存储和统一管理,可满足对海量数据的存储和处理的需求。但是由于关系型数据库具有数据模型、完整性约束和事务的强一致性等特点,导致其难以实现高效率的、易横向扩展的分布式架构。
关系数据结构及形式化定义
关系模型是建立在集合代数的基础上的。关系的每个分量必须是不可分割的数据项。
相关概念
域:一组具有相同数据类型的值的集合。
笛卡尔积:是在域上的一种运算。
关系:关系是笛卡尔积的有限子集,是一张二维表,每行对应元组,每列对应属性。关系的本质就是集合。
码(键):如果一个属性能够唯一的标志一个元组,则这个属性就是一个码。
候选码:如果一个码就是最小超码,将它称为候选码。
主码:当有多个候选码时,选定一个为主码,由用户明确定义,通常用下划线表示。
外码:表B的主键出现在了表A中,这个主键称为表A的外码。
参照关系与被参照关系(目标关系):参照关系中的外码的值在被参照关系中必须实际存在或者为空。
全码:关系模式的所有属性都是这个关系模式的候选码。
关系的类型:基本关系,查询表和视图表。
关系代数
关系模型中常用的关系操作包括查询操作和更新操作(包括插入、删除和修改)两大部分。从计算机语言角度看,后者在前者的基础上工作,前者比后者复杂,但前者有理论基础,所以成为了主要的研究对象,也是关系操作中最主要的部分。
关系操作采用集合操作方式,即操作的对象和结果都是集合,称为Set-at-a-time(一次一集合)的操作方式。
早期的关系操作通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。前者用对关系的运算来表达查询要求,后者用谓词来表达查询要求。关系演算又可以根据谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。三种运算语言在表达能力上是等价的。
关系代数的运算对象是关系,运算结果也是关系。而我们说过关系是笛卡尔积集合的子集,所以也印证了我们前述Set-at-a-time的操作方式。关系代数中用到的运算符主要有以下的类型:
集合运算符 ∪ \cup ∪(并), ∩ \cap ∩(交), − - −(差), × \times ×(笛卡尔积):
专门的关系运算符 σ \sigma σ(选取), Π \Pi Π(投影), ⋈ X θ Y \bowtie_{X\theta Y} ⋈XθY( θ \theta θ连接), ⋈ \bowtie ⋈(自然连接), ÷ \div ÷(除)。
算术比较运算符: > , < , ≤ , ≥ , = , ≠ >,<,\leq,\geq,=,\neq >,<,≤,≥,=,=。
逻辑运算符: ∧ , ∨ , ℸ \land,\lor,\daleth ∧,∨,