Versions:2009-01-01 2015-12-14 2016-09-26 2017-05-10 2017-10-25 2017-12-03 2017-12-16 2019-07-03 2019-10-31 2020-02-28 2024-04-16

关系模型的实质

每当我批评关系式数据库,就会有人说,SQL和关系式数据库的设计,其实偏离了E.F.Codd最初的关系式理论。关系式理论和关系式模型,本身还是很好的,只不过被人实现的时候搞砸了。如果你看透了本质,就会发现这只是一个托词。关系式数据库的问题是根源性的,这个问题其实源自关系式理论本身,而不只是具体的实现。

人们总是喜欢制造这些概念上的壁垒,用以防止自己的理论受到攻击。把过错推到SQL或者IBM身上,是关系式数据库领域常见的托词,用以掩盖其本质上的空洞和设计上的失误。在下面的讨论里为了方便,我会使用少量SQL来表示关系模型里面对应的概念,但这并不削弱我对关系模型的批评,因为它们表示的是关系式模型里面的核心概念。

关系式模型与数据结构

很多人把关系式理论和数据库独立开来,认为它们是完全不同的领域。而其实,数据结构的理论,可以很容易的解释所有关系式数据库里面的操作。

关系模型的每一个“关系”或者“行”(row),表示的不过是一个普通语言里的“结构”,就像C语言的struct。一个表(table),其实不过是某种结构的数组。举个例子,以下SQL语句构造的数据库表:

CREATE TABLE Students ( sid CHAR(20),
                        name CHAR(20),
                        login CHAR(20),
                        age INTEGER,
                        gpa REAL )