数据库—模型、语言与设计

数据库—模型、语言与设计
作 者: James Johnson 李天柱
出版社: 电子工业出版社
丛编项: 国外计算机科学教材系列
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 教材 数据库设计与管理 数据库 计算机与互联网
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  JamesL.Johnson美国WesternWashington大学的计算机科学教授。自20世纪70年代中期以来,他一直是一个活跃的软件顾问,从事过各种学科的工作——数据库应用、仿真学、模式识别算法、交叉汇编程序以及用户接口等。

内容简介

本书详细讲解了数据库的基本理论与技术,包括数据模型、查询语言、存储结构、逻辑设计以及与实现和性能有关的问题,如并发、恢复、安全和优化等。全书分为四部分,共2章,每章后面均附有小结和练习。此书的最大特点是对数据模型做了较全面的论述,讲解了5种数据模型:关系模型、面向对象模型、逻辑模型、网状模型和层次模型。每种数据模型都围绕着数据模型的三要素(即实体-联系的表达、查询和约束)来讲解,并对不同数据模型的表达能力及特点进行了比较分析,此外,还讲述了不同数据模型的存储结构。关系模型是现在很流行的数据模型;面向对象模型和逻辑模型(演绎数据模型)在2世纪8年代至9年代形成,虽然没有流行起来,但其不少研究成果已被关系模型所吸收;网状模型和层次模型已成为历史,但在数据库新技术(如面向对象模型和XML查询)的研究中仍继续发挥着借鉴作用。本书可作为计算机相关专业研究生和本科生的教材,也适合于数据库领域的研究者和工作人员参考阅读,以了解各种数据模型的基本思想和特点。译者序数据库技术是最重要的计算机技术之一,在计算机应用中起着举足轻重的作用。数据库理论和技术的核心是数据库模型。自数据库技术产生以来,大约出现过6种主要的数据库模型:网状模型和层次模型、关系模型、面向对象模型和演绎模型,以及正在研究的半结构化和XML模型。数据库系统采用什么数据模型,一般就称为什么类型的数据库系统。其中网状和层次数据库是2世纪7年代之前得到广泛应用的数据库技术,早已被关系数据库代替,但在其他模型数据库的研究中(如面向对象数据库和半结构化与XML数据库),仍然发挥着积极的作用。关系模型自2世纪7年代产生以来一直是数据库技术的主流;面向对象数据库和演绎数据库在2世纪8年代至2世纪9年代的研究取得了丰硕的成果,但由于种种原因没有在应用中流行起来,而其研究成果却大量地被关系数据库所吸收,并且在数据库领域中具有重要的理论意义;半结构化和XML数据库是2世纪9年代末开始研究的数据库技术,目前还不成熟并且没有统一的名字。关系模型由于其简洁性、良好的数学基础和突出的表达与适应能力,一直在利用数据库技术的最新研究成果不断扩充,并在数据产品中得以应用;查询语言SQL3(或SQL99)标准就是在面向对象数据库技术的推动下产生的,它吸收了演绎数据库的研究成果,闭包和递归计算就是其中一例。特别是,还把关系和对象技术的结合命名为对象-关系数据库技术;进而,在目前的关系数据库产品中...

图书目录

第一部分 数据库模型与访问方法

第1章 数据库导论

1.1 数据库系统的动机

1.2 数据库系统的定义

1.3 数据库模型概述

1.3.1 关系数据库模型

1.3.2 面向对象数据库模型

1.3.3 演绎数据库模型

1.3.4 层次数据库模型

1.3.5 网状数据库模型

1.3.6 其他方面的比较

1.4 数据库系统的组成

1.4.1 物理层

1.4.2 概念层

1.4.3 外层

1.4.4 数据库管理员

1.5 一个连续的例子

小结

第2章 关系数据库

2.1 关系数据库的一个非正式的描述

2.2 关系术语

2.3 二元联系

2.3.1 一对多联系

2.3.2 多对多联系

2.3.3 分解多对多联系

2.3.4 一对一联系

2.4 高阶联系

2.5 递归联系

2.5.1 一对多递归联系

2.5.2 多对多递归联系

2.6 约束

2.6.1 关键字约束

2.6.2 函数依赖约束

2.6.3 实体和参照完整性

2.7 基本的实体-联系图

2.7.1 ER图中的实体及其属性

2.7.2 ER图中的二元联系

2.7.3 ER图中的联系属性

2.7.4 ER图中的高阶联系

2.7.5 ER图中的递归联系

2.8 模式规范

2.9 元数据和系统目录

小结

练习

第3章 关系代数

3.1 重命名和集合运算

3.2 选择、投影和连接运算

3.2.1 一元运算:选择和投影

3.2.2 笛卡儿乘积

3.2.3 自然连接

