欢迎光临
免费的PDF电子书下载网站

SQL与关系数据库理论·如何编写健壮的SQL代码(原书第2版,关系数据库领域的经典之作,关系数据领域泰斗级人物40年经验的结晶) PDF下载

编辑推荐

  关系数据库领域的经典之作,关系数据领域泰斗级人物40年经验的结晶! ; ;

内容简介

  对于数据库管理与开发人员来说,使用SQL时会到处遭遇困难和陷阱。只有深入理解关系理论,并将理论应用于实践,才能避免这些困难和陷阱。本书作者深入阐述了关系理论,以严谨的态度对SQL与关系理论进行详尽而深入的对比、讨论和思考,并且使用大量示例和练习展示怎样才能将关系理论正确地应用到SQL中,得到健壮的SQL代码,为高级数据库开发人员提供大量常见SQL问题的解决之道。
  本书回答了如下问题:
  为什么恰当的列命名非常重要?
  数据库中的null会让你得到错误的答案。为什么?你又能做什么?
  是否可以通过编写一个SQL查询找到在同一个部门每次任职都不足6个月的员工?
  虽然SQL支持“量化比较”,但是最好不要使用。为什么?怎样避免使用?
  虽然约束至关重要,但大多数SQL产品都没有恰当地对其提供支持。怎样解决此种境况?

作者简介

 ;  C.J.Date  ; 是关系数据库技术领域中非常著名的独立撰稿人、讲师、学者和顾问。他最著名的著作是《数据库系统导论》,这本书已经销售了大约85万册,并被世界范围内的几百所大学作为教材采用。他同时也是许多数据库管理书籍的作者,包括国内引进出版的下列作品:《数据库设计与关系理论》、《数据库、类型和关系模型》和《深度探索关系数据库:实践者的关系理论》等。Date先生于2004年被选入计算行业名人堂(the Computing Industry Hall of Fame)。他因具有一流的将复杂的技术专题用一种清晰且很容易理解的方式加以解释的能力而享有盛誉。  ;

SQL与关系数据库理论·如何编写健壮的SQL代码(原书第2版,关系数据库领域的经典之作,关系数据领域泰斗级人物40年经验的结晶) PDF下载

目录


1版前言 ; ; ; ;

2版前言 ; ; ; ;

1章做好准备 ; ;

1.1 关系模型被严重地误解了 ; ; ; ; ;

1.2 关于术语的一些说明 ; ; ; ; ;

1.3 原理而非产品

1.4 原始模型回顾

1.5 模型vs.实现 ; ; ;

1.6 关系的性质 ; ; ; ; ;

1.7 基关系vs.导出关系 ; ; ; ; ; ; ; ;

1.8 关系vs.关系变量 ; ; ;

1.9 vs.变量 ; ; ; ; ; ; ; ;

1.10 小结 ; ; ; ; ; ; ;

1.11 练习题 ; ;

2章类型和域 ; ;

2.1 类型和关系 ; ; ; ; ;

2.2 相等性比较 ; ; ; ; ;

2.3 数据值原子性

2.4 类型是什么 ; ; ; ; ;

2.5 标量类型vs.非标量类型 ; ; ;     

2.6 SQL中的标量类型   

2.7 SQL中的类型检查和型转       

2.8 SQL中的字符序       

2.9 SQL中的行类型和表类型       

2.10 小结       

2.11 练习题  

3章元组、关系、行、表      

3.1 元组是什么     

3.2 SQL中的行       

3.3 关系是什么     

3.4 关系及其主体

3.5 关系是n维的

3.6 关系比较

3.7 TABLE_DUMTABLE_DEE     

3.8 SQL中的表       

3.9 SQL中的列命名       

3.10 小结       

3.11 练习题  

4章不要重复,不要null        

4.1 重复有什么问题     

4.2 重复:深入讨论     

4.3 SQL中避免重复

4.4 null有什么毛病        

4.5 SQL中避免null  

4.6 对外连接的说明     

4.7 小结

4.8 练习题     

5章基关系变量和基表  

5.1 更新是集合级别的

5.2 关系赋值

5.3 关于候选键的更多内容

5.4 关于外键的更多内容     

5.5 关系变量和谓词     

5.6 关系 vs. 类型         

5.7 练习题     

6 SQL和关系代数I:原始运算符     

6.1 一些预备知识

6.2 关于闭包的更多内容     

6.3 限制

6.4 投影

6.5 连接

6.6 并、交和差     

6.7 哪些运算符是基本运算符     

6.8 逐步形成表达式     

6.9 关系表达式到底表示什么     

6.10 计算SQL表表达式       

6.11 表达式变换  

6.12 属性名依赖  

6.13 练习题  

7 SQL和关系代数II:附加运算符    

7.1 排他并     

7.2 半连接和半差

7.3 扩展

7.4 映像关系

7.5      

7.6 聚集运算符     

