首页>参考读物>计算机科学与技术>数据库

数据库设计与关系理论
作者 : (英)C.J. Date 著
译者 : 卢涛 译 李颖 苏旭晖 审校
出版日期 : 2013-08-23
ISBN : 978-7-111-43292-0
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 286
开本 : 16
原书名 : Database Design and Relational Theory
原出版社: O'Reilly Media USA
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书与众不同的原因:关于设计实践的很多资料几乎不解释基本理论,关于设计理论的书籍主要面向理论家。在本书中,著名专家Chris Date填补了这一鸿沟,方法是以通俗易懂的方式介绍设计理论,利用40多年的工作经验揭示为什么数据库设计是最重要的。数据库设计近几十年来一直停留在生产阶段,精确的设计对于避免错误和处理问题至关重要。本书介绍如何使用重要的理论结果创建良好的数据库设计。每一章包含一组练习,揭示如何在实践中应用理论知识,提供附加信息,或者要求你证明一些简单的理论结果。本书适合从事数据库设计的专业人士阅读。

图书特色

数据库设计与关系理论
关系数据库设计领域的经典之作,关系数据库领域泰斗级人物40年经验的结晶!
与其他讲述数据库设计的书相比,本书的独特之处是什么呢?许多数据库设计实践图书对基本理论的解释不清晰,而那些侧重设计理论的图书又主要面向理论研究人员,过于学术化。在本书中,关系数据库领域的泰斗C.J. Date用超过40年的经验证明了为什么恰当的数据库设计是非常关键的,他用数据库设计者和开发者可以轻松理解的方式介绍了设计理论,弥补了其他图书的空缺。
本书每章都包括一组习题,它们要么展示在实践中如何应用理论,提供更多的信息,要么要求你证明一些简单的理论结果。如果你是一位熟悉关系模型的数据库专业人员,并对数据库设计有非凡的兴趣,那么本书正是为你准备的。

本书回答的问题包括:
■ 为什么希思定理如此重要?
■ 正交设计的原则是指什么?
■ 为什么一些JD可约而另外一些不可约?
■ 保持依赖为什么有问题?
■ 是否应该始终避免数据冗余?这可以做到吗?
数据库往往要在生产中持续运行几十年,而为避免细微的错误和处理不时出现的问题,精心的设计是至关重要的。如果数据库的设计不好,它带来的负面影响可能会非常广泛。本书会告诉你如何使用重要的理论成果创建良好的数据库设计。

C.J. Date 关系数据库领域的泰斗级人物,从20世纪70年代开始研究关系数据库理论,是关系数据库技术领域中著名的独立撰稿人、讲师、学者和顾问,在数据库行业内的地位是独一无二的。他著述颇丰,不仅发表了多篇论文,而且出版了多部数据库方面的著作,其中《数据库系统导论》一书极为畅销。

图书前言

