且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

更新时间:2022-09-17 08:11:03

本节书摘来自华章计算机《计算机系统:核心概念及软硬件实现(原书第4版)》一书中的第1章,第1.4节,作者:[美] J. 斯坦利·沃法德(J. Stanley Warford)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4数据库系统

数据库系统是App7层最常见的应用之一。数据库(database)是包括相关联信息的文件汇集,而数据库系统(database system)(也称作数据库管理系统,DBMS)是一个让用户在数据库中添加、删除和修改记录的程序,它也允许对数据库进行查询。查询(query)是对信息的请求,所请求的信息通常来自数据库的不同部分。
这里有一个数据库的例子,一个家具制造商利用数据库维护有关它的库存、零件供应商和货运的信息。查询可能是请求一个报告,显示仓库中制造某一款沙发所需部件的数量。为了生成这个报告,数据库系统将来自数据库中不同部分的信息组合起来,在这个例子中信息来自库存文件和制造该沙发所需原料的文件。
数据库系统主要分为3类:层次型系统、网状型系统和关系型系统。在这3种类型的数据库系统中,层次型系统是最快的,但对用户来说是最受限制的。如果你能自然地把数据库中的信息组织成像层次图那样的结构,这个系统就是很适合的。网状型系统比层次型系统更灵活,但是对用户来说,它比关系型数据库系统更难一些。
关系型系统是三者中最常见的,它是App7层上最灵活也最容易使用的。但是在计算机系统中,没有免费的午餐,它获得高灵活性的代价是,相比于其他数据库系统,它的速度更低。这一节描述关系型DBMS背后的基本思想。
1.4.1关系
关系型数据库系统(relational database system)把信息存储在文件中,对外呈现表结构。每个表有固定的列数和可变的行数。图1-21是一个关系型数据库中信息的示例。每个表有一个名字。名为Sor的表包含姐妹会成员的信息,名为Frat的表包含兄弟会成员的信息。位于App7层的用户先固定每个表中垂直的列数,再在表体中输入信息。水平方向的行数是可变的,这样能够在表中增加或者删除人员。

《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

在关系型数据库术语中,表称作关系(relation),列为属性(attribute),行叫元组(tuple,与couple同韵)。在图1-21中,Sor和Frat是关系,(Nancy,Jr,Math,NY)是Sor的一个四元组,因为它有4个元素,而F.Major是Frat的一个属性。属性的域(domain)是该属性所有可能值的集合。S.Major和F.Major的域是集合{Hist,Math,CompSci,PolySci,English}。
Edgar Codd
Edgar Codd于1923年出生在英格兰多塞特郡波特兰市,是7个孩子中最小的一个。他曾经就读于牛津大学,主修数学和化学专业。第二次世界大战期间他是皇家空军的飞行员。1948年,他移居纽约,就职于IBM。不满于参议院约瑟夫·麦卡锡对所谓的共产主义同情者的攻击,他搬到渥太华居住,20世纪50年代早期生活在这里。
Codd最终在密歇根大学安娜堡分校获得了计算机科学专业博士学位,然后迁居加利福尼亚州圣何塞市,就职于IBM研究实验室。1970年,他写出了里程碑式的论文“A Relational Model of Data for Large Shared Data Banks”(大型共享数据库的关系数据模型)。在该论文发表时,数据库系统的用户接口是在较低的抽象层次上。要执行一个查询,用户不得不使用复杂的查询语言,该语言依赖于数据在磁盘上存储方式的细节。Codd的关系型数据库语言把用户放在了较高的抽象层次上,隐藏了原有语言中用户进行查询所需要知道的细节。Codd、Don Chamberlin和Ray Boyce一起发明了结构化查询语言(Structured Query Language,SQL),SQL语言已经成为关系型数据库查询的标准语言。
对Codd来说不幸的是,IBM并没有像它的竞争对手那样迅速认识到Codd工作的商业价值。直到Larry Ellison以Codd的研究为基础创建了一家公司,就是后来的Oracle(甲骨文)。1973年,IBM开始了System R计划,验证Codd的关系型理论。最终在1978年,Codd论文发表整整8年后,IBM开始构建商用关系型数据库产品。
Edgar Codd被广泛认为是关系型数据库的发明者。1981年,由于他在数据库管理系统理论和实践方面基础而持续的贡献,他被授予图灵奖。Codd于2003年在佛罗里达州威廉姆斯岛的家中逝世,享年79岁。
1.4.2查询
请求Ron的家乡州、请求姐妹会中所有二年级学生的名字,这些都是从该数据库进行查询的例子。请求一个列表、列出所有具有相同专业的兄弟会和姐妹会成员以及该专业的名字,是另一个查询的例。
在这个小例子中,你可以手工搜索数据库来确定每个查询的结果。Ron的家乡州是OR,Beth和Allison是姐妹会中二年级学生。第三个查询制成表格稍微有点难度:Beth和Jeff是历史专业;Nancy和Ron是数学专业,Nancy和Mehdi也是;Robin和Jeff是历史专业等。
有趣的是,每个查询结果都可以以表格的形式列出来(见图1-22)。第一个查询的结果是一个1列1行的表格,第二个查询的结果是一个1列2行的表格,而第三个查询的结果是一个3列8行的表格。关系型数据库是关系的汇集,而一个对关系型数据库查询的结果本身也是一个关系!