7.7 再议映像关系

7.8 汇总

7.9 再议汇总

7.10 分组、去分组和关系值属性       

7.11WHAT IF”查询   

7.12 对于递归的说明  

7.13 ORDER BY是怎么回事  

7.13 练习题  

8 SQL与约束        

8.1 类型约束

8.2 SQL中的类型约束   

8.3 数据库约束     

8.4 SQL中的数据库约束       

8.5 事务

8.6 数据库约束为什么必须立即检查

8.7 不是有些检查必须延迟进行吗     

8.8 约束与谓词     

8.9 各种问题

8.10 练习题  

9 SQL与视图        

9.1 视图是关系变量     

9.2 视图和谓词     

9.3 检索运算

9.4 视图和约束     

9.5 更新运算

9.6 视图的作用     

9.7 视图和快照     

9.8 练习题     

10 SQL与逻辑     

10.1 为什么需要逻辑  

10.2 简单命题和复合命题  

10.3 简单谓词和复合谓词  

10.4 量词化  

10.5 关系演算       

10.6 关于量词化的更多内容       

10.7 一些等价关系       

10.8 小结       

10.9 练习题  

11章使用逻辑表述SQL表达式    

11.1 一些变换法则       

11.2 1:逻辑蕴涵    

11.3 2:全称量词化        

11.4 3:蕴涵和全称量词化    

11.5 4:相关子查询        

11.6 5:命名子表达式    

11.7 6:关于命名子表达式的更多内容        

11.8 7:处理模糊性        

11.9 8:使用COUNT       

11.10 9:连接查询 

11.11 10:唯一量词化    

11.12 11ALLANY比较     

11.13 12GROUP BYHAVING    

11.14 练习题

12章关于SQL的其他主题    

12.1 SELECT * 

12.2 显式表  

12.3 名称限定       

12.4 区间变元       

12.5 子查询  

12.6 “可能非确定性”表达式  

12.7 空集合  

12.8 简化的BNF语法  

12.9 练习题  

附录A 关系模型  

附录B SQL背离关系模型之处     

附录C 处理信息丢失的关系方法       

附录D Tutorial D语法   

附录E 本书建议汇总   

附录F 练习答案   

附录G 深入阅读建议  

 