本书源自《Database in Depth: Relational Theory for Practitioners》译注1(O'Reilly,2005年)一书中相对较短的一章。那本书后来被《SQL and Relational Theory: How to Write Accurate SQL Code》译注2(O'Reilly,2009年)所取代,因为关于数据库设计的材料有点偏离后一本书的主题,所以此部分材料不再作为一章出现,而是转变成一个(有点长)的附录。随后,我开始着手后一本书第2版的写作。注1在此过程中,我发现关于设计的主题有许多内容需要写,附录有扩展到与书的其余部分比例失调的危险。正如我已经指出的,由于关于设计的主题与后来那本书的主要重点非常不吻合,因此,我决定快刀斩乱麻地把这部分材料独立出来,为它单独写一本书:即你现在看到的这本。

  译注1:中文版书名:《深度探索关系数据库——实践者的关系理论》。
  译注2:中文版书名:《SQL与关系数据库理论》。
  注1: 已在2012年由O’Reilly出版。
  上述背景立即引出了以下三点。
  首先,本书假设你熟悉《SQL与关系数据库理论》中包含的知识(特别是,假设你知道到底什么是关系、属性和元组)。我对这种情况并不感到抱歉,因为本书是针对数据库专业人员的,而数据库专业人员,无论如何都应该真正地熟悉我早期那本书中的大部分内容。
  其次,尽管有前一点的说明,但这本书与我早期那本书之间不可避免地会有少量的重叠。但是,我已经尽力将这种重叠限制到最低限度。
  再次,同样不可避免地,本书参考了我早期那本书中的许多内容。现在,大多数在本书中参考的其他出版物都以完整的形式注明,如下面的例子所示:
  Ronald Fagin: “Normal Forms and Relational Database Operators,” Proc. 1979 ACM SIGMOD Int. Conf. on Management of Data, Boston, Mass. (May/June 1979). 
  但是,尤其对参考我早期那本书的情况,从此刻开始我会按照它的中文书名《SQL与关系数据库理论》译注3的形式单独给出。而且,我这个缩写书名专门指的是该书的第2版(在任何有区别的地方)。
  译注3:该书第1版的中文翻译版已经出版,书名为《SQL与关系数据库理论》,在本书中,暂且假设第2版的中文翻译版与第1版书名相同。
  实际上,多年来,我已经在许多出版物的不同章节中涉及了设计理论的各个方面,而本书的目的之一是保留我早期那些书中的精华。但它不只是将以前出版的资料拼凑在一起,我衷心地希望它不会被视为一本大杂烩。原因之一是,它包含很多新的材料。另外,它对整个主题的描述更连贯,而且在我看来视角更好(我自己多年来已经学到了很多东西!)。事实上,尽管某些部分的文字基于一些早期的出版物,但我确信那些有问题的材料已完全改写并且得到了改善。
  现在,关于数据库设计的书籍并不短缺,那么本书有什么与众不同呢?事实上,我不认为市面上有与这本书非常相似的书。市面上的确有许多讲述设计实践的书籍(在我看来,质量参差不齐),但那些书(再次,以我偏执的看法)通常没有很好地解释基本理论。市面上也有几本关于设计理论的书,但它们往往太偏理论,并在表达风格上也过于学术化,而不适合实践者使用。我想要做的是弥合这种差距,换句话说,我想用实践者应该能够理解的方式来解释理论,并且我想说明为什么理论具有很大的实际意义。我并不想都做到详尽无遗,也不想讨论理论的每一个细节,但我想把精力都集中在对我似乎很重要的组成部分上(不过,当然,我对确凿内容的处理,就其本身而言,应该是精确和准确的)。另外,我的目标是将正式和非正式的内容审慎地交融,换句话说,我想提供一个理论的简单介绍,以便:
  a. 你可以使用重要的理论成果,以帮助你做实际的设计,并且
  b. 如果你倾向于学习理论,你就可以去阅读更学术的文章,并理解它们。
  为了保持可读性,我特意把本书写得相当短小精炼,我也特意使每章都比较短。(我是一个在容易理解的小块中传递信息的坚定信徒。)而且,每章都包含了一组习题(其中大部分习题答案可参见书后的附录D),即使你不能把所有的习题都做一遍,我也建议你好好做一些。其中有些习题的目的是为了说明如何在实践中应用理论的思路,其余的习题提供(如果不是在习题中,就是在答案中)了更多与主题相关的信息,它们远远超过了本书正文包含的内容;还有些习题,例如,要求你证明一些简单的分析结果,其意图是让你对“关于像一个理论家那样思考”涉及哪些方面,获得一定的了解。总之,我想对什么是设计理论和为什么它是这样的提出一些见解。
先决条件
  我的目标受众是数据库专业人员,特别是对数据库设计的兴趣不凡的数据库专业人员。因此,我特别假定你相当熟悉关系模型,或者至少熟悉该模型的某些方面(第2章将更加详细地深入探讨这些内容)。正如已经指出的,熟悉《SQL与关系数据库理论》对理解本书会有很大的帮助。注意:我想要提及,我还有一个在这本书的基础上举办的研讨会的现场录像。欲知详情,请参阅www.justsql.co.uk/chris_date/chris_date.htm。
逻辑与物理设计的对比
  本书是关于设计理论的,因此,从定义上看,它是关于数据库逻辑设计,而不是物理设计的。当然,我不是说物理设计不重要(当然不是),我是说它是一个不同的活动,独立于逻辑设计并在其后实施。更详尽地讲,做设计的“正确”方式如下所示:
  1. 首先做一个清晰的逻辑设计。然后,作为一个单独的和随后的步骤:
  2. 将逻辑设计映射到目标DBMS正好支持的物理结构上。注2
  请注意,因此,物理设计应当从逻辑设计推导而来,而不是相反。(事实上,在理想的情况下,系统应能够 “自动”从逻辑设计获得物理设计,而在这个过程中完全不需要人为参与。)
  再次重申,本书是关于设计理论的。因此,它不涉及各种特设的设计方法,比如多年来先后提出的实体/关系模型之类的设计方法。当然,我知道这些方法中的一部分在实践中使用相当广泛,但事实仍然是,它们从坚实的理论基础方法得到的东西相对较少。因此,它们大多超出了这样一本书的范围。不过,我会不时对那些方法作少量的评论(特别是在第8章和第15章及附录A中)。
  注2: DBMS=数据库管理系统。请注意,DBMS和数据库在逻辑上是不同的!遗憾的是,业界通常使用术语数据库指某些DBMS产品,如Oracle,或碰巧在特定计算机上安装的这样的特定产品的一个副本。本书不采取这种用法。因为问题是,如果把DBMS称作数据库,那又该怎么称呼数据 库呢?
