天天看点

《你不可不知的关系数据库理论》——第14章 SQL与关系模型

你不可不知的关系数据库理论

在理想与现实之间,往往会有阴影降临。

——t.s.eliot:the hollow men(1925)

从前面几章的介绍可以看出,sql与关系模型不是一回事,或者更具体一点地说,sql被看作是一种具体的关系型语言,但显然sql在很多方面都无法把想法和潜在的抽象关系模型相对应。实际上,sql要忍受两方面的过错,即省略的过错和代理的过错,一方面它不能正确支持(或者根本就不支持)关系模型的很多地方,另一方面它所支持的地方又不能与任何关系模型相对应。(当然,在整本书中我只把注意力局限在这里,即只关心sql的核心特征。)省略的一些例子可以很好地支持等价、表类型、关系代数运算符。非关系型特征的例子有空值、重复行、从左到右排序的列等。

本书中我的主要目的是描述和解释关系模型,而不是sql。但是我认为给出sql的普遍存在的特征(更确切地说,不论好坏,有一点可以坚持,即数据库专业人员确实需要面对它,利用它处理实际问题)可以为专业人士提供多种方法解决问题,sql的这些方法都违背了抽象模型的一些规定。实际上,我非常相信这样的专业人士对关系模型本身已经了如指掌,知晓模型和sql之间的差异可以对他们有所帮助,因此本章内容就来讲解sql与关系模型之间的差异。