IT 论文精读 · PAPER 32

A Relational Model of Data(关系模型)

E. F. Codd · IBM San Jose Research · CACM 1970

EN →

这篇论文干了什么?

1970 年,IBM 的一位数学家 Edgar F. Codd 提出了关系模型(relational model)——一句话:把数据统统装进规规矩矩的表格里,一行是一条记录、一列是一个字段。今天你用的几乎每个数据库(MySQL、PostgreSQL、Oracle,还有你银行账户、淘宝订单背后那套东西)都长在这个想法上。它看着平平无奇,却是数据库世界的「牛顿定律」。

先说旧世界的痛

在这篇之前,数据不是摆成表,而是像用绳子把珠子串起来:一条「顾客」记录里,藏着一个指向它第一张订单的物理地址(指针),那张订单又指向下一张……要查「张三的所有订单」,程序得像走迷宫一样,顺着一根根指针一跳一跳地摸过去

真正要命的是:这条摸索路线被写死在了程序里。哪天管理员为了让查询更快,重新排了一下数据、或换了套索引,存储的样子一变——所有依赖老路线的程序全部报废,得推倒重写。数据和程序焊死在了一起。

那个点子

Codd 说:别再用指针把数据焊在一起,改用「表格 + 共享的值」。把数据摊平成一张张干净的表;两张表之间不靠指针连,而靠「共用一个值」来对上号——顾客表里每人有个「顾客号」,订单表里每张单也记下它属于哪个「顾客号」,号码一样,就是同一个人的单。谁跟谁的关系,全写在数据本身的值里,跟它存在硬盘哪个角落、怎么排,一点关系都没有。

它凭什么更好用?

因为关联靠「对值」而不是「跟指针」,查东西就变成了「说清你要什么」,而不是「一步步教它怎么走」。你只需说「订单表里,顾客号等于张三那个号的所有行」,系统自己去把它们凑齐——你根本不用知道数据存在哪、按什么顺序排、有没有索引

于是那个「改存储就得重写程序」的老毛病,从根上没了:你从一开始就没依赖过存储长什么样。管理员想怎么调优、加索引、搬数据,都不碰你的程序。数据这才第一次和程序「离了婚」,各过各的。

它带来了什么

整个数据库工业。SQL 这门「说清你要什么」的查询语言、Oracle、DB2、PostgreSQL、MySQL……全都是这套表格模型的直系后代。半个世纪过去,它依然是世界上绝大多数数据的存放方式。Codd 也因此拿了 1981 年的图灵奖。

一句诚实话:这套办法刚出来时比老指针法慢得多,业界为它值不值吵了整整十年——直到「查询优化器」和硬件都跟上了,它才真正既优雅又跑得动。

一句话记住

把数据摊成规整的表,表与表之间不靠物理指针、而靠共享的值来关联;查询从此变成「说清你要什么」而非「教它怎么一步步走」,数据终于和存储细节脱钩——这就是今天所有关系型数据库和 SQL 的地基。

想看「值关联」「规范化」「关系运算」的结构图和更硬的细节? → 切到精读版