致谢
  我要感谢Hugh Darwen、Ron Fagin、 David McGoveran和 Andy Oram,他们一丝不苟地审阅了本书的初稿。这些审校者帮助我纠正了许多误解(其实,多得超乎我的预想)。当然,不用说,本书任何遗留的错误,责任都在我。我也想感谢Chris Adamson对特定技术问题给予我的帮助,以及我的妻子Lindy在我创作这本书的整个过程中对我一如既往的支持。
C. J. Date
加利福尼亚州希尔兹堡

封底文字

本书不同于其他讲述数据库设计书籍的独特之处是什么?许多讲述设计实践的资料对基本理论的解释很少,而那些侧重设计理论方面的书籍,主要是针对理论研究人员。在本书中,知名专家C.J. Date用超过四十年的经验学到的教训证明,为什么恰当的数据库设计是非常关键的,他通过从业者可以轻松理解的方式介绍设计理论,弥补这方面的空缺。

本书每章都包括一组习题,它们要么展示在实践中如何应用理论,提供更多的信息,要么要求你证明一些简单的理论结果。如果你是一个熟悉关系模型的数据库专业人员,并对数据库设计有非凡的兴趣,那么本书正是为你准备的。

本书回答的问题包括:
•为什么Heath定理如此重要?
•正交设计的原则是指什么?
•为什么一些JD可约而另外一些不可约?
•保持依赖为什么有问题?
•是否应该始终避免数据冗余?这可以做到吗?

数据库往往要在生产中保持几十年,而为避免细微的错误和处理不时出现的问题,精心的设计是至关重要的。如果数据库的设计不好,它带来的负面影响可能会非常广泛。本书会告诉你如何使用重要的理论成果创建良好的数据库设计。

作者简介

(英)C.J. Date 著:C.J. Date从20世纪70年代开始研究关系数据库理论,是关系数据库技术领域中非常著名的独立撰稿人、讲师、学者和顾问,在数据库行业内的地位是独一无二的。在英国剑桥大学获得数学学士、硕士学位,在英国德蒙特福特大学大学获得技术博士学位。40多年来,他一直活跃在数据库领域,他著述丰富,先后发表了多篇技术性文章和研究论文,并写有多部数据库方面的著作。他因最畅销的教科书《数据库系统导论》而著名。

译者简介

卢涛 译 李颖 苏旭晖 审校:暂无简介

译者序

2012年年底,当谢晓芳编辑把这本书在亚马逊网站的链接发给我时,我为有机会翻译数据库领域内知名作者的著作感到荣幸,由于他的著作已有多本中文翻译版出版,这既给我提供了良好的学习机会,又给我增添了压力,希望自己不要破坏原书的风貌。
  这本书比较薄,因为它是一系列书中的第二本,专门讲数据库设计中用到的关系理论。它的每一章也都比较短,具体介绍了各种范式、依赖、约束、冗余的定义和规范化的算法、方法,并澄清了不少文献中的谬误,叙述还是相当通俗易懂的。个人觉得本书专门介绍了设计领域的最新进展,如6NF等新的范式,这在市面的书籍中是独一无二的,对于数据库设计人员很有参考价值。
  本书对于数据库开发人员也有价值,因为它为解决具体问题提供了思路,比如有一道邀请参加聚会的习题,在第3届国际SQL/NO SQL大赛中作为竞赛题目。本书提供的计算函数依赖闭包的算法是那道题的核心知识点。
  这本译作的完成离不开大家的帮助。
  首先感谢我妻子李颖一如既往的支持,她是英语专业毕业,作为我的第一读者,帮助我检查出很多生硬的译文,并把语句梳理得更加通顺。另一方面,她用了很多时间照顾家庭,发挥了不可替代的作用。
  感谢老战友苏旭晖(ITPUB Oracle开发版版主,网名newkid),他在国外工作,技术水平和文笔俱佳。他帮助我解决了大量语言和技术难点,使本书译文在技术上更准确。
  感谢谢晓芳编辑,她对译文从专业的角度进行把关,对我不擅长的内容进行了很多润色,使之错误更少。我从她修改的译文中也学到了很多。
  最后还要感谢我儿子卢0一,他知道我在翻译书稿就默默配合我,让我能够专注于本书的翻译,本书的出版也有他的一份贡献。
  最后希望这本书对读者有帮助。为了争取译好这本书,我尽我所能翻阅了作者其他著作的中译本,参考了前辈的译文,也参考了离散数学中的相关术语。但由于译者经验和水平有限,译文中难免有不妥之处,恳请读者批评指正!
卢涛

图书目录

