THE 1970S

System R

During 1974, a team of researchers at IBM’s San José laboratory sought to demonstrate that the relational model theorized by Edgar F. Codd four years earlier could work in reality, with real data and real users. This project, named System R, was not merely a technical experiment. It was about building a bridge between the mathematical elegance of the relational model and the harsh constraints of the industrial world.

The team led by W. F. King began with what they called “Phase Zero”, an exploratory period that lasted from 1974 to 1975. The first prototype, limited to a single user, already implemented the foundations of what would become SQL. This initial version relied on the XRM relational access manager developed by Raymond Lorie at IBM’s Cambridge Scientific Center. The researchers discovered that transforming an elegant theory into functional code raised unexpected questions. How to store data efficiently? How to guarantee transaction integrity? How to ensure queries execute within reasonable timeframes?

The real revolution occurred during “Phase One”, between 1976 and 1977. The team designed a two-tier architecture that clearly separated responsibilities. The RSS (Research Storage System) handled everything related to physical storage, locks, and modification logging. Above it, the RDS (Relational Data System) managed permissions and query optimization. This separation was not just engineering elegance: it enabled system maintenance and evolution.

In early 1976, Raymond Lorie proposed the idea of compiling SQL queries instead of interpreting them. Traditionally, database systems analyzed and executed queries on the fly, which limited their performance. System R’s approach transformed each query into optimized machine code. For applications that repeated the same operations thousands of times, the gain was spectacular. For one-off queries, the compilation overhead was largely offset by execution speed.

The automatic query optimizer constituted the system’s brain. It analyzed each request, consulted statistics stored in the system catalog, and chose the most efficient data access strategy. Its algorithm calculated input-output costs and processor time for different approaches. Indexes, in the form of B-trees, guaranteed fast access to large data volumes.

Hierarchical locking addressed concurrent access issues with variable granularity. A user could lock a single record for a specific modification, or an entire table for a maintenance operation. Three isolation levels allowed developers to choose between strict consistency and performance. The most stringent level guaranteed that reading a record multiple times within a transaction always yielded identical results.

Recovery after failure relied on an ingenious mechanism of “shadow pages”. During a modification, the system created a new version of the page at a different disk location, preserving the old one until transaction validation. Periodic checkpoints purged obsolete versions. While this complicated the physical data organization, this approach considerably simplified crash management.

“Phase Two”, from 1978 to 1979, took System R out of the laboratories and installed it with real users. IBM pilot sites and three selected customers tested the system under real conditions. These experiments confirmed the initial intuition: developers gained productivity through the uniformity of the SQL language. Whether writing application code, launching ad-hoc queries, or defining data structures, they used the same syntax.

Testing also revealed the system’s limitations. For simple transactions manipulating little data, using hash tables or direct pointers would have yielded better performance. The shadow page mechanism, despite its advantages for recovery, prevented efficient grouping of related data on disk.

An unexpected phenomenon emerged during load testing. The team called it a “convoy”: when a process holding a highly demanded lock was put into long wait by the scheduler, all other processes became blocked in a chain behind it. The solution required rethinking the lock release protocol to avoid these bottlenecks.

System R transformed the industry permanently. Its architectural innovations—query compilation, automatic optimization based on statistics, hierarchical locking—were adopted by practically all relational systems that followed. In 1981, IBM commercialized SQL/DS, its first relational database product, followed two years later by DB2 for mainframes. Oracle, Ingres, and other vendors developed their own systems, democratizing this technology.

The impact went far beyond the technical. System R proved that a computer system could combine ease of use with internal sophistication. Users manipulated intuitive concepts—tables, rows, columns—without worrying about the complex mechanisms that guaranteed consistency and performance. This separation between logical and physical views became a principle of business computing.

The project validated Edgar F. Codd’s vision on the importance of abstraction in data management. It also established the importance of a rigorous experimental approach in technological development. Rather than settling for elegant theoretical demonstrations, the San José team built a complete system and tested it under real conditions.

Faced with the emergence of NoSQL systems that challenge certain aspects of the relational model, System R’s architectural principles retain their relevance. Declarative query optimization, transaction management, and the separation of logical and physical levels remain benchmarks.