3.2.4 有关连接的其他变种

3.3 存在型查询

3.3.1 连接到锚元组的较长路径

3.3.2 存在型查询的一种解决方案

3.4 全称查询

3.4.1 除法运算

3.4.2 全称查询的一种解决方案

3.4.3 商关系的大小

3.4.4 广义除法

3.5 聚集和划分

3.5.1 聚集运算的语法变种

3.5.2 聚集查询进一步的例子

3.5.3 聚集中的算术运算

3.6 关系代数表达能力的限制

3.7 初步的查询优化

小结

练习

第4章 关系演算

4.1 谓词演算的回顾

4.2 通过谓词进行选择

4.3 存在型查询

4.4 全称查询

4.5 聚集与划分

4.5.1 等价类和商集

4.5.2 多划分

4.6 域关系演算

4.6.1 存在型查询

4.6.2 全称查询

小结

练习

第5章 基本SQL

5.1 简单检索查询的概念模型

5.1.1 从单一的表中进行查询

5.1.2 名称限定和别名

5.1.3 从多个表中进行查询

5.1.4 使用表的多个副本进行查询

5.2 子查询

5.3 存在型查询

5.4 全称查询

5.4.1 集合包含解决方案

5.4.2 双重否定结构

5.4.3 较长的全称路径束

5.4.4 混合式全称和存在查询

5.5 聚集和划分

5.5.1 orderby子句

5.5.2 groupby子句

5.5.3 orderby和groupby之间的区别

5.5.4 划分组中出现重复表示元组的情况

5.6 抑制划分

5.7 完整的select语法

5.7.1 将SQL操作可视化的一种思维模型

5.7.2 从SQL到关系代数

5.7.3 几个语法上的细节

5.8 数据编辑操作

5.8.1 SQL插入

5.8.2 SQL删除

5.8.3 SQL修改

5.9 嵌入式SQL

5.9.1 立即执行

5.9.2 结束和错误反馈

5.9.3 准备SQL语句

5.9.4 SQL游标

5.9.5 输入和输出描述符

小结

练习

第6章 高级SQL

6.1 视图

6.1.1 from子句中表的表达

6.1.2 视图作为虚表

6.1.3 通过视图更新元组

6.1.4 视图的check选项

6.2 空值

6.2.1 空值操作

6.2.2 聚集函数中的空值操作和SQL谓词

6.2.3 match谓词和引用完整性

6.2.4 具有any和all的谓词

6.3 外操作

6.3.1 外连接

6.3.2 外并

6.4 约束

6.4.1 SQL约束的目的和格式

6.4.2 域约束

6.4.3 表约束:主关键字、外关键字和check约束

6.4.4 列约束:主关键字、引用和check约束

6.4.5 全局约束

6.5 触发器

6.6 关系数据库的扩展定义

6.7 关系模型的缺陷

小结

练习

第7章 面向对象数据库

7.1 面向对象数据库的非正式介绍

7.1.1 属性值可以是其他对象

7.1.2 从对象中抽取查询解决方案

7.1.3 通过逻辑包含表示联系

7.2 面向对象术语

7.2.1 使用信号的对象通信

7.2.2 属性信号

7.2.3 类和方法

7.2.4 类层次和继承

7.2.5 常用类的内置类层次

7.2.6 方法的放置和多态

7.2.7 信号优先级:一元、二元、关键字

7.3 面向对象数据库定义

7.3.1 将应用类放置在内置层次中

7.3.2 属性方法和错误捕获

7.3.3 创建应用对象

7.4 联系

7.4.1 二元联系

7.4.2 高阶联系

7.4.3 递归联系

7.5 约束

7.5.1 一般性约束:域、键、实体完整性和引用完整性

7.5.2 函数依赖约束

7.5.3 触发器:用于更一般性的约束

7.5.4 进一步讨论约束

7.5.5 使用读属性信号可能破坏对象封装

7.6 面向对象与关系数据库的比较

小结

练习

第8章 面向对象查询

8.1 简单数据检索的概念模型

8.1.1 涉及单个类的查询

8.1.2 涉及多个类的查询

8.1.3 等价于SQL子查询的信号表达式

8.1.4 其他一些说明中间对象的计算的例子

8.2 存在型查询

8.2.1 直接检测属性对象

8.2.2 使用数据库路径的简化语法

8.3 全称查询

8.3.1 模仿SQL中的集合包含解决方案

8.3.2 使用双重否定模仿SQL解决方案

8.3.3 进一步的例子

8.4 聚集和划分

8.4.1 模仿SQL的orderby子句

8.4.2 模仿SQL的groupby子句

8.5 递归查询

8.5.1 一对多的递归联系

8.5.2 多对多的递归联系

8.6 数据编辑操作

