本文根据华南理工大学软件学院《数据库系统》课程及相关教材《数据库系统概念》总结,作复习回顾用。
内容涵盖考试范围,最多到第十四章。
Chapter. 1 引言
数据库管理系统(database-management system, DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成,这个数据集合通常被称为数据库(database)。DBMS的主要目标是提供一种可以方便、高效地存取数据库信息的途径。
设计数据库系统的目的:为了管理大量信息。
文件处理系统(file-processing system)储存组织信息的弊端有:数据冗余或不一致(data redundancy and inconsistency)、数据访问困难(difficulty in accessing data)、数据孤立(data isolation)、完整性问题(integrity problem)、原子性问题(atomicity problem)、并发访问异常(concurrent-access anomaly)、安全性问题(security problem)。
数据库系统的一个主要目的:给用户提供数据的抽象视图。
抽象层次:物理层(physical level)、逻辑层(logical level)、视图层(view level)。
特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance),而数据库的总体设计称作数据库模式(schema)。
根据不同的抽象层次,数据库系统可以分为集中不同的模式:物理模式(physical schema)在物理层描述数据库的设计;逻辑模式(logical schema)在逻辑层描述数据库的设计。数据库在视图层也可以有几种模式,有时称为子模式(subschema),它描述了数据库的不同视图。
应用程序如果不依赖于物理模式,它们就被称为具有物理数据独立性(physical data independence),即使物理模式改变了它们也无需重写。
数据库结构的基础是数据模型(data model)。数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合,提供了一种描述物理层、逻辑层以及视图层数据库设计的方式。
数据模型可被划分为四类:关系模型(relational model)、实体-联系模型(entity-relationship model)、基于对象的数据模型(object-based data model)、半结构化数据模型(semistructured data model)。在历史上网状数据模型(network data model)和层次数据模型(hierarchical data model)先于关系数据模型出现。
数据库系统提供数据定义语言(daata-definition language)来定义数据库模式,以及数据操纵语言(data-manipulation language, DML)来表达数据库的查询和更新。实际上,这两种语言不是分离的,它们简单地构成了单一的数据库语言。
数据操纵语言使得用户可以访问或操纵那些按照某种适当的数据模型组织起来的数据,有以下访问类型:
对存储在数据库中的信息进行检索。
向数据库中插入新的信息。
从数据库中删除信息。
修改数据库中存储的信息。
有两类基础的DML:过程化DML(procedural DML)和声明式DML(declarative DML)。DML中设计信息检索的部分称作查询语言(query language)。
数据库模式是通过一系列定义来说明的,这些定义由一种称作数据定义语言(DDL)的特殊语言来表达。DDL也可用于定义数据的其他特征。数据库系统所使用的储存结构和访问方式是通过一系列特殊的DDL语句来说明的,这种特殊的DDL称作数据存储和定义(data storage and definition)语言。
存储在数据库中的数据必须满足某些一致性约束(consistency constraint):域约束(domain constraint)、参照完整性(referential)、断言(assertion)、授权(authorization)
DDL的输出放在数据字典(data dictionary)中,数据字典包含了元数据(metadata),元数据是关于数据的数据。
为了访问数据库,DML语句需要有宿主语言来执行,有两种途径可以做到这一点:通过提供应用程序接口、通过扩展宿主语言的语法。
数据库设计的过程:概念设计(conceptual-design)、功能需求说明(specification of functional requirement)、逻辑设计(logical-design phrase)、物理设计(physical-design phrase)。
实体-联系(E-R)数据模型使用一组称作实体的基本对象,以及这些对象间的联系。实体是现实世界中可区别于其他对象的一件事情或一个物体。在数据库中,实体通过属性(attribute)集来描述。
联系(relationship)是几个实体之间的关联。同一类型的所有实体的集合称作实体集(entity set),同一类型的所有几何称作联系集(relationship set)。数据库的总体逻辑结构可以用实体-联系图(entity-relationship diagram)进行图形化表示。最常用的画图方法是采用统一建模语言(unified modeling language, UML)。
除了实体和联系外,E-R模型还描绘了数据库必须遵守的对其内容的某些约束。一个重要的约束是映射基数(mapping cardinality),它表示通过某个联系集能与一实体进行关联的实体数目。
设计关系数据库所用到的另一种方法是通常被称为规范化的过程,它的目标是生成一个关系模式集合,使我们存储信息时没有不必要的冗余,同事又能很轻易地检索数据。这种方法是设计一种符合适当的范式的模式(normal form)的模式,为确定一个关系模式是否符合想要的范式,我们需要额外的关于用数据库建模的现实世界中机构的信息。最常用的方法是使用函数依赖(functional dependency)。
储存管理器是数据库系统中负责在数据库中储存的低层数据与应用程序以及想系统提交的查询之间提供接口的部件,负责与文件管理器进行交互。存储管理部件包括:权限及完整性管理器(authorization and integrity manager)、事务管理器(transaction manager)、文件管理器(file manager)、缓冲区管理器(buffer manager)。存储管理器实现了几种数据结构:数据文件(data files)、数据字典(data dictionary)、索引(index)。
查询处理器包括:DDL解释器(DDL interpreter)、DML编译器(DML compiler)、查询执行引擎(query evaluation engine)。
事务(transaction)是数据库应用中完成单一逻辑功能的操作集合。每一个事务是一个既具原子性(atomicity)又具有一致性(consistency)的单元。为了保证原子性,失败的事务必须对数据库状态不产生任何影响,数据库必须被恢复到该失败事务开始执行以前的状态,这种情况下数据库系统必须进行故障恢复(failure recovery),即检测系统故障并将数据库恢复到故障发生以前的状态。并发控制管理器(concurrency-control manager)控制并发事务间的相互影响,保证数据库一致性。事务管理器包括并发控制管理器和恢复管理器(recovery manager)。
数据库应用通常可分为两或三个部分。在一个两层体系结构(two-tier architecture)中,应用程序驻留在客户机上,通过查询语言表达式来调用服务器上的数据库系统功能。而在一个三层体系结构中(three-tier architecture)中,客户机只作为一个前端并且不包含任何直接的数据库调用。客户端通常通过一个表单界面与应用服务器(application server)进行通信。而应用服务器与数据库系统通信以访问数据。应用程序的业务逻辑(business logic),也就是说在何种条件下作出何种反应,被嵌入到应用服务器中,而不是分布在多个客户机上。
数据挖掘(data mining)指半自动地分析大型数据库并从中找出有用的模式的过程。
对系统进行集中控制的人称作数据库管理员(database administrator, DBA),作用有:模式定义(schema definition)、存储结构及存取方法定义(storage structure and access-method definition)、模式及物理组织的修改(schema and physical-organization modification)、数据访问授权(granting of authorization for data access)、日常维护(routine maintenance)。
Chapter. 2 关系模型介绍
关系数据库由表的集合构成。用关系实例(relation instance)这个术语来表示一个关系的特定实例。
数据库模式(database schema)是数据库的逻辑设计,数据库实例(database instance)是给定时刻数据库中数据的一个快照。关系模式(relation schema)的概念对应于程序设计语言中类型定义的概念。
超码(superkey)是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组。若超码K的任意真子集都不能成为超码,则超码K被称为候选码(candidata key)。
主码(primary key)代表被数据库设计者选中的,主要用来在一个关系中区分不同元组的候选码。
一个关系模式(如r1)可能在它的属性中包括另一个关系模式(如r2)的主码,这个属性在r1上称作参照r2的外码(foreign key)。关系r1也成为外码依赖的参照关系(referencing relation),r2叫做外码的被参照关系(referenced relation)。
一个含有主码和外码依赖的数据库模式可以用模式图(scheme diagram)来表示。
查询语言(query language)是用户用来从数据库中请求获取信息的语言。在过程化语言中,用户知道系统对数据库执行一系列操作以计算出所需结果;在非过程化语言中,用户只需描述所需信息,而不用给出获取该信息的具体过程。
所有的过程化关系查询语言都提供了一组运算,这些运算要么施加于单个关系上,要么施加于一对关系上,且群算结果总是单个的关系。最常用的关系运算是从单个关系中选出满足一些特定谓词的特殊元组。另一个常用的运算是从一个关系中选出特定的属性(列),其结果是一个只包含那些被选择属性的新关系。
连接运算可以通过下述方式来结合两个关系:把分别来自两个关系的元组对合并成单个元组。两个关系上的自然连接运算所匹配的元组在两个关系共有的所有属性上取值相同。笛卡尔积运算是从两个关系中合并远足,其结果包含来自两个关系元组的所有对,无论它们的属性值是否匹配。
Chapter. 3 SQL
SQL语言有以下几个部分:数据定义语言(DDL)、数据操纵语言(DML)、完整性(integrity)、视图定义(view definition)、事务控制(transaction control)、嵌入式SQL和动态SQL(embedded SQL and dynamic SQL)、授权(authorization)。
SQL中的DDL不仅能够定义一组关系,还能够定义每个关系的信息,包括:每个关系的模式、每个属性的取值类型、完整性约束、每个关系维护的索引集合、每个关系的安全性和权限信息、每个关系在磁盘上的物理存储结构。
SQL语句不详述,多写几次就懂了。https://www.cnblogs.com/JHSeng/p/10714042.html
自然连接(natural join)运算作用于两个关系,并产生一个关系作为结果。自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对。
被用来重命名关系的标识符在SQL标准中被称作相关名称(correlation name),也被称作表别名(table alias)、相关变量(correlation variable)、元组变量(tuple variable)。
SQL作用在关系上的union、intersect和except运算对应于数学集合论中的并、交和差运算。
聚集函数是以值的一个集合(集或多重集)为输入、返回单个值的函数。SQL提供了五个固有聚集函数:avg、min、max、sum、count(计数)。
SQL提供嵌套子查询机制。子查询是嵌套在另一个查询中的select-from-where表达式。
SQL孕育测试元组在关系中的成员资格。连接词in测试元组是否是集合中的成员,集合是由select子句产生的一组值构成的。连接词not in则测试元组是否不是集合中的成员。
Chapter. 4 中级SQL
SQL提供了连接运算的其他形式,包括能够指定显式的连接谓词(join predicate),能够在结果中包含被自然连接排除在外的元组。
外连接(outer join)运算与我们已经学过的连接运算类似,但通过在结果中创建包含空值元组的方式,保留了那些在连接中丢失的元组。
外连接三种形式:左外连接(left outer join)、右外连接(right outer join)、全外连接(full outer join)。
左外连接只保留出现在左外连接运算之前的关系中的元组;右外连接只保留出现在右外连接运算之后的关系中的元组;全外连接保留出现在两个关系中的元组。为了与外连接运算相区分,我们此前学习的不保留未匹配元素的连接运算被称作内连接运算(inner join)。
右外连接和左外连接是对称的。来自由此关系中的不匹配左侧关系任何元组的元组被补上空值,并加入到右外连接的结果中。全外连接是左外连接与右外连接类型的组合。在内连接结果计算出来之后,左侧关系中不匹配右侧关系任何远足的元组被添上空值并加到结果中。类似地,右侧关系中不匹配左侧关系任何元组的元组也被添上空值并加到结果中。全外连接是左外连接与右外连接类型的组合。在内连接结果计算出来之后,左侧关系中不匹配右侧关系任何远足的元组被添上空值并加到结果中。类似地,右侧关系中不匹配左侧关系任何元组的元组也被添上空值并加到结果中。
为了把常规连接和外连接区分开来,SQL中把常规连接称作内连接。这样连接子句就可以用inner join来替换outer join,说明使用的是常规连接。
SQL允许通过查询来定义“虚关系”,它在概念上包含查询的结果。虚关系并不预先计算并存储,而是在使用虚关系的时候才通过执行查询被计算出来。作为虚关系对用户可见的关系被称为视图(view)。师徒关系是在需要的时候才被创建的。特定数据库系统允许存储视图关系而且保证:如果用于定义视图的实际关系改变,视图也跟着修改。这样的视图被称为物化视图(materialized view)。保持物化视图一直在最新状态的过程称为物化视图维护(materialized view maintenance),或者通常简称视图维护(view maintenance)。
事务(transaction)由查询和更新语句的序列组成。SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务。有两条SQL语句会结束一个事务:Commit work(提交当前事务), Rollback work(回滚当前事务)。
完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。完整性约束防止的是对数据的意外破坏,通常被看成是数据库模式设计过程的一部分。
我们常常希望保证在一个关系中给定属性集上的取值也在另一关系的特定属性集的取值中出现,这种情况称为参照完整性(referential integrity)。
一个断言(assertion)就是一个谓词,它表达了我们希望数据库总能满足的一个条件。域约束和参照完整性约束是断言的特殊形式。
在关系的属性上所创建的索引(index)是一种数据结构,它允许数据库系统高效地找到关系中那些在索引属性上取给定值的元组,而不用扫描关系中的所有元组。
SQL支持两种形式的用户定义数据类型。第一种称为独特类型(distinct type);另一种称为结构化数据类型(structured data type)。允许创建具有嵌套记录结构、数组和多重集的复杂数据类型。
当代数据库系统提供了三层结构的关系命名机制。最顶层由目录(catalog)构成,每个目录都可以包含模式(schema)。诸如关系和视图那样的SQL对象都包含在模式中。
我们会给一个用户在数据库的某些部分授予几种形式的权限,包括:读取数据、插入新数据、更新数据、删除数据。每种类型的授权都称为一个权限(privilege)。SQL标准包括select、insert、update和delete权限。所有权限(all privileges)可以用作所有允许权限的简写形式。使用revoke语句来收回权限。
可以在数据库中建立一个角色(role)集,给角色授予权限,就和给每个用户授权的方式一样,每个数据库用户被授予一组他有权扮演的角色。
Chapter. 5 && 6 高级SQL 形式化关系查询语言
不考,但是数据库实训会用到。
Chapter. 7 数据库设计和E-R模型
先概览一遍数据库设计过程。
- 设计阶段
- 数据库设计的最初阶段需要完整地刻画未来数据库用户的数据需求。
- 设计者选择数据模型,并采用所选的数据模型的概念将这些需求转化为数据库的概念模式。
- 完善的概念模式还指明企业的功能需求。
- 从抽象数据模型到数据库实现的转换过程在最后两个设计阶段中进行:逻辑设计阶段(logical-design phase)和物理设计阶段(physical-design phase)。
- 设计选择
用实体(entity)这个术语来知识所有可明确识别的个体。在设计一个数据库模式的时候,必须确保避免两个主要的缺陷:冗余和不完整。
实体-联系(E-R)数据模型的提出旨在方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式实现的。它采用了三个基本概念:实体集、联系集和属性。
每个实体有一组性质,其中一些性质的值可以唯一地标识一个实体。
实体集是相同类型即具有相同性质或属性的一个实体集合。实体集的外延(extension)来指属于实体集的实体的实际集合。实体集不必互不相交。
实体通过一组属性(attribute)来表示。属性是实体集中每个成员所拥有的描述性性质。每个实体的每个属性都有一个值。
联系(relationship)是指多个实体间的相互关联。联系集是相同类型联系的集合。实体集之间的关联称为参与。E-R模式中的一个联系实例(relationship instance)表示在所建模的现实世界企业中命名实体间的一个关联。实体在联系中扮演的功能称为实体的角色。
联系也可以具有描述性属性(descriptive attribute)。
参与联系集的实体集的数目称为联系集的度(degree)。例如二元联系集的度为2,三元联系集的度为3。
每个属性都有一个可取值的集合,称为该属性的域(domain),或者值集(value set)。
E-R模型中的属性可以按照如下属性类型进行划分:简单(simple)和复合(composite)、单值(single-valued)和多值(multivalued)、派生(derived)属性。
映射基数(mapping cardinality),或基数比率,表示一个实体通过一个联系集能关联的实体的个数。对于实体集A和B之间的二元联系集R来说,映射基数必然是以下四种情况之一:一对一(ont-to-one)、一对多(one-to-many)、多对一(many-to-one)、多对多(many-to-many)。
如果实体集E中的每个实体都参与到联系集R的至少一个联系中,实体集E在联系集R中的参与称为全部(total)的,反之称为部分(partial)的。
E-R图包括如下几个主要构件:
- 分成两个部分的矩形代表实体集。
- 菱形代表联系集。
- 未分割的矩形代表联系集的属性。
- 线段将实体集连接到联系集。
- 虚线将联系集属性连接到联系集。
- 双线显示实体在联系集中的参与度。
- 双菱形代表连接到弱实体集的标志性联系集。
没有足够的属性以形成主码的实体集称作弱实体集(weak entity set),有主码的实体集称作强实体集(strong entity set)。弱实体集必须与另一个称作标识(identifying)或属主实体集(owner entity set)的实体集关联才能有意义。也就是说,弱实体集存在依赖(existence dependent)于标识实体集。将弱实体集与其标识实体集相连的联系称为标识性联系(identifying relationship)。
对于多对多的二元联系,参与实体集的主码属性的并集成为主码;对于一对一的二元联系集,任何一个实体集的主码都可以选作主码;对于一对多或多对一,多的那一方实体集的主码做主码。
在决定用实体集还是联系集时可采用的一个原则是,当描述发生在实体间的行为时采用联系集。
在实体集内部进行分组的过程称为特化(specialization)。在E-R图中描述特化的方法取决于一个实体集是否可能属于多个特化实体集或者它是否必须属于至多一个特化实体集。前者称为重叠特化(overlapping specialization),后者称为不相交特化(disjoint specialization)。特化关系还可能形成超类-子类(superclass-subclass)联系。
从初始实体集到一系列不同层次的实体子集的细化代表了一个自顶向下(top-down)的设计过程,在这个设计过程中,显式地产生出差别。设计过程也可以自底向上(bottom-up)进行,多个实体集根据共同具有的特征综合成一个叫高层的实体集。
若两个实体集包含相同的属性,这种共性可以通过概化(generalization)来表达,概化是高层实体集与一个或多个低层实体集间的包含关系。
高层与低层实体集也可以分别称作超类和子类。
由特化和概化所产生的高层和低层实体的一个重要特性是属性继承(attribute inheritance)。高层实体集的属性被低层实体集集成(inherit)。低层实体集同事还继承地参与其高层实体所参与的联系集。和属性继承类似,参与继承适用于所有低层实体集。
在层次结构(hierarchy)中,给定是实体集作为低层实体集只参与到一个ISA联系中,即在这个图中实体集只具有单继承(single inheritance)。如果一个实体集作为低层实体集参与到多个ISA联系中,则称这个实体机具有多继承g(multiple inheritance),且产生的结构称为格(lattice)。
数据库设计者可能选择在特定概化上设置某些约束。一类约束包含判定哪些实体能称为给定低层实体集的成员,成员资格可以为:条件定义的(condition-defined)、用户定义的(user-defined)。另一类约束设计在一个概化中一个实体是否可以属于多个低层实体集低层实体集可能是下属情况之一:不相交(disjoint)、重叠(overlapping)。最后一类约束是对概化的完全性约束(completeness constraint),定义高层实体集中的一个实体是否必须至少属于该概化/特化的一个低层实体集。这种约束可以使下属情况之一:全部概化(total generalization)、部分概化(partial generalization)。
聚集(aggregation)是一种抽象,通过这种抽象,联系被视为高层实体。
Chapter. 8 关系数据库设计
如果某个表项x至多对应一个表项y,或存在一条规则“如果存在模式(x,y),则x可以作为主码”,这条规则被定义为函数依赖(functional dependency):x→y。
分解有:有损分解(lossy decomposition)和无损分解(lossless decomposition)。
一个关系的满足所有这种现实世界约束的实例,称为关系的合法实例(legal instance)。
第一范式(1NF):关系模式R的所有属性的域都是原子的(atomic),即该域的元素被认为是不可分割的单元。在任何一个关系型数据库中,这是最基本的要求。
第二范式(2NF):首先满足1NF。然后包含两部分内容:一、表必须有一个主键;二、没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式(3NF):首先满足2NF。然后非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在如下情况:非主键列A依赖于非主键列B,非主键列B依赖于主键。
BC范式(boyce-codd NF, BCNF):首先满足3NF。然后表中不存在关键字段决定关键字段的情况。
给定关系模式r(R),如果r(R)的每一个满足F的实例也满足f,则R上的函数依赖f被r上的函数依赖集F逻辑蕴涵(logically imply)。
Armstrong公理(Armstrong's axiom):自反律(reflexivity rule)、增补律(augmentation rule)、传递律(transitivity rule)。另外补上的规则有:合并律(union rule)、分解律(decomposition)、伪传递律(pseudotransitivity rule)。
如果a→B,称属性B被a函数确定(functionally determine)。如果取出函数依赖中的一个属性不改变该函数以来即的闭包,则称该属性是无关的(extraneous)。
如果两个关系模式r1(R1)和r2(R2)替代r(R)时没有信息损失,则我们称该分解是无损分解。
数据库设计的一个期望的特性是唯一角色假设(unique-role assumption),意味着每个属性名在数据库中只有唯一的含义。
把一个规范化的模式变成非规范化的过程称为去规范化(denormalization),设计者用它调整系统的性能以支持响应时间苛刻的操作。
时态数据(temporal data)是具有关联的时间段的数据,在时间段之间数据有效。
Chapter. 9 && 10 应用设计与开发 存储和文件结构
不考
Chapter. 11 索引与散列
两种基本的索引类型:顺序索引、散列索引。
用于在文件中查找记录的属性或属性集称为搜索码(search key)。如果一个文件上有多个索引,那么它就有多个搜索码。
如果包含记录的文件按照某个搜索码指定的顺序排序,那么该搜索码对应的索引称为聚集索引(clustering index),也称为主索引(primary index)。
搜索码指定的顺序与文件中记录的物理顺序不同的索引称为非聚集索引(nonclustering index)或辅助索引(secondary index)。
索引项(index entry)或索引记录(index record)由一个搜索码值和指向具有该搜索码值的一条或多条记录的指针构成。顺序索引有两类:稠密索引(dense index)和稀疏(sparse index)索引。
稠密索引中,文件中的每个搜索码值都有一个索引项,包括搜索码值以及指向具有该搜索码值的第一条数据记录的指针。
只有当关系按照搜索码排列顺序存储时才能使用稀疏索引,也就是说只有索引是聚集索引时才能使用稀疏索引。
一个包含多个属性的搜索码被称为复合搜索码(composite search key)。
索引顺序文件组织最大的缺点在于,随着文件的增大,索引查找性能和数据顺序扫描性能都会下降。
B+树索引结构是在数据插入和删除的情况下仍能保持其执行效率的索引结构之一,采用平衡树结构(balanced tree)。每个叶节点最多可有n-1个值,最少为ceil((n-1)/2)。非叶节点形成叶节点上的一个多级(稀疏)索引。一个非叶节点课容纳最多n个指针,至少容纳ceil(n/2)个指针。
假如一个关系可以拥有多个包含同一搜索码值的记录,那么该搜索码称为不唯一搜索码(nonunique search key)。
覆盖索引(covering index)存储一些属性(但不是搜索码属性)的值以及指向记录的指针。
桶(bucket)表示能存储一条或多条记录的一个存储单位。
令K表示所有搜索码的集合,令B表示所有桶地址的集合,散列函数(hash function)h是一个从K到B的函数。在散列文件组织(hash file organization)中,通过计算所需记录搜索码值上的一个函数直接获得包含该记录的磁盘块地址。
散列可以用于两个不同的目的:在散列文件组织(hash file organization)中,通过计算所需记录搜索码值上的一个函数直接获得包含该记录的磁盘块地址。在散列索引组织(hash index organization)中,我们把搜索码以及与它们相关联的指针组织成一个散列文件结构。
如果桶没有足够的空间,就会发生桶一处(bucket overflow)。桶溢出的原因:桶不足、偏斜(skew)。为了减少桶溢出的可能性,桶的数目选为(nr/fr)*(d+1)。其中d为避让因子,典型值约为0.2。用溢出桶(overflow bucket)来处理桶溢出问题。使用链接列表的溢出处理称为溢出链(overflow chaining)。以上散列结构称为闭地址(close addressing),也叫闭散列(close hashing)。
另一种方法称为开地址(open addressing),它的桶集合是固定的,没有溢出链。当一个桶满了以后,系统将记录插入到初始桶集合B的其他桶中。一种策略是使用下一个有空间的桶,这个策略称为线性探查法(linear probing)。
散列索引(hash index)将搜索码及其相应的指针组织成散列文件结构。动态散列(dynamic hashing)允许散列函数动态改变,以适应数据库增大或缩小的需要。
可扩充散列最主要的优点是其性能不随文件的增长而降低。此外,其空间开销是最小的。可扩充散列的一个缺点是在于查找设计一个附加的间接层,因为系统在访问桶本身之前必须先访问桶地址表。
位图(bitmap)就是位的一个简单数组。在其最简单的形式中,关系r的属性A上的位图索引(bitmap index)是由A能取的每个值建立的位图构成的。
Chapter. 12 查询处理
加了“如何执行”注释的关系代数运算称为计算原语(evaluation primitive)。用于执行一个查询的原语操作序列称为查询执行计划(query-execution plan)或查询计算计划(query-evaluation plan)。查询执行引擎(query-execution engine)接受一个查询执行计划,执行该计划并把结果返回给查询。
假设计算机中没有其他活动在进行,那么一个查询计算计划的响应时间(response time)(即执行计划所需的挂钟时间)就是所有的这些开销,并可以作为计划的代价的度量。因此,优化器通常努力去尽可能降低查询计划总的资源消耗(resource consumption),而不是尽可能降低响应时间。
在查询处理中,文件扫描(file scan)是存取数据最低级的操作,是用于定位、检索满足选择条件的记录的搜索算法。最简单的方法是线性搜索。使用索引的搜索算法称为索引扫描(index scan),包括:主索引和码属性等值比较、主索引和非码属性等值比较、辅助索引等值比较。
对不能全部放在内存中的关系的排序称为外排序,最常用的技术是外部排序归并算法(external sort-merge)。对N个归并段进行排序的归并排序称为N路归并(N-way merge)。
提两个知识点:嵌套循环连接(nested-loop join)和块嵌套循环连接(block nested-loop join)。
归并连接(merge join)算法可用于计算自然连接和等值连接。
在计算多个运算的表达式时,把运算的中间结果物化(创建出来),然后用于下一层的计算,这种计算方法被称为物化计算(materialized evaluation)。
Chapter. 13 查询优化
这部分没什么好讲的,看书就好了,反正全是推导。
Chapter. 14 事务
事务(transaction)是访问并可能更新各种数据项的一个程序执行单元。通常由高级数据操纵语言或编程语言通过JDBC或ODBC嵌入式数据库访问书写的用户程序的执行所引起。
事务特性:原子性(atomicity),隔离性(isolation),持久性(durability),一致性(consistency)。四个特性合称为ACID特性(ACID property)。
事务并非总能成功地完成,这种事务被称为中止(aborted)、一旦种质食物造成的变更被撤销,我们就说事务已回滚(rolled back)。典型方法是维护一个日志(log)。一旦事务已经提交(committed),不能通过中止它来撤销其造成的影响,唯一方法是执行一个补偿事务。事务必须处于以下状态之一:活动的(active)、部分提交的(partially committed)、失败的(failed)、中止的(aborted)、提交的(committed)。系统判定事务不能继续正常执行之后,事务就进入失败状态,这种事务必须回滚。这样,事务就进入中止状态。系统有两种选择:重启事务或杀死事务。
命令的执行顺序被称为调度(schedule)。保证所执行的任何调度都能使数据库处于一致状态,这是数据库系统的任务,负责完成此任务的是并发控制(concurrency-control)部件。
串行化顺序(serializability order)可通过拓扑排序(topological sorting)得到。
事务隔离性级别:可串行化(serializable)、可重复读(repeatable read)、已提交读(read committed)、未提交读(read uncommitted)。