SQL沉思录(世界级SQL专家经典著作)
基本信息
- 原书名: Joe Celko's Thinking in Sets: Auxiliary, Temporal, and Virtual Tables in SQL
- 原出版社: Morgan Kaufmann
- 作者: (美)Joe Celko [作译者介绍]
- 译者: 马树奇
- 丛书名: 图灵程序设计丛书 数据库
- 出版社:人民邮电出版社
- ISBN:9787115213952
- 上架时间:2009-11-13
- 出版日期:2009 年11月
- 开本:16开
- 页码:270
- 版次:1-1
- 所属分类:
计算机 > 数据库 > SQL语言
编辑推荐
世界级SQL专家经典著作
通过大量实例深入揭示SQL编程本质
叫你不同于过程和OO编程的全新思考方式
推荐阅读
内容简介回到顶部↑
本书通过大量的实例,详细说明了为提高sql编程技术而必须面对的思想方法上的根本转变——由以过程式编程方式思考转变为以数据集的方式来思考。此外,本书还讨论了关于sql编程中查找表、视图、辅助表、虚拟表的应用,并独到地阐明了如何在sql系统中正确地处理时间值以及sql编程中的其他技术难点。
本书适合广大数据库编程人员和sql程序员学习参考。
本书适合广大数据库编程人员和sql程序员学习参考。
作译者回到顶部↑
本书提供作译者介绍
Joe Celko 世界著名的数据库专家,曾担任ANSl SQL标准委员会成员达10年之久,是世界上读者数量最多的SQL图书作者之一。他曾撰写过一系列专栏,并通过他的新闻组支持和推动了数据库编程技术以及ANSl/IS0标准的发展。除本书外,他还撰写了多部SQL经典著作,包括《SQL编程风格》、《SOL解惑》和《SOL权威指南》,上述作品的中文版均已经或即将由人民邮电出版社出版。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第1章 sql是声明式语言,不是过程式语言
1.1 不同的编程模型
1.2 不同的数据模型
1.2.1 “列”不是“字段”
1.2.2 行不是记录
1.2.3 表不是文件
1.2.4 关系键不是记录定位器
1.2.5 键的类型
1.2.6 关系键的理想属性
1.2.7 唯一,但并非不变
1.3 表作为实体
1.4 表作为关系
1.5 语句不是过程
1.6 分子、原子和亚原子型数据元素
1.6.1 分割表
1.6.2 分割列
1.6.3 时间值的分割
1.6.4 假造的非第一范式数据
1.6.5 分子型数据元素
1.6.6 异构数据元素
1.1 不同的编程模型
1.2 不同的数据模型
1.2.1 “列”不是“字段”
1.2.2 行不是记录
1.2.3 表不是文件
1.2.4 关系键不是记录定位器
1.2.5 键的类型
1.2.6 关系键的理想属性
1.2.7 唯一,但并非不变
1.3 表作为实体
1.4 表作为关系
1.5 语句不是过程
1.6 分子、原子和亚原子型数据元素
1.6.1 分割表
1.6.2 分割列
1.6.3 时间值的分割
1.6.4 假造的非第一范式数据
1.6.5 分子型数据元素
1.6.6 异构数据元素
前言回到顶部↑
本书讨论的是使用表而不是过程式代码的各种SQL编程技术。我一直跟大家说,学习SQL编程最重要的就是要摒弃原有的过程式编程,但对于那些一直都在以文件和过程代码的方式来思考的人们而言,仅仅这样说不行,还得具体说明如何采用声明式关系语言来完成相关工作。因此我编写了本书,展示实际技术,阐述思想方式。.
与我的其他作品相同,本书的读者对象是那些希望掌握良好SQL编程技术的专业SQL程序员。本书假定读者对SQL语言足够了解,已经能够编写可以运行的代码,具有一年的SQL使用经验。
为什么需要具有一年的经验呢?我通过几十年讲授SQL课程发现,大多数人在由过程式编程语言(如FORTRAN、Cobol、Pascal、C系列语言)、面向对象编程语言等转向SQL语言时,都要经过多个阶段,而这段时间基本为一年。声明式语言与他们此前使用的所有编程语言都不相同。
学习一门新的编程语言就如同学习一门外语。一开始,人们会念错单词,并且总想使用自己母语的词序和语法。接下来,人们会通过努力,根据一种固定模式来正确地造句。最后,人们才能轻松地以该语言来思考和表述,并且不需要再刻意关注语言本身。
SQL编程的初级阶段只不过是闭着眼睛从别人的程序中把现有的代码复制过来,这并不是真正的编程。人们可能还会使用一种具有图形用户界面的工具来从文本文件中把SQL语句组合起来,甚至根本不需要显示自己的实际代码。
接下来的阶段是编写新的SQL代码,但仍然像使用自己最初熟悉的语言那样来操作。这种思维模式的问题在于错用术语。例如,将列称为字段,仿佛仍然在使用顺序文件系统一样。这种问题还表现在使用游标和时态表来模仿顺序文件系统,其中隐含着更大的危险和代价。
在使用SQL进行编程接近一年的时候,程序员的思维方式开始出现变化。他已经见过了优秀的SQL代码,了解了关于RDBMS(关系数据库管理系统)的相关技术,最终开始以SQL的方式来思考。走运的话,这段时间他可能还参加了大学或者其他机构开设的培训课程。
关于这种思维模式问题的最有趣的例子是,我几十年前曾经为一些工程师讲授大学课程,这些工程师只知道FORTRAN和C语言。他们认为SQL肯定也是一些WHILE循环或者IF-THEN结构。其中有一个LISP程序员就很高兴,因为SQL中没有迭代循环和代码模块嵌套,但他无法理解SQL中为什么没有递归结构。..
使用数据库的开发人员不能满足于会使用原有编程语言。2007年3月22日IT媒体上发表的Evans数据公司的一篇文章表明,经过一次为期两年的调查发现,有40%的美国程序员工作中要使用数据库。该调查还表明,仅仅一年前,工作中需要使用数据库的开发者还只占32%。
辅助表、时态表和虚拟表
SQL中只有一种数据结构:表。使用表的方式经常会影响到声明它们的方式。在存储系统中始终存在的有基表(base table)或叫操作表(operational table)。它们保存着数据模型的核心数据,但表的种类并不仅限于此。
如果对中转表(staging table)不加约束或者甚至连键(key)也没有,那么它会变成可怕的怪物。但SQL允许人们创建中转表。人们可以将它作为废旧数据、原始数据的中转区,而不想把这些数据放入自己的整齐、漂亮的基表中。
辅助表用于通过联结操作而不是过程式编程来完成函数运算及计算其他值。此方面一个常见的例子是用于处理编码转换工作的查找表,以及无法简单计算出结果的函数。因为它们并不是实际的实体或者关系,因此不能出现在数据模型的实体-关系图(ER图)中。
时态表是指支持时态查询、历史数据和审计信息的表。尽管它既可以被看做辅助表也可以看做基表,但仍然需要特别关注。这方面的讨论涉及的概念和具体实现都比较复杂。
虚拟表是由SQL引擎物化(或者表面上物化)了的表。实际上在诸如基表这样的模式中,它们并不存在。它们有多种表现形式,可以用于提高SQL语句的性能。
本书还讨论了模式信息表(Schema Information Tables),SQL用它来描述SQL本身的模式。模式信息表有ANSI/ISO标准,但大多数产品各自遵循的标准会略有不同。...
与我的其他作品相同,本书的读者对象是那些希望掌握良好SQL编程技术的专业SQL程序员。本书假定读者对SQL语言足够了解,已经能够编写可以运行的代码,具有一年的SQL使用经验。
为什么需要具有一年的经验呢?我通过几十年讲授SQL课程发现,大多数人在由过程式编程语言(如FORTRAN、Cobol、Pascal、C系列语言)、面向对象编程语言等转向SQL语言时,都要经过多个阶段,而这段时间基本为一年。声明式语言与他们此前使用的所有编程语言都不相同。
学习一门新的编程语言就如同学习一门外语。一开始,人们会念错单词,并且总想使用自己母语的词序和语法。接下来,人们会通过努力,根据一种固定模式来正确地造句。最后,人们才能轻松地以该语言来思考和表述,并且不需要再刻意关注语言本身。
SQL编程的初级阶段只不过是闭着眼睛从别人的程序中把现有的代码复制过来,这并不是真正的编程。人们可能还会使用一种具有图形用户界面的工具来从文本文件中把SQL语句组合起来,甚至根本不需要显示自己的实际代码。
接下来的阶段是编写新的SQL代码,但仍然像使用自己最初熟悉的语言那样来操作。这种思维模式的问题在于错用术语。例如,将列称为字段,仿佛仍然在使用顺序文件系统一样。这种问题还表现在使用游标和时态表来模仿顺序文件系统,其中隐含着更大的危险和代价。
在使用SQL进行编程接近一年的时候,程序员的思维方式开始出现变化。他已经见过了优秀的SQL代码,了解了关于RDBMS(关系数据库管理系统)的相关技术,最终开始以SQL的方式来思考。走运的话,这段时间他可能还参加了大学或者其他机构开设的培训课程。
关于这种思维模式问题的最有趣的例子是,我几十年前曾经为一些工程师讲授大学课程,这些工程师只知道FORTRAN和C语言。他们认为SQL肯定也是一些WHILE循环或者IF-THEN结构。其中有一个LISP程序员就很高兴,因为SQL中没有迭代循环和代码模块嵌套,但他无法理解SQL中为什么没有递归结构。..
使用数据库的开发人员不能满足于会使用原有编程语言。2007年3月22日IT媒体上发表的Evans数据公司的一篇文章表明,经过一次为期两年的调查发现,有40%的美国程序员工作中要使用数据库。该调查还表明,仅仅一年前,工作中需要使用数据库的开发者还只占32%。
辅助表、时态表和虚拟表
SQL中只有一种数据结构:表。使用表的方式经常会影响到声明它们的方式。在存储系统中始终存在的有基表(base table)或叫操作表(operational table)。它们保存着数据模型的核心数据,但表的种类并不仅限于此。
如果对中转表(staging table)不加约束或者甚至连键(key)也没有,那么它会变成可怕的怪物。但SQL允许人们创建中转表。人们可以将它作为废旧数据、原始数据的中转区,而不想把这些数据放入自己的整齐、漂亮的基表中。
辅助表用于通过联结操作而不是过程式编程来完成函数运算及计算其他值。此方面一个常见的例子是用于处理编码转换工作的查找表,以及无法简单计算出结果的函数。因为它们并不是实际的实体或者关系,因此不能出现在数据模型的实体-关系图(ER图)中。
时态表是指支持时态查询、历史数据和审计信息的表。尽管它既可以被看做辅助表也可以看做基表,但仍然需要特别关注。这方面的讨论涉及的概念和具体实现都比较复杂。
虚拟表是由SQL引擎物化(或者表面上物化)了的表。实际上在诸如基表这样的模式中,它们并不存在。它们有多种表现形式,可以用于提高SQL语句的性能。
本书还讨论了模式信息表(Schema Information Tables),SQL用它来描述SQL本身的模式。模式信息表有ANSI/ISO标准,但大多数产品各自遵循的标准会略有不同。...
媒体评论回到顶部↑
Joe Celko写的所有的书我都买了,这本书是其中写得最好的一本……强烈推荐!
——Amazon.com读者评论...
——Amazon.com读者评论...


点击看大图







加载中...