8.6.1 插入新对象

8.6.2 删除对象

8.6.3 更新对象

8.7 从SQL到信号表达式

8.7.1 对特定SQL形式的限制转换

8.7.2 将关系表转换成类

8.7.3 转换select-project-join查询的一般形式

8.7.4 转换算法的概括形式

8.7.5 最初转换形式的另一种转换

8.7.6 将算法扩展到子查询

8.7.7 将算法扩展到划分和聚集

8.8 对象查询语言(Object Query Language,OQL)

8.8.1 OQL符号

8.8.2 OQL举例

小结

练习

第9章 演绎数据库

9.1 数据库环境下的逻辑程序设计

9.1.1 数据库与算术谓词

9.1.2 演绎规则与导出谓词

9.1.3 可能世界与演绎规则模型

9.1.4 最小模型

9.1.5 逻辑程序

9.2 演绎数据库的非正式介绍

9.2.1 查询语法

9.2.2 持久演绎规则和源于查询的逻辑程序

9.3 演绎数据库的定义

9.3.1 公理的表示

9.3.2 对联系、约束和隐含事实的演绎规则

9.3.3 无环演绎数据库和惟一最小模型

9.4 作为满足的目标的查询解

9.4.1 无否定自由变量的查询解算法

9.4.2 消除否定自由变量

9.4.3 从首选最小模型提交解的算法

9.5 联系

9.5.1 二元联系

9.5.2 高阶联系

9.5.3 递归联系

9.6 约束

9.6.1 用演绎规则设置结构性约束

9.6.2 函数依赖约束

9.6.3 聚集谓词和相关约束

小结

练习

第10章 演绎查询

10.1 存在型查询

10.1.1 包括一个应用对象的查询

10.1.2 包括多个应用对象的查询

10.2 全称查询

10.3 聚集和划分

10.4 逻辑程序与关系代数

10.4.1 关系和数据库谓词的对应

10.4.2 从关系代数到演绎规则

10.4.3 综合转换的例子

10.4.4 反向过程:从导出谓词到关系代数

10.5 超出无环演绎数据库

10.5.1 Horn(霍恩)子句系统

10.5.2 在依赖图中存在受限环的系统

10.6 递归查询

小结

练习

第11章 网状数据库

11.1 对网状数据库的非正式介绍

11.2 网状数据库定义

11.2.1 网状记录类型

11.2.2 系

11.2.3 Insertion和retention子句

11.2.4 完整性考虑:set-selection和check子句

11.3 网状数据操纵语言(DML)

11.3.1 当前指针

11.3.2 在记录中导航

11.3.3 记录的插入、修改和删除

11.3.4 记录到系的连接

11.4 联系

11.4.1 高阶联系

11.4.2 一对多的递归联系

11.4.3 多对多递归联系

11.5 约束

11.6 网状查询

11.6.1 存在型查询

11.6.2 全称查询

11.6.3 聚集查询

11.7 网状数据库和以前模型的比较

小结

练习

第12章 层次数据库

12.1 层次数据库的非正式介绍

12.1.1 实体和其实例的树结构

12.1.2 通过逻辑邻接来表示联系

12.1.3 在相关记录中导航

12.1.4 针对层次数据库的查询形式概览

12.2 联系

12.2.1 线性化层次之外的虚孩子

12.2.2 高阶联系

12.3 层次定义和数据操纵

12.3.1 层次模式

12.3.2 使用get命令定位记录

12.3.3 插入记录

12.3.4 删除和修改记录

12.4 约束

12.5 层次查询

12.5.1 存在型查询

12.5.2 全称查询

12.5.3 聚集查询

小结

练习

第13章 数据库模型之间的比较

13.1 模型的相似之处

13.2 各个模型的优点和缺点

13.2.1 层次和网状模型

13.2.2 关系模型

13.2.3 面向对象模型

13.2.4 演绎模型

第二部分 磁盘存储管理

第14章 文件结构

14.1 磁盘存储单元的物理组织

14.2 块定位模式

14.3 索引顺序文件

14.4 散列文件

14.4.1 选择散列函数

14.4.2 计算记录在桶中的分布

14.4.3 单次随机检索需要的平均磁盘探测次数

14.4.4 对α>1.0展开分析

14.4.5 散列非数字值

14.5 动态文件结构

14.5.1 动态索引顺序文件

14.5.2 通过模数加倍进行动态散列

14.5.3 通过目录加倍进行动态散列

14.5.4 其他散列模式

小结

练习

第15章 索引

15.1 稀疏层次索引

15.1.1 无重复关键字的稀疏索引

15.1.2 有重复关键字的稀疏索引

15.1.3 在删除期间维护稀疏层次索引

15.1.4 在插入期间维护稀疏层次索引

15.2 稠密索引

