天天看點

《你不可不知的關系資料庫理論》——第14章 SQL與關系模型

你不可不知的關系資料庫理論

在理想與現實之間,往往會有陰影降臨。

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

從前面幾章的介紹可以看出,sql與關系模型不是一回事,或者更具體一點地說,sql被看作是一種具體的關系型語言,但顯然sql在很多方面都無法把想法和潛在的抽象關系模型相對應。實際上,sql要忍受兩方面的過錯,即省略的過錯和代理的過錯,一方面它不能正确支援(或者根本就不支援)關系模型的很多地方,另一方面它所支援的地方又不能與任何關系模型相對應。(當然,在整本書中我隻把注意力局限在這裡,即隻關心sql的核心特征。)省略的一些例子可以很好地支援等價、表類型、關系代數運算符。非關系型特征的例子有空值、重複行、從左到右排序的列等。

本書中我的主要目的是描述和解釋關系模型,而不是sql。但是我認為給出sql的普遍存在的特征(更确切地說,不論好壞,有一點可以堅持,即資料庫專業人員确實需要面對它,利用它處理實際問題)可以為專業人士提供多種方法解決問題,sql的這些方法都違背了抽象模型的一些規定。實際上,我非常相信這樣的專業人士對關系模型本身已經了如指掌,知曉模型和sql之間的差異可以對他們有所幫助,是以本章内容就來講解sql與關系模型之間的差異。