《你不可不知的关系数据库理论》——14.1 概述

14.1 概述

再重复一下我在第10章讲过的内容,我确信先了解关系模型,然后再学习SQL会比先学习SQL再学习关系模型要容易些。其原因是如果先学习SQL再学习关系模型的话,会需要很多未了解的知识(因此本书才按照这样的结构来安排,就像在第1章中介绍的一样)。实际上,我相信并不是任何人都真正了解SQL的方方面面,只是知道了这种语言,而不是真正了解它的实质。SQL如此庞大、如此复杂、如此特别、如此非正交(此处忽略了它的逻辑差异、不一致性、矛盾等1),经过分析后我不得不相信SQL是很难教会的。我不止一次地遇到过这样的情况,即我向很多SQL专家请教一些技术问题的答案时(我曾拜访过SQL标准委员会的成员或曾经的成员),往往要等上一些时间才能获得答案,即使答案是现成的(但不总是这样的),这些答案也不保证一直是正确的。

无论如何,我希望你从上面的叙述中可以了解到,为什么人们(就像我自己)都拒绝把现在主流的“关系型”产品看作是关系型的。实际上它们是SQL型产品:它们支持的基本数据对象是SQL表,不是关系。它们支持的运算符可以处理SQL表,而不能处理关系。但令人遗憾的是(不能说是奇怪的),我一直坚信真正的关系型DBMS应该远远超越只支持SQL的DBMS(不仅是从可用性的角度超越,而且要在易实现性、优化性和良好的性能方面来超越)。我简短地阐述一下。

可用性:一个不可否认的事实就是,SQL要比关系模型复杂得多,而且它也没额外提供一些有用的功能。实际上严格来讲,它提供的功能要比关系模型少,因为它完全不是关系型的(参见第7章中关于此概念的讲解)。
优化和性能:首先我需要解释一下优化器的概念,优化器的功能之一就是完成表达式的转换,即将表达用户原始请求的表达式转换为另一种逻辑上与其等价的表达式,并且要保证得到等价的结果,而且性能要优于原始的表达式(至少这是我们所希望的)。(我已经在本书中的某些地方提到过这个概念,比如第1章。)也就是说,对于关系来说可以完成很多这样的转换,但是对于带有重复行的表来说不能完成这么多的工作,如果考虑列的顺序、考虑空值则不能完成众多的转换。换句话说,这些非关系型的特征(重复行、列序、空值)都是阻碍优化的重要因素,因此会影响性能,另一方面,这些特征也会使优化器更加复杂,所以很难实现。
注意:
这里我又提出了几点,首先,你需要理解“不存在两个等价的SQL”(我在第10章曾提到过)。
目前没有一款商业产品完全支持这个标准(实际上,如果考虑到不一致性和我上面提到的那些,没有一款产品能做到这一点)。
同时,每款产品都具有自身特有的一些特征,而这些特征并不是标准的一部分。
而且,这个标准明显遗留了一些需要在特定产品中解决的问题。(例如,为结果中的列命名,否则这个列就没有名字。可以参照第10章练习10.3的答案。)你认为这些产品都能恰好采用相同的方法来解决这些问题吗?
我感觉还有义务提一下,即使从纯粹的正规编程语言角度来说,以任何标准衡量SQL的设计都是很糟糕的。实际上对于语言设计的好坏已经建立起评价标准,我记得应该是:通用性、简洁性、完整性、相似性、可扩展性、开放性和正交性2,但似乎没有任何证据可以证明SQL的设计符合上述特性。

但有趣的是,为什么市场上喜欢使用SQL,而不使用关系模型呢(对于此事我有自己的观点,但我不会在这里表明)。迄今为止,无论如何我们都还不得不学会忍受这种选择的结果。即便这样,对于SQL表的设计和SQL运算符的使用等规则的研究仍然是人们感兴趣的,当然目的是使整个系统看上去与真正的关系型一样。实际上我在第11章曾经提到过,这些规则在SQL and Relational Theory一书中用很大篇幅进行了介绍。然而不幸的是,由于SQL语言和当前SQL产品的设计原因,采用这样的规则反而会有些痛苦。当然,实际上它也没有被广泛采用。尽管如此,我还是强烈推荐使用它。

时间: 2024-09-20 05:43:22

《你不可不知的关系数据库理论》——14.1 概述的相关文章

《你不可不知的关系数据库理论》导读

前言 你不可不知的关系数据库理论关系数据模型是百年来最伟大的技术发明之一,它是我们完成数据库领域任何事情的基础.的确,它使数据库管理成为一门科学,而不再像过去那样是一些技巧.技术和经验法则的特定集合.因此,每一个与数据库管理有关的专业人员,或多或少都会主动去获得一些与关系模型有关的知识,以加深对关系模型的理解.因为如果没有它,想开展高效的工作.获得较高的工作性能几乎是不可能的. 不幸的是,想要达到如上所说的"获得知识,加深理解"是不容易的.这有多方面的原因,但影响最大的原因是SQL语言

《你不可不知的关系数据库理论》——第1章 数据库基本概念