《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

查询结果本身就是关系这一事实是关系型数据库系统一个强大的理念。Apps7层的用户把数据库看作关系的汇集,用户的查询就是请求从数据库现有的关系中衍生出另一个关系。
记住每层都有自己的语言。Apps7层关系型DBMS的语言是一组对现有关系进行组合或者修改并产生新关系的命令。Apps7层的用户使用这些命令生成想要的结果。图1-23展示了数据库、查询和结果之间的关系。数据库是输入,查询是一组Apps7层语言写的命令。就像在计算机系统中所有层上一样,三者之间的关系都是一样的形式:输入、处理和输出。

《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

本章不描述市场上每种关系型数据库系统的每种语言,而是描述一种具备这样一些系统典型特征的简化语言。大多数关系型DBMS语言有许多强大的命令,但是3个命令是最基础的—select、project和join。
select和project语句类似,因为它们都是对单个关系进行操作,生成一个修改的关系。select语句是从一个特定的表中提取满足语句中指定条件的行。project语句是根据语句中指定的属性从一个特定的表中提取一组列。图1-24说明了语句
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统


《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

的结果。

《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

project语句可以指定多列,此时属性用圆括号括起来,并用逗号分隔。例如,
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

从Sor关系中选出两个属性。
注意,在图1-24c中(Sr, CA)对是关系Sor(见图1-21)中的四元组(Robin, Sr, Hist, CA)和(Lulwa, Sr, CompSci, CA)都有的,但是这一对在关系Temp3中不重复出现。关系的一个基本性质就是在任何表中不能有重复的行。project操作符会检测重复行,不允许它们存在。从数学上说,关系就是元组的集合,集合中的元素不能有重复。
join与select和project不同,它的输入是两个表,而不是一个。第一个表的一列和第二个表的一列被指定作为join列。每个表的join列必须有相同的域。两个表join的结果是一个更宽的表,除了join列只出现一次以外,它的列和两个表中原始的列完全相同;结果表的行就是在两个原始表中在join列有相同元素的那些行。
例如,在图1-21中,S.Major列和F.Major有相同的域。语句
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

指定Major作为join列,关系Sor和Frat在这一列上进行合并。图1-25显示了两个表join后的行是那些专业相同的行。Sor的四元组(Robin, Sr, Hist, CA)和Frat的三元组(Jeff, Hist, TX)合并在Temp4中,因为它们的专业(Hist)是一样的。

《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

1.4.3语言结构
App7层语言的语句有如下格式:
select 关系 where 条件 giving 关系
project 关系 over 属性 giving 关系
join 关系 and 关系 over 属性 giving 关系
语言的保留字包括
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

正如前面的例子展示的那样,每个保留字在语言中都有特定的含义。在语言中识别对象的单词,例如Sor和Temp2用于标识关系,而F.state用于标识属性,都不是保留字。它们是App7层的用户随意生成的,称为标识符(identifier)。保留字和用户定义的标识符在典型计算机系统的所有层语言中都是很常见的。
你知道怎样用select、project和join语句来生成图1-22中的查询结果吗?第一个询问Ron的家乡州的查询语句是
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

第二个询问姐妹会中所有二年级学生名字的查询语句是
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统

第三个请求查询一个列表,表中列出专业一样的兄弟会和姐妹会的成员以及他们共同的专业,该查询的语句是
《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统