免费在线读

  第1章
  做好准备
  My soul, sit thou a patient looker-on;
  Judge not the play before the play is done;
  Her plot hath many changes; every day
  Speaks a new scene; the last act crowns the play.
  ——Francis Quarles: Emblems (1635)
  SQL的关系化方法是本书的主题,或主题之一。当然,如果要充分地探讨这个问题,仅仅探讨SQL本身的内容是不够的,还需要涉及关系理论的相关内容。尽管这一说明显然适用于全书,但它特别适用于这第1章。所以,相对而言,本章只有很少的部分来讲述关于SQL的内容。我所要做的就是回顾(在大多数情况下希望你无论如何也要掌握的)背景知识。之所以这样做是因为,要建立一个起始点,或者说是为书中的后续内容奠定基础。不过,就算如我所愿,你已经熟悉了本章内容,我也诚挚地建议你不要略过本章。你应该知道你需要知道的一切(如果你能够了解我的用意的话);尤其是,你需要确定自己具有理解本书后续章节内容的所有预备知识。事实上,我建议你在全书中都不要因为自以为熟悉某个主题而略过对该主题的讨论。比方说,你真的绝对确定自己知道关系理论术语 “键”(Key)或者“连接”(join)注1指的是什么吗?
  1.1 关系模型被严重地误解了
  任何学科的专业人士都需要知道自己所在专业的基础。所以,如果你是数据库领域的专家,就需要知道关系模型,因为它是数据库领域的基础(至少是基础的主体)。当今,不论是商业化的应用培训还是学术化的理论课程,任何课程都至少提到关系模型的内容,但是大多数教学从结果上看都很糟。可以确定的是,数据库领域中的大多数人并没有很好地理解关系模型。造成这种情形的可能原因包括:
  脱离实践的关系模型教学。就是说,至少对于初学者,理解关系模型知识的关联性或关系模型所要解决的问题是很难的。
  授课的教师本身并没有充分理解或意识到关系模型知识内容的重要性。
  在实践中更可能存在的问题:就根本没教关系模型,授课中取而代之的是SQL语言,或者SQL语言的一些方言(比如Oracle的SQL方言)。
  所以这本书的目标读者就是那些数据库实践人员,他们接触过关系模型,但仍然缺乏本应具有的全部知识(尤其是SQL实践人员)。这本书绝不是针对初学者而写的;不过,它也不是一个进修课程。具体而言,我可以确定你确实知道一些关于SQL的知识,但是请容我在此冒昧地说一句,如果你关于关系模型的知识仅仅来源于你所掌握的SQL知识,那么恐怕你并很好地理解关系模型,而且你所知道的还有可能是错的。我认为:SQL和关系模型不是一回事。这一点怎么强调都不过分不夸张地说,下面是一些SQL并不十分明确的关系化问题(下面的列表并不是全部的列表):
  数据库、关系及元组的确切含义;
  关系值和关系变量的区别;
  谓词和命题的关联性;
  属性名称的重要性;
  完整性约束的关键角色;
  信息原理及其重要性。
  所有这些问题以及其他很多问题,都在这本书中进行了阐述。
  我再说一遍:如果你对于关系模型的知识仅仅来源于你对于SQL的知识,那么你所知道的有可能是错的。所以,你在阅读本书过程中可能会得到一个结论:你不得不进行一些反学习(unlearning,即把以前学习到的错误知识忘掉并重新学习正确的知识,避免以前的错误知识产生不利影响——译者注)。不幸的是,反学习是非常困难的。
  1.2 关于术语的一些说明
  在1.1节的关系化问题列表中,你可能意识到我使用了形式化术语“关系”(relation)、“元组”(tuple)及“属性”(attribute)。SQL当然不使用这些术语,取而代之的是更“用户友好的”术语:“表”(table),“行”(row),“列”(column)。只要有助于使知识更易于理解,我通常都会赞同使用更“用户友好的”术语。然而,就当前的情况而言,我(遗憾地)认为它们没有使知识更易于理解,而是曲解了知识并实际上损害了真正理解的形成。真相是,关系并不是表,元组并不是行而属性也并不是列。尽管在某些非正式上下文中对术语的曲解(即关系是表,元组是行而属性是列——译者注)是可被接受的(事实上我自己也经常如此),但是我要说:只有当我们全都理解“用户友好的”术语只是对于真相的近似而不能抓住事实本质时,它才是可接受的。换个说法:如果你确实理解真实情况,那么合理地使用“用户友好的”术语是一个不错的想法,但是如果以学习和领会真实情况为第一要义的话,你需要使用正式的术语。因此,在这本书中,我将会使用正式用语(至少在我讲述与SQL相对的关系模型时会是如此),并在合适的时机为这些正式术语给出精确定义。相反,在SQL上下文中,我会使用SQL的专用术语。
  关于术语的另外一点是:尽管我已经说过SQL试图简化一个术语集合,但我必须强调的是,它使另外一个术语集合复杂起来。我指的是SQL对于术语“运算符”(operator)、“函数”(function)、“过程”(procedure)、 “程序”(routine)和“方法”(method)的使用,所有这些本质上代表同一个事物(即使有差别也微乎其微)。在这本书中我会全程使用术语“运算符”;比如,我会明确地将“=”(等值比较)、“:=”(赋值)、“+”(加)、DISTINCT、JOIN、SUM和GROUP BY(等等)都称作运算符。
  需要注意的是,说到SQL,请允许我提醒你(如前言所述):除非是在极为有限的几个上下文中,否则本书中的SQL指的都是标准版本的SQL语言。注2
  然而:
  标准所用的术语有时并不适合使用。此时,我一般会使用我自己的术语。比如,我会使用“表表达式”(table expression)代替SQL标准中的术语“查询表达式”(query expression),这是因为:首先,这种表达式表示的值实际是表而不是查询;其次,查询并不是使用这种表达式涉及的唯一上下文(事实上,SQL标准中确实使用了术语“表表达式”,但是用的很不恰当;具体来说, “表表达式”在标准中用来指代SELECT表达式中SELECT子句后面的部分)。
  紧接着上一点,(不论是从我的观点还是从标准的观点出发)在SQL中并不是所有的“表表达式”在其本应合法的所有上下文中都是合法的。尤其是,尽管一个显式JOIN调用肯定表示一个表,但它不能作为独立的(stand alone)表表达式出现(即,不能独自出现在嵌套查询中的最外层),也不能作为构成子查询的括号内部表表达式出现(参见第12章)注3。请注意,这些说明适用于书中很多单独的讨论,但不断地重复这些说明是很乏味的,我也不会那么做(不过,在第12章的BNF语法部分我会再次提及它们)。
  我忽略了SQL标准中被认为是晦涩难懂的部分,尤其是那些不是SQL标准所谓的核心SQL部分或是与关系化处理本身无紧密联系的部分。这些内容的具体例子包括:分析或窗口(OLAP)函数,动态SQL,临时表,以及用户自定义类型的细节。
  出于某些原因,我使用了不同于SQL标准的注释风格。具体来说,我使用由“/*”及“*/”分隔符包围的斜体字符串来显示注释。

SQL与关系数据库理论·如何编写健壮的SQL代码(原书第2版,关系数据库领域的经典之作,关系数据领域泰斗级人物40年经验的结晶) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:SQL与关系数据库理论·如何编写健壮的SQL代码(原书第2版,关系数据库领域的经典之作,关系数据领域泰斗级人物40年经验的结晶)