CS PAPERS DEEP-READ · PAPER 32

A Relational Model of Data

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

中文 →

What did this paper do?

In 1970, an IBM mathematician named Edgar F. Codd proposed the relational model. In one line: put all your data into plain, tidy tables—a row is a record, a column is a field. Nearly every database you touch today (MySQL, PostgreSQL, Oracle, and whatever sits behind your bank account and your online orders) is built on this idea. It looks utterly ordinary, yet it is the "Newton's laws" of the database world.

First, the pain of the old world

Before this paper, data wasn't laid out as tables—it was more like beads strung on threads: a "customer" record held a pointer (a physical address) to its first order, that order pointed to the next, and so on. To find "all of Alice's orders," a program had to crawl along those pointers, one hop at a time, like walking a maze.

The killer was this: that crawling route was hard-coded into the programs. The day an administrator reorganized the data or swapped indexes to speed things up, the storage layout changed—and every program that relied on the old route broke and had to be rewritten. Data and programs were welded together.

The idea

Codd said: stop welding data together with pointers; use "tables + shared values" instead. Flatten data into clean tables; two tables are linked not by pointers but by sharing a value—every customer has a "customer id," every order records which "customer id" it belongs to, and matching ids mean the same person's order. What relates to what lives entirely in the data's own values, with nothing to do with where it sits on disk or how it's ordered.

Why is it easier to use?

Because linking happens by matching values rather than following pointers, asking a question becomes "state what you want" instead of "teach it, step by step, how to get there." You just say "all rows in the orders table whose customer id equals Alice's," and the system gathers them for you—you need not know where the data lives, in what order, or whether there's an index.

And so the old curse—"change the storage, rewrite the programs"—is gone at the root: you never depended on what the storage looked like in the first place. Administrators can tune, add indexes, and move data around without touching your programs. Only now do data and programs finally get to live separate lives.

What it led to

The entire database industry. SQL—the "state what you want" query language—plus Oracle, DB2, PostgreSQL, MySQL… all are direct descendants of this table model. Half a century on, it is still how the vast majority of the world's data is stored. Codd won the 1981 Turing Award for it.

One honest note: this approach was much slower than the old pointer method when it first appeared, and the industry argued for a decade over whether it was worth it—until query optimizers and hardware caught up and it became both elegant and fast.

Remember this

Lay data out as tidy tables; link tables not by physical pointers but by shared values. Querying becomes "state what you want" rather than "teach it how to walk there," and data finally decouples from storage details—this is the foundation of every relational database and of SQL.

Want the diagrams for "linking by value," normalization, and relational operations, plus the harder details? → Switch to the deep read