前言 1
第一部分 设置环境
第1章 篇首语 7
1.1 从文献摘录的一些引用 8
1.2 关于术语的说明 9
1.3 正在运行的示例 11
1.4 键 12
1.5 设计理论的地位 13
1.6 本书的目的 16
1.7 结束语 17
习题 18
第2章 预备知识 20
2.1 概览 20
2.2 关系及关系变量 21
2.3 谓词和命题 23
2.4 更多的供应商和零件 26
习题 28
第二部分 函数依赖、BOYCE/CODD范式及相关事宜
第3章 规范化:一些通则 33
3.1 规范化用于两个目的 35
3.2 更新异常 38
3.3 范式层次结构 38
3.4 规范化和约束 40
3.5 结束语 41
习题 42
第4章 函数依赖和BCNF(非正式的) 44
4.1 第一范式 44
4.2 函数依赖 48
4.3 键的重新审视 49
4.4 第二范式 51
4.5 第三范式 53
4.6 Boyce/Codd范式 53
习题 55
第5章 函数依赖和BCNF(正式的) 58
5.1 初步定义 58
5.2 函数依赖 60
5.3 Boyce/Codd范式 61
5.4 希思定理 64
习题 67
第6章 保持函数依赖 68
6.1 遗憾的冲突 70
6.2 第二个例子 72
6.3 第三个例子 74
6.4 第四个例子 75
6.5 一个能够工作的过程 77
6.6 恒等分解 81
6.7 关于冲突的更多内容 82
6.8 独立投影 83
习题 84
第7章 FD公理化 85
7.1 阿姆斯特朗公理 85
7.2 附加规则 87
7.3 证明附加规则 89
7.4 另一种闭包 89
习题 91
第8章 反规范化 93
8.1“反规范化是为了性能”吗 93
8.2 反规范化是什么意思 94
8.3 什么不是反规范化(I) 96
8.4 什么不是反规范化(II) 98
8.5 反规范化是有害的(I) 100
8.6 反规范化是有害的(II) 102
8.7 结束语 103
习题 103
第三部分 连接依赖、第五范式及其他相关事项
第9章 连接依赖及5NF(非正式的) 107
9.1 连接依赖的基本思路 108
9.2 一个属于BCNF但不属于5NF的关系变量 111
9.3 循环规则 114
9.4 结束语 115
习题 116
第10章 连接依赖及5NF(正式的) 117
10.1 连接依赖 117
10.2 第五范式 119
10.3 被键蕴含的JD 121
10.4 一个有用的定理 124
10.5 FD不是JD 125
10.6 更新异常再探 125
习题 127
第11章 隐式依赖关系 128
11.1 无关的分量 128
11.2 结合分量 129
11.3 不可约的JD 130
11.4 小结 133
11.5 追逐算法 135
11.6 结束语 139
习题 139
第12章 多值依赖和4NF 141
12.1 一个介绍性的例子 141
12.2 多值依赖(非正式的) 143
12.3 多值依赖(正式的) 144
12.4 第四范式 145
12.5 公理化 147
12.6 嵌入式依赖 148
习题 149
第13章 额外的范式 151
13.1 相等依赖 152
13.2 第六范式 153
13.3 超键范式 156
13.4 无冗余范式 157
13.5 域-键范式 163
13.6 结束语 164
习题 166
第四部分 正交
第14章 正交设计原则 171
14.1 规范化的两个欢呼声 171
14.2 一个启发性的例子 173
14.3 一个更简单的例子 174
14.4 元组与命题 177
14.5 第一个例子再探 181
14.6 第二个例子再探 183
14.7 最终版本 183
14.8 澄清 184
14.9 结束语 185
习题 186
第五部分 冗余
第15章 我们需要更多的科学 189
15.1 一点历史 191
15.2 数据库设计是谓词设计 193
15.3 例1 194
15.4 例2 195
15.5 例3 196
15.6 例4 196
15.7 例5 197
15.8 例6 197
15.9 例7 200
15.10 例8 202
15.11 例9 202
15.12 例10 204
15.13 例11 204
15.14 例12 205
15.15 管理冗余 206
15.16 改善定义 208
15.17 结束语 215
习题 216
第六部分 附录
附录A 主键是良好的,但不是必需的 219
附录B 冗余回顾 232
附录C 重要论文回顾 237
附录D 习题答案 241

教学资源推荐
作者: 邱李华,曹青,郭志强
作者: [美]孙艺洲(Yizhou Sun),韩家炜(Jiawei Han) 著
作者: [美] 亚伯拉罕·西尔伯沙茨 (Abraham Silberschatz) [美] 亨利·F. 科思 (Henry F. Korth) [印] S. 苏达尔尚(S. Sudarshan) 著
作者: 何玉洁 编著
参考读物推荐