第1章 数据库基本概念 你不可不知的关系数据库理论我们的生活被琐事浪费掉了--简化,简化. --Henry David Thoreau: Walden(1854) 本章是一个介绍性的概述,目的是提供一个距离我们非常遥远的观点.它故意没有讲解得很深奥,如果你已经了解了关于数据库管理的一些知识,也许会发现本章内容都已熟悉.但是我想你应该花些时间把本章从头到尾通读一遍,这是非常值得的,如果只是想获得背景知识,可以看后续的章节.同时,本章还介绍了一些可以运行的示例,在后面的章节中我们也一定会遇到这些例子

《你不可不知的关系数据库理论》——14.2 SQL与关系模型的不同点

14.2 SQL与关系模型的不同点 此部分列出了SQL与关系模型的不同点,主要是为了参考,同时顺便进行一些附加说明.我知道可能会有人对列表中的个别术语吹毛求疵,一一解释列表中这些特性是非常不容易的,特别是它的正交性(例如,保证这些特性都相互独立,互不影响).但是我认为这些吹毛求疵都不是重要的,重要的是它们累积起来造成的影响,坦率地说是相当惊人的3. 不再啰嗦了,下面具体来看一下它们的不同点: SQL不能够完全区分表的值和表变量.SQL表与关系(或关系变量)不同,因为它们不允许或不需要(根据具体情

《你不可不知的关系数据库理论》——14.3 练习

14.3 练习 14.1 从语义上判断下面哪些是合法的独立SQL表达式(即没有嵌套在其他表达式中的表达式),哪些不是?(A和B是表名,假设这里的表都能够满足特定运算的需求.)>{注意:}这个练习有点不公平,因为在本书中没有覆盖到足够的SQL内容来回答所有的问题,但是我想值得尝试一下,对你也会有益处的.但我至少解释一下SQL结构"TABLE T"(T就是一个简单的表,而不是常用的表的表达式),它是表达式"(SELECT * FROM T)"的缩写.也许还要提醒你

《你不可不知的关系数据库理论》——14.4 答案

14.4 答案 14.1 SQL表的表达式采用正规的BNF语法,为了完整地回答这个问题,可以参照SQL and Relational Theory(这个练习中的例子就摘自此书). 至于从练习中得出的结论,要依靠你自己的回答来总结,但是我知道我自己得到的结论. 14.2 影响如下:表达式b原来是不合法的,但现在变成了合法的.表达式c..e..k..l..m.是合法的,但变成了不合法的.其他所有的表达式原来是不合法的,现在仍然是不合法的.从这个练习中你可以得出什么结论? 1支持这些声明的证据(关于不

《你不可不知的关系数据库理论》——1.3 什么是关系型DBMS

1.3 什么是关系型DBMS 现在我们已经知道了什么是DBMS,但什么是关系型DBMS呢?当然,首先它是一个DBMS,它要提供本章介绍的DBMS具备的所有功能:数据存储.查询.修改.恢复控制.并发控制.安全控制和完整性控制,以及本书中没有讨论的其他功能.但是第二点要注意的是,它又是关系型的,这就意味着用户接口在真正实现时必须是关系模型.换句话说,关系模型被看作是DBMS中实现用户接口的一种方法. 在继续讲解之前,还要强调一点,这个方法(即关系模型)其实很简单!关系模型的这些方法并不是紧身衣,相反

《你不可不知的关系数据库理论》——1.4 数据库系统与程序系统

1.4 数据库系统与程序系统 这两个概念好像不太好区别,但是也有一些相似性.事实上,通常不认为一个数据库系统就是一个程序系统(更确切地说,是一种特例).图 1.3 给出了代码片段,这段代码的目的是要计算一维数组A中整型数据的和,并将其显示在终端上(该片段采用一种假设的语言来表示,但该语言具有自解析性). 相关说明如下. 语句:整个代码由9条语句组成.在程序设计语言中,一条语句(statement)就是一个指令,它可以引发一些动作,比如,定义或修改一个变量.改变控制流等.通过观察你会发现语句与表达

《你不可不知的关系数据库理论》——1.1 什么是数据库

1.1 什么是数据库 数据库被认为是一种电子文件柜,它包含了一些数字化的信息(即数据),这些信息可以被永久保存在某种存储介质上,通常是被保存在磁盘上.用户可以通过管理数据库的软件发出请求(request)或命令(command)来向数据库中插入信息,删除.修改或检索数据库中已经存在的信息,这种管理数据库的软件叫做数据库管理系统(DBMS). 注意:在本书中,术语user的含义将根据上下文的要求理解为应用程序员或者是交互用户1或者是应用程序员和交互用户.实际上,现在这些发给DBMS的用户请求可以采

《你不可不知的关系数据库理论》——1.5 练习

1.5 练习 现在到了该做练习的时候了.当然,在本书中的第1章就进行查找练习是不可能的,下面大多数是复习题.尽管如此,我还是建议你们尽力独自去回答问题,而不要去看后面给出的答案.注意,前两个练习似乎有些不公平,因为我还没有�% 1这里仍然指的是计算机专业人员,而不是一个天才的"终端用户",他可能会合理地忽略掉本书中讨论的大部分内容.2本书的前言中曾提醒读者,在本书中我将用缩写形式"SQL and Relational Theory"代表我的著作SQL and Rel