关系模型的实质 --王垠
每当我批评关系式数据库,就会有人说,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 )
其实相当于以下 C 语言的结构数组:
struct student {
char* sid;
char* name;
char* login;
int age;
double gpa;
}