15.3 B树

15.3.1 查找范围

15.3.2 定义B+树的特性

15.3.3 在插入期间维护B+树的平衡

15.3.4 在删除期间维持B+树的平衡

15.3.5 B+树的性能统计

15.3.6 B树家族的其他成员

小结

练习

第16章 数据库模型的文件结构

16.1 关系模型

16.2 网状模型

16.3 层次模型

16.4 面向对象模型

16.5 演绎模型

小结

练习

第三部分 数据库设计

第17章 应用设计描述

17.1 实体联系模型

17.2 类层次和继承

17.2.1 类的特化和概化

17.2.2 重叠子类和多继承

17.3 从ER图到数据库模式的映射

17.3.1 映射为关系模式

17.3.2 映射为网状模式

17.3.3 映射为层次模式

17.3.4 映射为面向对象模式

17.3.5 映射为演绎模式

17.4 对象建模技术(OMT)

小结

练习

第18章 函数依赖分析

18.1 函数依赖约束的起源

18.1.1 泛关系和它的投影

18.1.2 函数依赖集的闭包

18.1.3 Armstrong公理

18.2 最小覆盖集

18.2.1 一个判断闭包成员的算法

18.2.2 确定关键字和超关键字

18.2.3 确定最小覆盖集

18.2.4 计算最小覆盖集的算法

18.2.5 一个综合的例子

18.2.6 水族馆数据库约束的最小覆盖集

18.3 无损连接分解

18.4 Boyce-Codd范式(BCNF)

18.4.1 使用函数依赖减少冗余

18.4.2 通过分解删除违反BCNF的约束

18.4.3 分解水族馆数据库为BCNF

18.4.4 一个BCNF分解的算法

18.5 保持函数依赖

18.5.1 一个检查保持函数依赖的算法

18.6 前三种范式

18.6.1 第一范式

18.6.2 第二范式

18.6.3 第三范式

18.6.4 一个3NF、无损连接、保持函数依赖的分解算法

18.7 FD分析的有限性和扩展

小结

练习

第19章 连接依赖分析

19.1 多值依赖

19.1.1 由MVD引起的冗余

19.2 多值依赖和函数依赖的相互作用

19.2.1 函数依赖和多值依赖集合的闭包

19.2.2 函数依赖可以强制某些多值依赖进入闭包

19.2.3 函数依赖和多值依赖能够强制新的函数依赖进入闭包

19.2.4 补充律与增补律

19.2.5 FD-MVD推理规则

19.2.6 属性决定因素的必要条件

19.3 依赖基

19.3.1 集合群的最小基

19.3.2 决定因素的依赖基

19.3.3 FD-MVD推理规则的完备性

19.3.4 存在MVD时无损连接的一个新准则

19.4 第四范式

19.4.1 由MVD引入的冗余

19.4.2 利用分解消除违反4NF的情况

19.4.3 4NF关系集合严格地被包含在BCNF关系集合中

19.4.4 在水族馆数据库语境中的MVD

19.4.5 左部为空的MVD约束

19.5 普通的连接依赖

19.5.1 由多分量连接产生的元组

19.5.2 由普通连接依赖引入的冗余

19.5.3 从已有的JD推出新的JD

19.5.4 允许JD没有冗余的条件

19.5.5 由FD和MVD强制的JD

19.5.6 一个JD允许没有冗余当且仅当它由某些FD所蕴含

19.5.7 嵌入的连接依赖

19.5.8 一个引入冗余的JD的例子

19.6 第5范式

19.6.1 5NF包含4NF

19.6.2 一个满足4NF却不满足5NF的实例

19.6.3 确定JD 在闭包中的追赶算法

19.6.4 单关键字提供的简化

19.7 连接依赖以外的话题

19.7.1 模板约束

19.7.2 域关键字范式

小结

练习

第四部分 后 记

第20章 性能

20.1 并发

20.1.1 事务

20.1.2 可串行化调度

20.1.3 通过锁实现可串行化

20.1.4 死锁和事务依赖图

20.1.5 脏读、不可重复读和幻像

20.1.6 隔离级别

20.1.7 通过时间戳实现可串行化

20.2 恢复

20.2.1 日志文件在事务回滚和故障恢复中的作用

20.2.2 利用检查点来限制大范围的日志文件搜索

20.2.3 从数据库备份中恢复

20.2.4 对重启长事务的特殊防范

20.3 安全性

20.3.1 权限描述符

20.3.2 权限收回和失控权限问题

20.4 查询优化

20.4.1 在关系代数表达式树中记录操作

20.4.2 转换计算树的启发信息

20.4.3 一个综合的例子

20.4.4 估计连接操作的代价:写输出

20.4.5 估计连接操作的代价:组织输入流

小结

参考文献

术语表