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

简介:

本节书摘来自异步社区出版社《你不可不知的关系数据库理论》一书中的第14章,第14.1节,作者:【美】C.J.Date,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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产品的设计原因,采用这样的规则反而会有些痛苦。当然,实际上它也没有被广泛采用。尽管如此,我还是强烈推荐使用它。

相关实践学习
使用DAS实现数据库SQL优化
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。
相关文章
|
22天前
|
存储 安全 关系型数据库
MySQL数据库约束条件概述及其重要性讨论。
正确地实现并管理好各类紧缩条件将直接影响到企业信息管理水平与服务质量,在当今大数据背景下更显得格外重要;任何设计师都需要深刻理解其原理与运作机晰承担起责任使得所托管资料安全稳固同时又具备良好伸缩灵活度迎合日益复杂商务需求变动.
76 11
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
624 5
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
120 5
|
存储 关系型数据库 MySQL
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
|
存储 关系型数据库 MySQL
数据库期末考试基础——数据库系统概述
数据库期末考试基础——数据库系统概述
121 2
|
SQL 关系型数据库 MySQL
MySQL数据库——锁-概述以及全局锁(介绍、语法、特点)
MySQL数据库——锁-概述以及全局锁(介绍、语法、特点)
260 0
|
存储 关系型数据库 MySQL
MySQL数据库——索引(1)-概述以及B-Tree结构
MySQL数据库——索引(1)-概述以及B-Tree结构
98 0
|
SQL 存储 关系型数据库
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
86 0
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
279 0
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
188 0

热门文章

最新文章