编辑推荐
《数据库系统基础教程(原书第3版)》特点:
全面改版的组织结构。
UML数据库模型的新内容。
包括3NF综合算法在内的操作依赖新算法的引入。
更多的3NF,包括3NF综合算法。
扩展的SQL触发讨论。
新增的索引选择和物化视图。
新增的三层体系结构。
新增的PHP。
新增的OLAP和SQL立方体算子介绍。
扩展的XML内容,包括XML模式、XPath、XQuery和XSLT。
内容简介
《数据库系统基础教程(原书第3版)》由斯坦福大学知名计算机科学家Jeffrey Ullman和Jennifer Widom合作编写。《数据库系统基础教程(原书第3版)》首先介绍流行的关系数据库和对象关系数据库内容,涉及关系数据模型、E/R模型、UML模型以及对象模型等高级数据模型。然后介绍了有关半结构化数据组织管理中比较流行的XML等内容,既包括了数据组织模型的内容,也给出了相关编程语言,如XPath、XQuery、XSLT等。
《数据库系统基础教程(原书第3版)》举例丰富翔实,既可用作大学本科、研究生计算机及相关专业数据库课程的教科书,也可用作数据库领域技术人员的参考书。
内页插图
目录
出版者的话
译者序
前言
第1章 数据库系统世界
1.1 数据库系统的发展
1.1.1 早期的数据库管理系统
1.1.2 关系数据库系统
1.1.3 越来越小的系统
1.1.4 越来越大的系统
1.1.5 信息集成
1.2 数据库管理系统概述
1.2.1 数据定义语言命令
1.2.2 查询处理概述
1.2.3 存储器和缓冲区管理器
1.2.4 事务处理
1.2.5 查询处理器
1.3 本书概述
1.4 参考文献
第一部分 关系数据库模型
第2章 关系数据模型
2.1 数据模型概述
2.1.1 什么是数据模型
2.1.2 一些重要的数据模型
2.1.3 关系模型简介
2.1.4 半结构化模型简介
2.1.5 其他数据模型
2.1.6 几种建模方法的比较
2.2 关系模型基础
2.2.1 属性
2.2.2 模式
2.2.3 元组
2.2.4 域
2.2.5 关系的等价描述
2.2.6 关系实例
2.2.7 关系上的键
2.2.8 数据库模式示例
2.2.9 习题
2.3 在SQL中定义关系模式
2.3.1 SQL中的关系
2.3.2 数据类型
2.3.3 简单的表定义
2.3.4 修改关系模式
2.3.5 默认值
2.3.6 键的声明
2.3.7 习题
2.4 代数查询语言
2.4.1 为什么需要一种专门的查询语言
2.4.2 什么是代数
2.4.3 关系代数概述
2.4.4 关系上的集合操作
2.4.5 投影
2.4.6 选择
2.4.7 笛卡儿积
2.4.8 自然连接
2.4.9 θ连接
2.4.1 0组合操作构成查询
2.4.1 1命名和重命名
2.4.1 2操作之间的联系
2.4.1 3代数表达式的线性符号
2.4.1 4习题
2.5 关系上的约束
2.5.1 作为约束语言的关系代数
2.5.2 引用完整性约束
2.5.3 键约束
2.5.4 其他约束举例
2.5.5 习题
2.6 小结
2.7 参考文献
第3章 关系数据库设计理论
3.1 函数依赖
3.1.1 函数依赖的定义
3.1.2 关系的键
3.1.3 超键
3.1.4 习题
3.2 函数依赖的规则
3.2.1 函数依赖的推导
3.2.2 分解/结合规则
3.2.3 平凡函数依赖
3.2.4 计算属性的闭包
3.2.5 闭包算法为何有效
3.2.6 传递规则
3.2.7 函数依赖的闭包集合
3.2.8 投影函数依赖
3.2.9 习题
3.3 关系数据库模式设计
3.3.1 异常
3.3.2 分解关系
3.3.3 Boyce—Codd范式
3.3.4 分解为BCNF
3.3.5 习题
3.4 分解的优劣
3.4.1 从分解中恢复信息
3.4.2 无损连接的chase检验
3.4.3 为什chase检验有效
3.4.4 依赖的保持
3.4.5 习题
3.5 第三范式
3.5.1 第三范式的定义
3.5.2 3NF模式综合算法
3.5.3 为什么3NF综合算法有效
3.5.4 习题
3.6 多值依赖
3.6.1 属性独立及随之产生的冗余
3.6.2 多值依赖的定义
3.6.3 多值依赖的推导
3.6.4 第四范式
3.6.5 分解为第四范式
3.6.6 范式间的联系
3.6.7 习题
3.7 MVD的发现算法
3.7.1 闭包和chase
3.7.2 将chase扩展到MVD
3.7.3 chase为何对MVD有效
3.7.4 投影MVD
3.7.5 习题
3.8 小结
3.9 参考文献
第4章 高级数据库模型
4.1 E/R模型
4.1.1 实体集
4.1.2 属性
4.1.3 联系
4.1.4 实体一联系图
4.1.5 E/R图实例
4.1.6 二元E/R联系的多样性
4.1.7 多路联系
4.1.8 联系中的角色
4.1.9 联系的属性
4.1.10 多路联系到二元联系的转换
4.1.11 E/R模型中的子类
4.1.12 习题
4.2 设计原则
4.2.1 忠实性
4.2.2 避免冗余
4.2.3 简单性
4.2.4 选择正确的联系
4.2.5 选择正确的元素种类
4.2.6 习题_
4.3 E/R模型中的约束
4.3.1 E/R模型中的键
4.3.2 E/R模型中键的表示
4.3.3 引用完整性
4.3.4 度约束
4.3.5 习题
4.4 弱实体集
4.4.1 弱实体集的来源
4.4.2 弱实体集的要求
4.4.3 弱实体集的符号
4.4.4 习题
4.5 从E/R图到关系设计
4.5.1 实体集到关系的转化
4.5.2 E/R联系到关系的转化
4.5.3 关系组合
4.5.4 处理弱实体集
4.5.5 习题
4.6 子类结构到关系的转化
4.6.1 E/R方式转化
4.6.2 面向对象方法
4.6.3 使用空值组合关系
4.6.4 各种方法的比较
4.6.5 习题
4.7 统一建模语言
4.7.1 UML类
4.7.2 UML类的键
4.7.3 关联
4.7.4 自关联
4.7.5 关联类
4.7.6 UML中的子类
4.7.7 聚集与组合
4.7.8 习题
4.8 UML图到关系的转化
4.8.1 UML到关系的基础知识
4.8.2 从UML子类到关系
4.8.3 从聚集与组合到关系
4.8.4 UML与弱实体集的类比
4.8.5 习题
4.9 对象定义语言
4.9.1 类声明
4.9.2 ODL中的属性
4.9.3 ODL中的联系
4.9.4 反向联系
4.9.5 联系的多重性
4.9.6 ODL中的类型
4.9.7 ODL冲的子类
4.9.8 在ODL冲声明键
4.9.9 习题
4.10 从ODL设计到关系设计
4.10.1 从ODL类到关系
4.10.2 类中的复杂属性
4.10.3 值集合类型属性的表示
4.10.4 其他类型构建器的表示
4.10.5 ODL中联系的表示
4.10.6 习题
4.11小结
4.12参考文献
第二部分 关系数据库程序设计
第5章 代数和逻辑查询语言
5.1 包上的关系操作
5.1.1 为什么采用包
5.1.2 包的并、交、差
5.1.3 包上的投影操作
5.1.4 包上的选择操作
5.1.5 包的笛卡儿积
5.1.6 包的连接
5.1.7 习题
5.2 关系代数的扩展操作符
5.2.1 消除重复
5.2.2 聚集操作符
5.2.3 分组
5.2.4 分组操作符
5.2.5 扩展的投影操作符
5.2.6 排序操作符
5.2.7 外连接
5.2.8 习题
5.3 关系逻辑
5.3.1 谓词和原子
5.3.2 算术原子
5.3.3 Datalog规则和查询
5.3.4 Datalog规则的意义
5.3.5 扩展谓词和内涵谓词
5.3.6 Datalog规则应用于包
5.3.7 习题
5.4 关系代数与Datalog
5.4.1 布尔操作
5.4.2 投影
5.4.3 选择
5.4.4 积
5.4.5 连接
5.4.6 用Datalog模拟多重操作
5.4.7 Datalog与关系代数的比较
5.4.8 习题
5.5 小结
5.6 参考文献
第6章 数据库语言SQL
6.1 SQL中的简单查询
6.1.1 SQL中的投影
6.1.2 SQL冲的选择
6.1.3 字符串比较
6.1.4 SQL中的模式匹配
6.1.5 日期和时间
6.1.6 空值和涉及空值的比较
6.1.7 布尔值UNKNOWN
6.1.8 输出排序
6.1.9 习题
6.2 多关系查询
6.2.1 SQL中的积和连接
6.2.2 消除属性歧义
6.2.3 元组变量
6.2.4 多关系查询的解释
6.2.5 查询的并、交、差
6.2.6 习题
6.3 子查询
6.3.1 产生标量值的子查询
6.3.2 关系的条件表达式
6.3.3 元组的条件表达式
6.3.4 关联子查询
6.3.5 FROM子句中的子查询
6.3.6 SQL的连接表达式
6.3.7 自然连接
6.3.8 外连接
6.3.9 习题
6.4 全关系操作
64.1 消除重复
6.4.2 并、交、差中的重复
6.4.3 SQL中的分组和聚集
6.4.4 聚集操作符
6.4.5 分组
6.4.6 分组、聚集和空值
6.4.7 HAVING子句
6.4.8 习题
6.5 数据库更新
6.5.1 插入
6.5.2 删除
6.5.3 修改
6.5.4 习题
6.6 SQL中的事务
6.6.1 可串行化
6.6.2 原子性
6.6.3 事务
6.6.4 只读事务
6.6.5 读脏数据
6.6.6 其他隔离层次
6.6.7 习题
6.7 小结
6.8 参考文献
第7章 约束与触发器
7.1 键和外键
7.1.1 外键约束声明
7.1.2 维护引用完整性
7.1.3 延迟约束检查
7.1.4 习题
7.2 属性和元组上的约束
7.2.1 非空值约束
7.2.2 基于属性的CHECK约束
7.2.3 基于元组的CHECK约束
7.2.4 基于元组和基于屙陛的约束的比较
7.2.5 习题
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 SQL中的触发器
7.5.2 触发器设计的选项
7.5.3 习题
7.6 小结
7.7 参考文献
第8章 视图与索引
8.1 虚拟视图
8.1.1 视图定义
8.1.2 视图查询
8.1.3 属性重命名
8.1.4 习题
8.2 视图更新
第三部分 半结构化数据的建模和程序设计
前言/序言
数据库已是当今信息社会须臾不可脱离的重要工具,数据库的教学也就成为计算机科学与技术专业的一门必修课程。
JeffreyD.1 511man教授是斯坦福大学计算机系的资深教授,自1980年编写了其第一本数据库教材《数据库系统原理》以来,已出版过多本数据库系统方面的教材。该书是他在斯坦福大学计算机系对大学生教授的第一门数据库课程(CS145)中使用的教材,Ullman教授在第2版出版4年后,对其作了更新又出版了第3版。与第2版相比,第3版不仅重新组织了章节从而使这本书的系统性更强,而且内容作了大幅度增加,包括了有关索引的介绍和目前XML数据库技术发展的新内容。
数据库技术发展到现在,其一个很大的变化是,数据库不仅要管理结构化的数据,而且要管理更多的半结构化的数据。本书正是从这个观点出发,将内容分成两大部分:首先仍然是流行的关系数据库和对象关系数据库内容,介绍了关系数据模型、E/R模型、UML模型以及对象模型等高级数据模型。然后介绍了有关半结构化数据组织管理中比较流行的XMI。等内容,既包括了数据组织模型的内容,也给出了相关编程语言,如XPath、XQuery、XSLT等。
《数据探索与洞察:信息时代的罗盘》 在这个信息爆炸的时代,数据已成为驱动社会进步、商业决策和科学研究的核心动力。我们身处一个前所未有的信息洪流之中,其中蕴藏着海量的知识、趋势和机遇。然而,如何有效地驾驭这股洪流,从中提取有价值的洞察,并将其转化为 actionable insights,是每一个渴望在这个时代取得成功的个人和组织所面临的共同挑战。 《数据探索与洞察:信息时代的罗盘》并非一本枯燥的技术手册,而是一次引人入胜的探索之旅。它将带领读者穿越浩瀚的数据海洋,学习如何识别、收集、整理、分析和解读信息,最终掌握从原始数据中挖掘出深刻见解的能力。本书旨在为所有希望提升自身数据素养、增强信息决策能力的人们提供一套系统而实用的方法论和思维框架。 第一章:数据的世界:从认知到应用 本章将首先为读者勾勒出“数据”这一概念的全景。我们将探讨数据在现代社会中的多重角色与重要性,从日常生活的个性化推荐到国家层面的宏观经济调控,数据无处不在,并深刻影响着我们的决策过程。我们会区分不同类型的数据,例如结构化数据、半结构化数据和非结构化数据,并讨论它们各自的特点和应用场景。接着,我们将深入理解数据生命周期的各个阶段:数据的产生、采集、存储、处理、分析、可视化以及最终的应用。本书的重点将落在理解和分析数据的过程,我们会探讨数据的质量问题,如准确性、完整性、一致性和时效性,以及如何识别和处理这些问题,因为“垃圾进,垃圾出”是数据分析领域不可忽视的真理。最后,本章会强调数据驱动决策的重要性,并展望数据在未来社会发展中的广阔前景,为读者建立起一个坚实的数据认知基础。 第二章:信息地图绘制:数据收集与准备的艺术 在探索数据之前,我们首先需要找到并准备好可用的“原材料”。本章将聚焦于数据收集和预处理这一至关重要的环节。我们将介绍多种有效的数据收集策略,包括但不限于:通过公开数据集进行数据爬取、利用API接口获取外部数据、设计调查问卷进行一手数据收集,以及从现有数据库和系统中导出数据。本书将指导读者如何根据研究目的选择最合适的数据源,并识别潜在的偏见和限制。 数据准备是数据分析中耗时但不可或缺的一步。本章将详细讲解数据清洗(Data Cleaning)的技巧,包括如何处理缺失值(例如,删除、填充平均值、中位数或使用更高级的模型进行预测填充)、异常值(识别并决定是移除还是调整)、重复值以及数据格式不一致的问题。我们将学习如何进行数据转换(Data Transformation),例如数值数据的标准化(Standardization)和归一化(Normalization),以消除不同量纲的影响;类别数据的编码(Encoding),如独热编码(One-Hot Encoding)和标签编码(Label Encoding);以及如何合并和连接来自不同来源的数据集。此外,我们还会探讨特征工程(Feature Engineering)的基础概念,包括如何基于现有数据创造新的、更有信息量的特征,这往往是提升分析模型性能的关键。本章的目标是让读者能够自信地将原始、杂乱的数据转化为整洁、有序、可供进一步分析的“干净”数据。 第三章:洞察的显微镜:探索性数据分析(EDA) 数据准备完成后,便进入了激动人心的探索阶段。本章将全面介绍探索性数据分析(Exploratory Data Analysis, EDA)的核心方法和技术。EDA的目的是在正式建模之前,通过对数据进行初步的观察和统计分析,来理解数据的分布、识别数据中的模式、发现变量之间的关系,并发现潜在的异常和问题。 我们将从描述性统计(Descriptive Statistics)入手,学习如何计算和解释均值、中位数、众数、方差、标准差、四分位数等统计量,以量化数据的中心趋势和离散程度。接着,我们将重点介绍数据可视化(Data Visualization)的力量。通过图表,我们可以直观地理解复杂的数据。本书将指导读者如何选择合适的图表类型来呈现不同类型的数据和关系,例如:直方图(Histograms)和密度图(Density Plots)用于展示单变量的分布;散点图(Scatter Plots)用于揭示两个变量之间的关系;箱线图(Box Plots)用于比较不同组别数据的分布差异;折线图(Line Plots)用于展示随时间变化趋势;条形图(Bar Charts)用于比较不同类别的数据量。我们将强调清晰、准确、具有信息量的可视化原则。 此外,本章还会引导读者进行更深入的探索,例如:相关性分析(Correlation Analysis),理解变量之间线性关系的强度和方向;分组分析,比较不同子集数据的特征;以及初步的模式识别,寻找数据中的聚类或趋势。EDA的过程是一个迭代的过程,通过不断地提问、观察、假设和验证,逐步深入地理解数据。本章将赋予读者运用EDA工具来发现数据中隐藏的“故事”的能力。 第四章:解锁规律:基础统计建模与推断 在初步探索数据之后,我们希望能够构建模型来描述数据中的规律,并利用样本数据对总体进行推断。本章将介绍一些基础的统计建模技术和推断方法。 我们将从回归分析(Regression Analysis)开始,学习如何构建线性回归模型来量化一个或多个自变量对因变量的影响。本书将解释模型系数的含义、如何评估模型的拟合优度(如 R-squared),以及如何进行模型诊断以检查假设是否满足。我们将介绍简单线性回归和多元线性回归,并讲解如何理解模型输出。 除了回归,我们还会探讨分类模型的基础。虽然本书不会深入复杂的机器学习算法,但我们会介绍逻辑回归(Logistic Regression)作为一种强大的分类方法,以及理解分类模型评估的基本指标,如准确率(Accuracy)、精确率(Precision)、召回率(Recall)和 F1-score。 推断统计(Inferential Statistics)是连接样本与总体的桥梁。本章将介绍假设检验(Hypothesis Testing)的基本原理,包括零假设(Null Hypothesis)和备择假设(Alternative Hypothesis)的设定,p值(p-value)的含义,以及如何根据p值做出统计决策。我们将介绍常见的假设检验,如 t检验(t-tests)用于比较均值,卡方检验(Chi-squared tests)用于分析类别变量之间的关联。这些基础的统计建模和推断技术,将使读者能够更加科学地解释数据,并对研究结果做出可靠的结论。 第五章:数据故事的讲述:可视化与沟通 即使拥有最深刻的数据洞察,如果无法有效地传达给他人,其价值也将大打折扣。本章将聚焦于如何将数据分析的结果转化为清晰、引人入胜的数据故事(Data Storytelling),并进行有效的沟通。 我们将在第二章和第三章的基础上,进一步深化数据可视化的技巧。我们将探讨如何设计更具叙事性的可视化图表,如何运用色彩、布局和标注来引导观众的注意力,以及如何避免常见的可视化陷阱(如误导性的图表)。本书将介绍一些高级的可视化技巧,例如制作交互式图表(如果技术条件允许,会提及相关工具和理念),让观众能够自由探索数据。 数据故事的讲述不仅仅是图表的堆砌,更是逻辑的构建。我们将学习如何围绕一个核心的见解来组织分析结果,如何清晰地阐述问题、方法、发现和结论。我们会探讨如何根据不同的受众(如技术专家、业务决策者、普通大众)调整沟通方式和语言。本章还会强调透明度和可信度,如何在呈现结果的同时,诚实地说明分析的局限性和不确定性。最终的目标是让读者能够运用数据,自信地向他人证明自己的观点,推动有效的行动和决策。 《数据探索与洞察:信息时代的罗盘》 是一次赋能之旅。它不预设读者拥有深厚的统计学或计算机科学背景,而是从基础出发,循序渐进地引导读者掌握数据分析的思维方式和实用技能。无论您是学生、研究人员、市场分析师、产品经理,还是任何希望在这个数据驱动的世界中提升竞争力的个体,本书都将是您不可或缺的伙伴,帮助您在信息的海洋中找到方向,发现价值,并最终做出更明智、更具影响力的决策。
这本书真的是一本非常扎实的入门教材,我当初选择它的时候,就是看中了它“基础教程”的名头,而且还有“原书第3版”这样的字样,总觉得会比较权威和成熟。拿到书之后,翻了几页,果然内容安排得非常有条理。它从最基本的概念讲起,比如什么是数据库、为什么需要数据库、数据模型等等,这些都是我之前一点基础都没有的地方。作者的讲解方式非常清晰,不会像有些技术书籍那样上来就抛一堆复杂的术语,而是循序渐进,用了很多生动形象的比喻来解释抽象的概念。特别是讲到关系模型和SQL语言的部分,我印象特别深刻。它不仅仅是罗列SQL的语法,而是通过大量的实例,一点点地引导你理解查询的逻辑,如何从多个表中关联数据,如何进行聚合和分组。感觉学完这一部分,自己就能上手写一些基本的查询语句了,这对于一个初学者来说,真的太有成就感了。而且,这本书的排版也很舒服,图文并茂,关键的知识点都有加粗或者用不同的颜色标示出来,阅读起来不会感到枯燥。总的来说,如果你想系统地了解数据库的底层原理和常用的操作,这本书绝对是你的不二之选,它能为你打下坚实的基础。