我校使用Database System Concepts,9-12章不考所以跳过,因为课都逃了所以复习很仓促,只准备过一下每一章最后的概念辨析,我也不知道有没有用
第1章 引言
- 数据库管理系统(DBMS) 由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。
- 数据库系统应用:①高价值;②庞大;③多用户访问。
- 联机事务处理即大量的用户使用数据库,每个用户检索相对少量的数据,进行小的更新。
- 数据分析即审阅数据,给出结论,并推导出规则或决策程序。
- 文件处理系统将数据永久存储在不同的文件中的管理方式。
- 数据不一致性,即同一数据的不同副本不一致(文件处理系统的弊端,说人话就是改了一个忘了改别的)。
- 一致性约束,就是同一类数据是否合法的自动判断(文件处理系统的弊端)。
- 数据抽象
- 物理层详细描述复杂的底层数据结构。
- 逻辑层描述数据库中存储什么数据以及这些数据间存在什么联系。
- 视图层一个数据库内有多个,使用户和系统的交互更简单。
- 实例(instance) :特定时刻存储在数据库中的信息的集合。
- 模式(schema) :数据库的总体设计。
- 物理模式在物理层描述数据库的设计。
- 逻辑模式在逻辑层描述数据库的设计。
- 子模式:描述数据库的不同视图。
- 物理数据独立性:在数据抽象的不同层级都不需要掌握其他层级的结构。
- 数据模型
- 关系模型用表的集合来表示数据和数据间的联系。
- 实体-联系模型使用称作实体的基本对象的集合,以及这些对象间的联系。
- 半结构化数据模型允许在其数据定义中某些相同类型的数据项含有不同的属性集。
- 基于对象的数据模型可以看成对关系模型进行扩展,增加了封装、方法和对象标识等概念。
- 数据库语言
- 数据定义语言(DDL) 定义数据库模式。
- 数据操纵语言(DML) 表达数据库的查询和更新。
- 过程化DML要求用户指定需要什么数据以及如何获得这些数据。
- 声明式DML(也称为非过程化DML)只要求用户指定需要什么数据,而不必指明如何获得这些数据。
- 查询语言:DML中涉及信息检索的部分。
- 数据定义语言
- 域约束指的就是数据类型。
- 引用完整性确保一个关系中的取值在另一个关系中也出现
- 授权
- 读权限:可读不能改
- 插入权限:可加新数据不可改已有的
- 更新权限:可改不能删
- 删除权限
- 元数据(metadata) 是关于数据的数据,说人话就是预处理出来的一个方便后续操作的类似目录的东西。
- 应用程序就是用来以SQL查询来访问数据库中的数据这种方式与数据库进行交互的程序。
- 数据库设计
- 概念设计涉及决定数据库中应该包括哪些属性,以及如何组织这些属性到各个表中。
- 规范化将所有属性集作为输入,生成一组关系表的算法(见第8章)。
- 功能需求说明,用户描述将在数据之上执行的各种操作(或事务)。
- 物理设计阶段,在这个阶段中说明数据库的物理特性,包括文件组织的形式和内部的存储结构。
- 数据库引擎
- 存储管理器是数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供借口的部件。
- 权限及完整性管理器检测是否满足完整性约束,并检查视图访问数据的用户的权限。
- 事务管理器保证即使系统发生了故障,数据库也保持在一致的(正确的)状态,并保证并发事务的执行不发生冲突。
- 文件管理器管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构。
- 缓冲区管理器负责将数据从磁盘上取到内存中,并决定那些数据应被缓冲存储在内存中。
- 数据文件存储数据库自身。
- 数据字典存储关于数据库结构的元数据,特别是数据库模式。
- 索引提供对数据项的快速访问,就相当于很多现成能用的指针。
- 查询处理器
- DDL解释器解释DDL语句并将这些定义记录在数据字典中。
- DML编译器将查询语言中的DML语句翻译为包括一系列查询执行引擎能理解的低级指令的执行方案。
- 查询优化就是从几个候选执行计划中选出代价最小的那个执行计划。
- 查询执行引擎执行由DML编译器产生的低级指令。
- 事务是数据库应用中完成单一逻辑功能的操作集合。
- 原子性:要么都发生,要么都不发生
- 一致性:数据变化前后的正确性
- 持久性:完成后就不会自己回退
- 恢复管理器:保证原子性和持久性
- 故障恢复:为保证原子性,失败要回退
- 并发控制管理器:控制并发事物间的影响
- 存储管理器是数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供借口的部件。
- 数据库体系结构
- 集中式的:所有数据集中存储在一个中心节点,便于管理和维护,但可能受限于单个节点的性能和容量。
- 并行的:利用多个CPU协同工作,提高数据处理能力和系统吞吐量,适用于大规模数据处理和高性能需求。
- 分布式的:数据分散存储在多个节点上,实现跨地域的数据共享和访问,具有高可用性和易于扩展的特点。
- 数据库应用体系结构
- 两层的:应用程序驻留在客户机上,通过查询语言语句调用数据库功能。
- 三层的:客户机仅作为一个前端,没有任何直接的数据库调用。
- 应用服务器:计算在何种条件下做出何种反应。
- 数据库管理员(DBA) 是对系统进行集中控制的人。
第2章 关系模型介绍
- 表(table) :就是表格呗
- 关系(relation) :表在关系模型中的高级表述
- 元组(tuple) :行在关系模型中的高级表述
- 属性(attribute) :列在关系模型中的高级表述
- 关系实例(relation instance) :指代一个关系的特定实例(也就是选中某一行)
- 域(domain) :对于关系的每个属性存在的一个允许取值的集合
- 原子域(atomic domain) :不可再分的单元组成的域
- 空值(null value) 是一个特殊的值,表示值未知或不存在。
- 数据库模式(database schema) 指数据库的逻辑设计。
- 数据库实例(database instance) 是在给定时刻数据库中数据的一个快照。
- 关系模式(relation schema) 的概念对应于程序设计语言中类型定义的概念。
- 码是一种用来区分一个给定关系中的不同元组的方式。
- 超码(superkey) 是一个或多个属性的集合。
- 候选码(candidate key) 是最小的超码。
- 主码(primary key,又称主码约束) 代表被数据库设计者选中来作为在一个关系中区分不同元组的主要方式的候选码,说人话就是每一行的主码都不一样,是对每一行来说唯一的编号之类的。
- 外码约束
- 从 r 1 r_1 r1关系的 A A A属性(集)到 r 2 r_2 r2关系的主码 B B B的外码约束(foreign-key constraint) 表明:在任何数据库实例中, r 1 r_1 r1中每个元组对 A A A的取值也必须是 r 2 r_2 r2中某个元组对 B B B的取值。 A A A属性集被称为从 r 1 r_1 r1引用 r 2 r_2 r2的外码(foreign key) 。 r 1 r_1 r1关系也被称为此外码约束的引用关系(referencing relation) ,且 r 2 r_2 r2被称为被引用关系(referenced relation) 。
- 讲人话就是说假如现在有个公司,把员工的住址和工资分成两个表,那么这两个表里面一定都有
员工姓名
这一列对吧,而且这一列一定是一一对应的,那这一列就是外码了。
- 引用完整性约束(referential integrity constraint) 要求引用关系中的任意元组在指定属性上出现的取值也必然出现在被引用关系中至少一个元组的指定属性上。
- 模式图(schema diagram) 用来表示一个带有主码和外码约束的数据库模式。
- 查询语言类型(query language)
- 命令式(imperative)查询语言中,用户指导系统在数据库上执行特定的运算序列以计算出所需的结果。
- 函数式(functional)查询语言中,计算被表示为对函数的求值,这些函数可以在数据库中的数据上运行或在其他函数给出的结果上运行。
- 声明式(declarative)查询语言中,用户只需描述所需信息,而不用给出获取该信息的具体步骤序列或函数调用,所需的信息通常使用某种形式的数学逻辑来描述。
第3章 SQL介绍
- 数据定义语言提供定义关系模式、删除关系以及修改关系模式的命令。
- 数据操纵语言提供从数据库中查询信息以及在数据库中插入元组、删除元组、修改元组的能力。
- SQL查询结构
- select子句(单关系查询):可以查用
select name from instructor;
看instructor
表中的name
列的所有内容- 在select后面加distinct表示去重
- 在select后面加all表示不去重(默认也是不去重)
- 可以一次select多列
- 后面的列名可以加数学运算符
- from子句:表示你要在哪个表里面查
- where子句:可以加条件判断,表示只有满足条件的行的内容才会被选
- select子句(单关系查询):可以查用
- 多重集关系代数(multiset relational algebra) 是一种运算(不细究底层内容,可以自己看P45的注释3-1)
- as子句是一种重命名结果关系中属性的方式,说人话就是给显示的结果的列改个显示的名字
- order by子句可以让查询结果中的元组按排列顺序显示。
- desc表示降序
- asc表示升序
- 写在前面的优先级更高,比如
order by salary desc, name asc;
表示先按工资降序排列,如果工资相等按照姓名升序排列
- 表别名(table alias)/相关名称(correlation name)/相关变量(correlation variable)/元组变量(tuple variable) 就是as子句里面你改的那个名字
- 集合运算:SQL作用在关系上的union、intersect、except运算对应于数学集合论中的 ∪ ∪ ∪、 ∩ ∩ ∩、 − - −运算
- 并(union) ,两个完整的语句加个括号中间用union连接就可以用了
- 默认去重,不去重要在union后面加all
- 交(intersect) ,用法一样
- 如果加all的话也是表示不去重,但是不是说本来出现3次和4次我显示7次,会按照少的那边显示,也就是3次,但是你不加all的话只会显示1次
- 差(except)
- 假如一个项目分别出现6次和3次,如果不加all则会显示0次,如果加了就会显示3次
- 并(union) ,两个完整的语句加个括号中间用union连接就可以用了
- 聚集函数(aggregate function) 是以值集(集合或多重集合)为输入并返回单个值的函数。
- SQL提供了五个标准的固有聚集函数
- 平均值:avg
- 最小值:min
- 最大值:max
- 总和:sum
- 计数:count
- group by子句可以将聚集函数作用在一组元组集上
- having子句可以对分组限定条件
- SQL提供了五个标准的固有聚集函数
- 嵌套子查询:子查询是嵌套在另一个查询中的
select-from-where
表达式。- 一个完整的表达式用括号括起来就可以当成一个表给别人进行其他的查询
- 集合比较
- {<,<=,>,>=} {some,all}
- 比如
where T.salary > S.salary and S.dept_name='Biology'
表示工资比生物系某位老师的工资高的所有老师的姓名 - some表示‘至少比某一个要大’,all表示‘比所有的都大’
- 比如
- exists结构在作为参数的子查询非空时返回true值
- unique结构在作为参数的子查询结果中没有重复的元组时返回true值
- {<,<=,>,>=} {some,all}
- lateral子句:从SQL:2003开始的SQL标准允许from子句中的子查询用关键字lateral作为前缀,以便访问同一个from子句中在它前面的表或子查询的属性。说人话就是括号里面的那个查询的结果也会输出出来。
- with子句提供了一种定义临时关系的方式,这个定义只对包含with子句的查询有效
- 标量子查询:只返回一个包含单个属性的元组的可以出现在表达式任何地方的子查询。
- 数据库修改
- 删除请求的表达方式与查询非常相似,只能删除整个元组而不能删除某些属性上的值。
delete from r where P;
表示满足条件P的行全部删掉。
- 插入
insert into
起手,后面是value
接括号,默认按列顺序,要修改的话就要在表名后面加括号表示第几个在哪一列- 还可以直接将select的结果insert进需要的地方
- 更新
update p set q where r
表示在p表内满足调节r的全部进行q更新
- 删除请求的表达方式与查询非常相似,只能删除整个元组而不能删除某些属性上的值。
第4章 中级SQL
- 连接类型
- 自然连接(natural join) 运算作用于两个关系,并产生一个关系作为结果。具体来说,
select name,course_id from student,takes where student.ID=takes.ID;
等价于select name,course_id from student natural join takes;
。 - 带using和on的内连接
- using是用来在上面的自然连接里面人工选择一个共有的列作为判断依据
- on跟where差不多,在连接的时候加一个条件判断
- 左外连接、有外连接和全外连接
- 左外连接(left outer join) 只保留出现在左外连接运算之前(左边)的关系中的元组。
- 右外连接只保留出现在右外连接运算之后(右边)的关系中的元组。
- 全外连接(full outer join) 保留出现在两个关系中的元组。
- 自然连接(natural join) 运算作用于两个关系,并产生一个关系作为结果。具体来说,
- 视图定义
- 物化视图保证如果用于定义视图的实际关系发生改变,则视图也跟着修改以保持最新。
- 物化视图维护(materialized view maintenance,简称视图维护) 指保持物化视图一直在最新状态的过程。
- 视图更新:一般来说想看到一个视图就对数据库本身进行修改很麻烦,所以要满足很多的条件。
- from子句中只有一个数据库关系。
- select子句中只包含关系的属性名,并不包含任何表达式、聚集或distinct声明。
- 没有出现在select子句中的任何属性都可以取null值;也就是说,这些属性没有非空约束,也不构成主码的一部分。
- 查询中不含有group by或having子句。
- 事务(transaction) 由查询和(或)更新语句的序列组成。
- commit work提交当前事务;也就是说,它使事务执行的更新在数据库中成为永久性的。
- rollback work回滚当前事务;也就是说,它会撤销事务中SQL语句执行的所有更新。
- 一个事物或者在完成所有步骤后提交其操作,或者在不能成功完成其所有动作的情况下回滚其所有动作,通过这种方式数据库提供了对事物具有原子性的抽象。
- 约束
- 完整性约束保证授权用户对数据库所做的修改不会导致数据一致性的丢失。
- 域约束就是对域中内容的范围进行的约束,比如非空或者大于0之类的。
- 唯一性约束要求在关系中没有两个元组能在所有列出的属性上取值相同。
- check子句指定一个谓词P,关系中的每个元组都必须满足谓词P,用于关系声明。
- 引用完整性:保证一个关系中给定属性集合的取值也在另一个关系中特定属性集的取值中出现。
- 级联删除可以要求数据库在被引用关系上的删除或更新操作违反了约束的条件下不拒绝这样的操作而是采取一些措施来改变引用关系中的元组以恢复完整性约束。
- 级联更新指在数据库中,当一个表中的关联字段被修改时,这个修改会自动应用到与之关联的其他表中,从而确保数据库的数据完整性和一致性。
- 断言(assertion) 就是一个谓词,它表达了我们希望数据库总能满足的一个条件。
- 数据类型
- 日期和时间类型
date '2018-04-25
time '09:30:30'
timestamp '2018-04-25 10:29:01.45'
- 缺省(default)值,定义的时候可以设置默认值。
- 大对象:后面跟括号限制文件最大大小
- 字符大对象数据类型(clob)
- 二进制大对象数据类型(blob)
- 用户自定义类型
- 独特模型(distinct type) 用create type来定义,其实就跟c++里面的typedef差不多
- 结构化数据类型(本书不细究)
- 域:数据范围
- 类型转换:显式转换用
cast(e as t)
来表示将表达式e转换为类型t。
- 日期和时间类型
- 目录构成体系结构的最顶层。
- 模式包含在目录中。
- 索引在关系属性上是一种数据结构,允许数据库系统高效地找到在关系中具有该属性指定值的那些元组,而不扫描关系的所有元组。
- 权限
- 权限类型
- 选择(select)
- 插入(insert)
- 更新(update)
- 授予权限:
grant <权限名> on <关系名或视图名> to <用户/角色列表>;
- 收回权限:
revoke <权限名> on <关系名或视图名> to <用户/角色列表>;
- 授予权限的权限:
grant <权限名> on <关系名或视图名> to <用户/角色列表> with grant option;
- grant option子句
- 权限类型
- 角色用于标识数据库用户。
- 视图授权:只能看部分列
- 执行授权:允许查询和更新
- 调用者权限:使用当前用户的权限执行代码,适用于分布式数据管理,允许不同的用户在不同的环境中执行相同的代码,而不需要修改代码的权限设置。
- 行级授权:在特定元组或行的级别上的授权
- **虚拟私有数据库(VPD)**支持行级授权
第5章 高级SQL
- JDBC(Java数据库连接) 标准定义了用于将Java程序连接到数据库服务器的应用程序接口(API) 。
- 预备语句用“?”来代替某些值,以此指明以后会提供实际的值。
- SQL注入是一种被恶意黑客用来窃取数据或损坏数据库的技术。
- 元数据就是定义数据结构的数据。
- 可更新结果集可以根据在数据库关系上执行选择或投影的查询来创建出可更新的结果集。
- **开放数据库连接(ODBC)**标准定义了一个API,应用程序可以用它来打开与一个数据库的连接、发送查询和更新并获取返回结果。
- 嵌入式SQL:SQL标准定义了将SQL嵌入各种程序设计语言中的方法。嵌入了SQL查询的语言被称为宿主(host)语言,并且在宿主语言中允许使用的SQL结构构成了嵌入式SQL。
- 嵌入式数据库当应用程序仅为内部使用而维护数据库,并且除非通过应用程序本身,否则无法访问到数据库的情况下可以使用。
- 存储过程和函数是在数据库中定义的一组完成特定功能的SQL语句集合,经过编译后存储在数据库中。
- 表函数:支持以返回表作为结果的函数。
- 参数化视图:以表为值的函数通常可以看作这个,通过允许参数来泛化常规的视图概念。
- 持久存储模块(PSM) 是SQL标准中处理赋予通用程序设计语言几乎所有能力的模块。
- SQL的过程化语言还支持对异常情况(exception condition) 的信号发送。
- 句柄(handler) 声明对异常的处理。
- 外部语言例程可以作为外部代码主体被引用,用于数据库操作和数据处理。
- 沙盒允许Java或C#代码来访问它自己的内存区域,但它组织代码读取或更新查询执行进程的内存,或者访问文件系统的文件。
- 触发器是作为对数据库修改的连带效果而由系统自动执行的一条语句。
- 传递闭包指在关系数据库中描述相同元素之间的可传递关系的运算。
- 层次结构指数据库中的数据按照树状结构组织,每个节点代表一个数据项,节点之间的关系通过父节点和子节点的关系来定义。
- 创建临时表创建的表仅在执行查询的事务内部才可用,并随事务的完成而被删除。
- 基查询指在数据库中通过特定的语句和语法,向数据库提出问题并获取相应的数据的过程。
- 递归查询指在一个查询中,通过使用递归操作或递归SQL语句,对查询结果进行多次处理,以获取满足特定条件的数据。
- 不动点指不会再有进一步变化。
- 单调的:如果更多的元组被添加到视图关系中,则递归查询必须返回至少与以前相同的元组集。
- 分窗指在数据库管理系统中,将数据表分割成两部分,一部分用于显示数据,另一部分用于显示图形或图片,从而提供更人性化的数据展示和输入方式。
- 排名函数主要用于对查询结果进行排序,并为每行数据分配一个排名。
- 交叉表/数据透视表是一种用于数据汇总和分析的矩阵格式表格,主要用于显示两个或多个变量之间的频率分布关系。
- 旋转就是将结果集中的某一列数据以行的形式来显示原有的数据信息,即交叉表。
- SQL group by cube,group by rollup是用于支持group by结构泛化形式的操作。
第6章 形式化关系查询语言
- 关系代数由一组运算组成,这些运算接受一个或两个关系作为输入,并生成一个新的关系作为它们的结果。
- 关系代数表达式是关系代数在数据库查询中的应用,用于描述从一个或多个关系(即表)中提取和组合数据的过程。
- 关系代数运算
- 选择 σ σ σ 运算选出满足给定谓词的元组,如 σ d e p t n a m e = " P h y s i c s " ( i n s t r u c t o r ) σ_{dept_name="Physics"}(instructor) σdeptname="Physics"(instructor)表示在instructor表中选择dept_name为Physics的元组。
- 投影 Π \Pi Π 运算是一种一元运算,返回它的参数关系,但滤掉了特定的属性,如 Π I D , n a m e , s a l a r y ( i n s t r u c t o r ) \Pi_{ID,name,salary}(instructor) ΠID,name,salary(instructor)就会列出instructor表中的所有元组但不显示dept_name列。
- 笛卡尔积 × × × 允许我们结合来自任意两个关系的信息。
- 连接 ⋈ ⋈ ⋈ 运算使我们能够将选择与笛卡尔积合并到单个运算中, σ i n s t r u c t o r , I D = t e a c h e s . I D ( i n s t r u c t o r × t e a c h e s ) σ_{instructor,ID=teaches.ID}(instructor×teaches) σinstructor,ID=teaches.ID(instructor×teaches)可以等价地写为 i n s t r u c t o r ⋈ i n s t r u c t o r , I D = t e a c h e s . I D t e a c h e s instructor ⋈_{instructor,ID=teaches.ID} teaches instructor⋈instructor,ID=teaches.IDteaches。
- 并 ∪ ∪ ∪ 是一种二元运算,表示出现在这两个关系之一或同时出现在这两个关系中的所有元组。
- 集差 − - − 使我们能够找到在一个关系中但不在另一个关系中的元组。
- 交 ∩ ∩ ∩ 允许我们找到同时出现在两个输入关系中的元组。
- 赋值 ← \leftarrow ← 的工作方式与程序设计语言中的赋值是类似的。
- 更名 ρ ρ ρ 用于给关系代数表达式的结果命名。
- 元组关系演算是非过程化的(nonprocedural) 查询语言。它描述了所需信息,而不给出用于获得该信息的具体过程。
- 域关系演算是关系演算的第二种形式,它使用从属性域中取值的域变量,而不是对于整个元组的值。
- 表达式的安全性要求表达式不产生无限关系或者是超出域的范围。
- 语言的表达能力:仅限于安全表达式的元组关系演算在表达能力上等价于基本关系代数。
第7章 使用E-R模型的数据库设计
- 设计过程
- 概念设计阶段所产生的模式提供了对企业的详细概览。
- 逻辑设计阶段中,设计者将高层概念模式映射到将被使用的数据库系统具体实现的数据模型。
- 物理设计阶段中,数据库的物理特性被具体说明,这些特性包括文件组织形式和索引结构的选择。
- 实体-联系(E-R)数据模型被开发来方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式(enterprise schema)来做到的。
- 实体和实体集
- 简单和复合属性:依据能不能划分为子部分区分
- 单值和多值属性:如果对一个特定实体而言,一个属性可能对应于一组值那就是多值的
- 派生属性:这类属性的值可以从其他相关属性或实体的值派生出来
- 码是一种用来区分一个给定关系中的不同元组的方式。
- 超码是一个或多个属性的集合。
- 候选码是最小的超码。
- 主码代表被数据库设计者选中来作为在一个关系中区分不同元组的主要方式的候选码。
- 联系是多个实体间的相互关联,联系集是相同类型联系的集合。
- 二元联系集涉及两个实体集的联系集,在数据库系统中,大多数联系集都是二元的。
- 联系集的度指参与联系集的实体集的数目。
- 描述性属性是指在联系集中,用于描述联系本身或参与联系的实体之间关系的属性。
- 超码、候选码和主码
- 角色用于标识数据库用户。
- 递归联系集是指在递归联系中,由递归联系形成的集合。
- E-R图提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
- 映射基数
- 一对一关系: A A A中的一个实体至多与 B B B中的一个实体相关联,并且 B B B中的一个实体也至多与 A A A中的一个实体相关联。
- 一对多关系: A A A中的一个实体可以与 B B B中的任意数量(零个或多个)的实体相关联,而 B B B中的一个实体至多与 A A A中的一个实体相关联。
- 多对一关系:: A A A中的一个实体至多与 B B B中的一个实体相关联,而 B B B中的一个实体可以与 A A A中任意数量(零个或多个)的实体相关联。
- 多对多关系: A A A中的一个实体可以与 B B B中的任意数量(零个或多个)的实体相关联,而 B B B中的一个实体可以与 A A A中任意数量(零个或多个)的实体相关联。
- 全部参与和部分参与看实体集中是否每个实体都必须参与到联系集中的至少一个联系中。
- 弱实体集和强实体集:弱实体集(weak entity set) 的存在依赖于另一个实体集,称为其标识性实体集(identifying entity set) ;我们使用标识性实体集的主码以及成为分辨符属性(discriminator attribute) 的额外属性来唯一地标识弱实体,而不是将主码与弱实体相关联。非弱实体集被称为强实体集(strong entity set) 。
- 特化和概化
- 特化将一个属性分割为几个部分,比如原本的student可以分成本科生和研究生这样。
- 概化是在一个高层实体集与一个或多个低层实体集之间存在的包含联系。
- 聚集是一种抽象,通过这种抽象,联系被视为高层实体。
- 设计选择是指在构建数据库时需要考虑的一系列关键因素和决策。
- 统一建模语言(UML) 是由对象管理组织主持开发的一个标准,用于建立软件系统不同部分的规范定义。
第8章 关系数据库设计
- 分解用于将表现出信息重复的模式分解成几个较小的模式。
- 有损分解指分解后虽然我们拥有更多的元组,但是实际上从一下意义来讲我们却拥有更少的信息。
- 无损分解指那些没有信息丢失的分解。
- 规范化的目标是生成一组关系模式,允许我们存储信息并避免不必要的冗余,同时还允许我们轻松地检索信息。
- 函数依赖是指在一个关系表中,一个或多个属性的值(决定因素)决定了其他属性的值(被决定因素)。
- 成立:把注意力放到模式 r ( R ) r(R) r(R)上满足函数依赖集 F F F的关系,我们说 F F F在 r ( R ) r(R) r(R)上成立。
- 平凡指函数依赖被所有关系满足。
- R满足F:关系R的所有属性集合U上的元组满足函数依赖集F中的所有函数依赖规则。
- 函数依赖集的闭包记作 F + F^{+} F+,表示能够从给定的集合 F F F推导出的所有函数依赖的集合。
- 保持依赖(dependency preserving) 要求允许在没有连接的情况下强制实施这种函数依赖。
- 传递依赖是函数依赖的一种特殊形式,描述了属性之间的间接依赖关系。
- 逻辑蕴涵:给定一个关系模式 r ( R ) r(R) r(R),如果关系 r ( R ) r(R) r(R)的每一个满足 F F F的实例也满足 f f f,则 R R R上的函数依赖 f f f被 R R R上的函数依赖集 F F F所逻辑蕴涵。
- 公理(axiom) 或推理规则提供了一种用于对函数依赖进行推理的更为简单的技术。
- 阿姆斯特朗公理:通过反复应用以下这三条规则,可以找出对于给定 F F F的 F + F^{+} F+中的全部依赖。
- 自反律:若 α α α为一个属性集且 β ⊆ α β⊆α β⊆α,则 α → β α\rightarrow β α→β成立。
- 增补律:若 α → β α\rightarrow β α→β成立且 γ γ γ为一个属性集,则 γ α → γ β γα\rightarrow γβ γα→γβ成立。
- 传递律:若 α → β α\rightarrow β α→β成立且 β → γ β\rightarrow γ β→γ,则 α → γ α\rightarrow γ α→γ成立。
- 阿姆斯特朗公理是有效的,因为它们不会产生任何不正确的函数依赖。这些规则是完备的,因为对于一个给定的函数依赖集 F F F,它们能允许我们产生全部 F + F^{+} F+。
- 函数决定的:如果 α → B α\rightarrow B α→B,我们就称属性 B B B被 α α α函数决定。
- 无关属性的形式化定义如下:考虑一个函数依赖集 F F F以及 F F F中的函数依赖 α → β α\rightarrow β α→β。
- 从左侧移除:如果 A ∈ α A∈α A∈α并且 F F F逻辑蕴含 ( F − { α → β } ) ∪ { ( α − A ) → β } (F-\{α\rightarrow β\})∪\{(α-A)\rightarrow β\} (F−{α→β})∪{(α−A)→β},则属性 A A A在 α α α中是无关的。
- 从右侧移除:如果 A ∈ β A∈β A∈β并且函数依赖集 ( F − { α → β } ) ∪ { α → ( β − A ) } (F-\{α\rightarrow β\})∪\{α\rightarrow (β-A)\} (F−{α→β})∪{α→(β−A)}逻辑蕴涵 F F F,则属性 A A A在 β β β中是无关的。
- F F F的正则覆盖 F c F_c Fc是这样的一个依赖集: F F F逻辑蕴含 F c F_c Fc中的所有依赖,并且 F c F_c Fc逻辑蕴含 F F F中的所有依赖。此外, F c F_c Fc必须具备如下性质:
- F c F_c Fc中任何函数依赖都不包含无关属性。
- F c F_c Fc中每个函数依赖的左侧都是唯一地。也就是说,在 F c F_c Fc中不存在两个依赖 α 1 → β 1 α_1\rightarrow β_1 α1→β1和 α 2 → β 2 α_2\rightarrow β_2 α2→β2,满足 α 1 = α 2 α_1=α_2 α1=α2。
- F F F对 R i R_i Ri的限定意味着在关系 R i R_i Ri(即某个表)上应用约束 F F F。
- 保持依赖的分解:具有性质 F ′ + = F + F^{'+}=F^{+} F′+=F+的分解。
- Boyce-Codd范式(BCNF) :关系模式 R ∈ 1 N F R∈1NF R∈1NF。若函数依赖集合F中的所有函数依赖 X → Y X\rightarrow Y X→Y( Y Y Y不包含于 X X X)的左部都包含R的任一候选键,则 R ∈ B C N F R∈BCNF R∈BCNF。换言之,BCNF中的所有依赖的左部都必须包含候选键。
- BCNF分解算法所花费的时间与初始模式的规模呈指数分布,因为用于检查分解中的一个关系是否满足BCNF的算法可能花费指数级的时间。
- 第三范式(3NF) 指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。
- 3NF分解算法指将一个复杂的关系模式分解成多个符合3NF的较简单的关系模式。
- 3NF合成算法用于将关系模式分解成满足3NF的模式集,确保无损分解并保持函数依赖。
- 多值依赖:多值依赖 α → → β α→→β α→→β是说 α α α和 β β β之间的联系独立于 α α α和 R − β R-β R−β之间的联系。
- 函数依赖有时被称为相等产生依赖,而多值依赖被称为元组产生依赖。
- 嵌入的多值依赖指函数依赖 X → → Y X→→Y X→→Y在模式R上不成立,但是在 R R R的子模式 W W W上成立,则称 X → → Y X→→Y X→→Y为 R R R上的嵌入型多值依赖。
- 第四范式(4NF) 要求关系模式中的每个非平凡多值依赖必须满足以下条件:如果关系模式R的每个非平凡多值依赖 X → → Y ( Y ⊆ X ) X→→Y(Y ⊆ X) X→→Y(Y⊆X),其中X必须包含候选码。如果关系模式满足4NF,则它也必然满足BCNF。
- D D D对 R i R_i Ri的限定是集合 D i D_i Di,它包含:
- D + D^{+} D+中只含 R i R_i Ri中属性的所有函数依赖。
- 所有形如 α → → β ∩ R i α\rightarrow \rightarrow β∩R_i α→→β∩Ri的多值依赖,其中 α ⊆ R i α⊆ R_i α⊆Ri且 α → → β α\rightarrow \rightarrow β α→→β属于 D + D^+ D+。
- 更多的范式(仅提一下名字) :投影-连接范式、连接依赖、第五范式、域-码范式、第二范式。
- 原子域要求域的元素被认为是不可再分的单元。
- 第一范式(1NF) 要求关系模式的所有属性的域都是原子的。
- 唯一角色假设是数据库设计的一个期望的特性,意味着每个属性名在数据库中只有唯一的含义。
- 去规范化指把一个规范化的模式变成非规范化的过程。
- 交叉表指一个属性的每一个值作为一列的表示方法。
- 时态数据是具有关联的时间区间的数据,时间区间内的数据是有效(valid) 的。
- 快照用来表示特定时刻的数据值。
- 时态函数依赖 α → τ β α\stackrel{\tau}{\rightarrow}β α→τβ在关系模式 r ( R ) r(R) r(R)上成立的条件是:对于 r ( R ) r(R) r(R)的所有合法实例, r r r的所有快照都满足函数依赖 α → β α\rightarrow β α→β。
- 时态主码 r . A r.A r.A成立要求,只要 r r r中的两个元组 t 1 t_1 t1和 t 2 t_2 t2使得 t 1 . A = t 2 . A t_1.A=t_2.A t1.A=t2.A,它们的有效时间区间 t 1 t_1 t1和 t 2 t_2 t2必然不会重叠。
- 形式化地,从 r . A r.A r.A到 s . B s.B s.B的时态外码约束确保了一下内容:对于 r r r中具有有效时间 ( l , u ) (l,u) (l,u)的每个元祖 t t t,在 s s s中存在一个或多个元组构成的一个子集 s t s_t st,使得每个元祖 s i ∈ s t s_i∈s_t si∈st都有 s i . B = t . A s_i.B=t.A si.B=t.A,并且保证所有 s i s_i si的时间区间的并集包含 ( l , u ) (l,u) (l,u)。
- 时态连接:在连接结果中一个元组的有效时间被定义为派生出该元组的输入元组的有效时间的交集。
第13章 事务管理
- 事务(transaction) 是访问并可能更新各种数据项的一个程序执行单元。
- ACID特性这一缩写来源于四种特性的英文首字母。
- 原子性。事务的所有操作在数据库中要么全部正确反映出来,要么完全不反映。
- 一致性。以隔离方式执行事务(即,没有其他事物的并发执行)以保持数据库的一致性。
- 隔离性。尽管多个事务可能并发执行,但每个事务都感觉不到系统中有其他事务在并发地执行。
- 持久性。在一个事务成功完成之后,它对数据库的改变必须是永久的,即使出现系统故障也是如此。
- 不一致状态指系统的状态由于故障不再反映数据库本应描述的现实世界的真实状态。