Primer · v1.0 · July 2026

Databases & Data Science

A primer for people who direct the work rather than do it — built to let you evaluate an architecture, interrogate a claim, and tell the difference between a hard problem and an expensively-solved easy one.

Lens: advisor-evaluator. Written to make you dangerous in a room with a CTO, not to make you a database administrator.
Weighting: ~70% databases, ~30% data science — with data modelling treated as the load-bearing layer beneath both.
Sourcing: primary sources only — original papers, standards, and first-hand accounts by named practitioners. Every claim is tagged established plausible inference contested.

Section 1

The one idea

If you retain nothing else, retain this. Every subsequent argument in the field is a variation on it.

A database is not a place where data is kept. Filing cabinets keep data. A database is a machine for answering questions about data without the questioner needing to know how the data is stored. That separation — between the question and the retrieval — is the entire intellectual content of the field, and it is why the discipline exists at all.

Before 1970, it did not exist. The dominant systems were navigational: IBM's IMS (hierarchical) and the CODASYL network model. To get an answer, a programmer wrote code that walked a pointer structure — start at this record, follow this link, then that one. Charles Bachman, who designed the first of these and won the 1973 Turing Award for it, titled his award lecture The Programmer as Navigator, and he meant it admiringly: the programmer steered through the data.

The consequence was brutal and is worth feeling. The access path was baked into the application code. If someone reorganised the storage — added an index, changed the ordering, split a file — every program that touched it broke. Data and the programs that read it were welded together. Asking a question nobody had anticipated meant writing a new program.

Edgar Codd, a mathematician at IBM San Jose, published A Relational Model of Data for Large Shared Data Banks in Communications of the ACM in June 1970. His opening sentence names the target directly:

"Future users of large data banks must be protected from having to know how the data is organized in the machine (the internal representation)." E. F. Codd, CACM 13(6), 1970

The move was to represent all data as relations — mathematical sets of tuples, which is to say tables with no inherent order and no pointers — and to let users state what they wanted as a logical expression, leaving the system to figure out how to get it. This is called physical data independence, and it is the load-bearing idea.

Three things fall out of it, and each one is still generating money and arguments in 2026:

  • Declarative querying. You describe the result, not the route. SELECT is not an instruction; it is a specification.
  • The optimiser. Someone has to convert the specification into an actual route. That someone is a program, and it is the most sophisticated component in the system.
  • Storage independence. You can change the physical layout — add indexes, re-partition, move to different hardware, switch to columnar — without rewriting the questions.

Codd's model was resisted for a decade, largely by people with working navigational systems and performance numbers to defend. The 1974 SIGMOD "Great Debate" between Codd and Bachman is the canonical confrontation. Codd won, and the reason he won is the reason to care: the value of being able to ask an unanticipated question grows without limit, and the cost of the optimiser is paid once by the vendor.

Key points

  • A database's job is question-answering, not storage. Any vendor conversation that stays on storage is skipping the hard part.
  • Physical data independence is the innovation. Separating what you want from how it is fetched is what allows a data asset to outlive the applications built on it.
  • Every "we don't need SQL" movement is a proposal to give this up in exchange for something — usually speed or scale. Sometimes that trade is right. Ask what is being traded, and ask who pays the bill later.
  • When someone tells you the schema is "flexible" because there isn't one, the constraint has not been removed. It has been moved into every application that reads the data, which is exactly where it lived in 1968.

Section 2

How a database actually works

Five mechanisms. Understand these and most production surprises stop being surprising.

A relational database is not one thing; it is a stack of five machines that mostly ignore each other. Nearly every performance mystery, outage, and vendor argument you will encounter lives in one of these five, and knowing which one is most of the diagnostic work.

THE PATH OF A QUERY Each box is a distinct machine with its own failure modes. 1 · PARSER Is this valid SQL? Do these tables exist? 2 · QUERY OPTIMISER Of the millions of ways to get this, which is cheapest? 3 · EXECUTOR Run the chosen plan, operator by operator. 4 · ACCESS METHODS B-tree seek, or scan every page in the table. 5 · STORAGE Pages on disk, buffered in RAM. CROSS-CUTTING · TRANSACTION MANAGER (ACID) Decides what each concurrent user is allowed to see, and guarantees that a half-finished change is never visible to anyone. CROSS-CUTTING · WRITE-AHEAD LOG (DURABILITY) Every change is written to an append-only log before it touches the data pages. This is why a database survives losing power mid-write. statistics — row counts and value distributions — flow back to the optimiser WHERE THINGS GO WRONG Box 2 — stale statistics ⇒ a catastrophically bad plan. The query that ran in 40 ms yesterday takes 4 minutes today, with no code change. Box 4 — no usable index ⇒ full table scan. Fine at 10,000 rows, fatal at 100 million. The most common cause of "it worked in testing". Transactions — the isolation level is too weak ⇒ silently wrong answers under concurrency. No error is raised. Ever. Log — the log is the write bottleneck. Nearly all "our database can't take the write load" problems are here.
Figure 1. The five machines. When someone says "the database is slow", the useful first question is which box — the answers, the fixes, and the costs are completely different in each.

2.1 The optimiser, and why it is the source of most mystery

In 1979 Patricia Selinger and colleagues at IBM published Access Path Selection in a Relational Database Management System — the System R optimiser paper. It is arguably the most practically consequential systems paper of the era, because it is what made Codd's idea viable rather than merely elegant.

The problem it solved: a query joining five tables has hundreds of possible execution orders, and the difference between the best and worst is routinely a factor of thousands. Selinger's answer was a cost-based optimiser — estimate the cost of candidate plans using statistics about the data, and pick the cheapest. Dynamic programming prunes the search.

Now the consequence, which is the thing to actually carry with you. The optimiser's decisions depend on estimates, and the estimates are frequently wrong. It guesses how many rows a filter will return. If the guess is off by 100×, the plan is wrong, and the query does not fail — it just becomes slow, sometimes catastrophically, sometimes overnight, with no code change. Stonebraker and Pavlo, reviewing fifty years of the field in 2024, are blunt: "The optimizer remains the hardest part of building a DBMS."

This is why databases have a reputation for unpredictability, and why it is not fixable by buying a bigger machine. It is intrinsic to the bargain of declarative querying: you handed over control of the route in exchange for not having to think about it, and occasionally the system chooses badly on your behalf.

What a plan looks like

You do not need to write these. You need to be able to look at one and see the shape of the problem, which is a genuinely learnable skill and one of the highest-leverage things on this page.

-- The question, stated declaratively. Note that nothing here says HOW.
SELECT c.country, COUNT(*) AS orders, SUM(o.total) AS revenue
FROM   orders o
JOIN   customers c ON c.id = o.customer_id
WHERE  o.placed_at >= '2026-01-01'
GROUP BY c.country;

-- What the optimiser decided to actually do (Postgres, abbreviated):
HashAggregate  (cost=18422 rows=41)
  Group Key: c.country
  -> Hash Join  (cost=17903 rows=284119)        ← join strategy: hash
       Hash Cond: (o.customer_id = c.id)
       -> Index Scan using orders_placed_at_idx on orders o
            Index Cond: (placed_at >= '2026-01-01')   ← index used. good.
            rows=284119  actual rows=1904322          ← ESTIMATE OFF BY 6.7×
       -> Hash  (rows=51204)
            -> Seq Scan on customers c          ← whole table into RAM

Three things are legible here without any expertise. The filter on placed_at used an index, which is good. The customers table was read in full and hashed into memory, which is fine at 51,000 rows and would not be at 51 million. And the estimate was wrong by nearly seven-fold — the optimiser planned for 284,000 rows and got 1.9 million. That gap is the thing that will eventually bite: at some point the hash table no longer fits in memory, it spills to disk, and the query time goes up by an order of magnitude with no warning.

2.2 Indexes: why the data structure decides which questions are cheap

Rudolf Bayer and Edward McCreight published the B-tree in 1972 (Organization and Maintenance of Large Ordered Indices, Acta Informatica). Fifty-four years later it is still the default index in essentially every relational database, which is unusual longevity for anything in computing and worth a moment's respect.

The mechanism, in one paragraph: a B-tree keeps keys in sorted order in a shallow, wide tree. Finding a value takes a number of steps proportional to the logarithm of the table size — so going from a million rows to a billion rows adds roughly two or three disk reads, not a thousand times more work. That logarithm is the whole trick.

WHY SORTED ORDER DECIDES EVERYTHING ≤ Jones | ≤ Petersen | > Andersen … Jones Jørgensen … Petersen Rasmussen … Østergaard LEAF LEVEL — every key, in sorted order, linked left-to-right FASTequality (name = 'Jones'), range (BETWEEN 'A' AND 'K'), prefix (LIKE 'Jon%'), sorted output (ORDER BY name is free — already sorted), min/max. USELESSsuffix (LIKE '%sen'): sorting by the first letter tells you nothing about the last. Likewise any function applied to the column LOWER(name) = 'jones' cannot use the index, because the index stores 'Jones'. COSTS — every INSERT, UPDATE and DELETE must also update every index on the table. Indexes are a read/write trade, never free. A table with twelve indexes does not have a read problem; it has a write problem.
Figure 2. An index is not "a thing that makes queries fast." It is a particular ordering, and it accelerates only the questions that ordering happens to answer. This is the entire content of index design, and it generalises: every storage structure in every database, including the vector indexes of 2026, is a bet about which questions will be asked.

2.3 Transactions: the guarantee, and the fine print

Jim Gray's 1981 paper The Transaction Concept: Virtues and Limitations formalised the idea; Theo Härder and Andreas Reuter coined the acronym ACID in 1983. It means:

  • Atomicity — all of a change happens, or none of it. No half-transfers.
  • Consistency — declared rules (constraints) hold before and after.
  • Isolation — concurrent transactions do not corrupt each other's view.
  • Durability — once committed, it survives a crash.

Atomicity and durability are close to absolute in mature systems. Isolation is where the honesty lives, and where you should push.

Perfect isolation — serializable, meaning the result is identical to running the transactions one at a time — is expensive. So databases offer weaker levels that are faster. In 1995 Hal Berenson, Phil Bernstein, Jim Gray, Jim Melton, Elizabeth O'Neil and Patrick O'Neil published A Critique of ANSI SQL Isolation Levels, showing that the standard's definitions were ambiguous and did not describe what real systems actually did.

The practical fact worth carrying: most production databases do not run at serializable isolation by default, and most engineers cannot tell you which level theirs uses. PostgreSQL and SQL Server default to Read Committed; Oracle and MySQL/InnoDB default to variants of Read Committed and Repeatable Read respectively. Under weaker levels, certain concurrent patterns produce results that could not have occurred in any serial order. The system does not raise an error. It returns a wrong answer. This is the most under-appreciated risk in transactional systems, and it is a legitimate thing for a non-technical advisor to ask about: "What isolation level do we run at, and which of our workflows would break under it?" Silence in response to that question is informative.

2.4 The write-ahead log, and why writes are the hard side

Durability is achieved by writing the intended change to an append-only log before modifying the data itself. If the machine dies, the log is replayed on restart. The canonical treatment is ARIES (C. Mohan et al., IBM, ACM TODS 1992).

inference The advisory consequence: the log is a serialised bottleneck, and it is why read scaling and write scaling are completely different problems. Adding read capacity is easy — copy the data, serve from replicas. Adding write capacity means either a bigger single machine, or splitting the data across machines and giving up the ability to transact across the split. Almost every distributed-database war story is a version of that second sentence.

Key points

  • Five machines, five failure modes. Parser, optimiser, executor, access methods, storage — plus transactions and the log cutting across all of them. Diagnose by localising.
  • The optimiser guesses, and its guesses degrade as data changes. "It got slow and we didn't change anything" is not a mystery; it is the normal behaviour of a cost-based optimiser meeting new data.
  • An index is a bet on which questions get asked. It speeds up the questions matching its ordering, slows down every write, and does nothing for the rest.
  • Isolation is the soft part of ACID. Ask what level you run at. Wrong answers under concurrency arrive silently.
  • Reads scale easily; writes do not. Any vendor claim of unlimited scale is a claim about reads unless it explicitly says otherwise.

Section 3

Data modelling — the load-bearing layer

The discipline underneath both database engineering and data science. It is where most expensive failures are actually born, and it is the one nobody owns.

You asked whether databases become easy if you are a good data scientist. The honest answer is that the question has the layering wrong, and this section is why.

Between "we have a database" and "we can answer questions" sits a decision nobody thinks of as technical: what are the things, what is true about them, and at what level of detail do we record it? This is data modelling. It is not statistics and it is not engineering. It is closer to ontology, and it is done — well or badly, explicitly or by accident — before either discipline can do anything useful.

3.1 Grain: the single most consequential decision

Grain means: what does one row represent? It sounds trivial. It is not, and getting it wrong is unrecoverable without a rebuild.

Consider a consulting firm recording client work. One row per engagement? Per invoice? Per consultant-day? Per timesheet entry? Each choice makes an entire class of question answerable and another class permanently unanswerable. If you record one row per invoice, you cannot ever ask about utilisation by consultant, because the information was never captured — no amount of analytical sophistication recovers it. The data scientist arrives two years later, is asked about utilisation, and produces an estimate. The estimate is presented with confidence intervals. The confidence intervals are meaningless, because the uncertainty is not statistical — it is that the quantity was never measured.

The advisory heuristic: when a client says "we have all the data but we can't get answers out of it," the failure is at grain roughly as often as it is at tooling. The tell is that the proposed fix is always a new tool. The correct diagnostic question is: "what does one row represent, and when was that decided?" If nobody in the room can answer, you have found the problem, and no BI platform will fix it.

3.2 Normalisation: what it actually prevents

Codd's normal forms (1970–74) are widely taught as tidiness rules. They are not. They are a defence against a specific class of corruption: update anomalies — states in which the database can hold two contradictory answers to the same question.

The underlying concept is the functional dependency: attribute B is functionally dependent on A if knowing A determines B. Knowing an employee ID determines their date of birth. Normalisation says, roughly: every fact should be stored in exactly one place, determined by the key of the table it lives in. Third normal form is often summarised as — every non-key attribute depends on the key, the whole key, and nothing but the key.

-- UNNORMALISED. One row per order line; client data repeated on every line.
order_id | line | product   | client_name    | client_city | client_vat
---------+------+-----------+----------------+-------------+-------------
   4471  |   1  | Advisory  | Nordisk A/S    | Aarhus      | DK18475902
   4471  |   2  | Workshop  | Nordisk A/S    | Aarhus      | DK18475902
   4488  |   1  | Advisory  | Nordisk AS     | Århus       | DK18475902
                              ^^^^^^^^^^^     ^^^^^  same client — which is true?

-- The three anomalies this creates:
--   UPDATE: client moves city — you must change every row. Miss one and the
--           database holds two contradictory cities, neither flagged wrong.
--   INSERT: you cannot record a new client until they place an order. The fact
--           "this client exists" has nowhere to live.
--   DELETE: deleting the last order for a client erases the client entirely.

-- NORMALISED. Each fact stated once, in the table whose key determines it.
CREATE TABLE clients (
  client_id   INT PRIMARY KEY,        ← the determinant
  name        TEXT NOT NULL,
  city        TEXT,
  vat_number  TEXT UNIQUE          ← one client per VAT number, enforced
);
CREATE TABLE order_lines (
  order_id    INT,
  line_no     INT,
  product     TEXT NOT NULL,
  client_id   INT REFERENCES clients(client_id),   ← the DB refuses orphan rows
  PRIMARY KEY (order_id, line_no)
);

Read what the normalised version buys, because it is not aesthetics. UNIQUE on the VAT number means the database will now refuse to create a duplicate client. REFERENCES means it will refuse to record an order against a client that does not exist. These are business rules, enforced by the engine, for every application that ever touches this data — including ones written after everyone involved has left the company.

inference This is the part that matters for your advisory work. A constraint in the database is a rule the organisation cannot accidentally break. A rule enforced in application code is a rule that holds until someone writes a second application. Most "our data quality is terrible" situations are organisations that chose the second option, usually without knowing they were choosing.

3.3 The counter-argument, stated properly

Normalisation has a real cost: answering a question now requires joins, and joins are work. The standard response is denormalisation — deliberately duplicating data to avoid joins. Every NoSQL system of the 2010s made this its headline pitch.

Stonebraker and Pavlo's 2024 review dismantles the pitch in three clauses that are worth memorising, because you will hear the pitch again:

"The problems with denormalization/prejoining is an old topic that dates back to the 1970s: (1) if the join is not one-to-many, then there will be duplicated data, (2) prejoins are not necessarily faster than joins, and (3) there is no data independence." M. Stonebraker & A. Pavlo, What Goes Around Comes Around… And Around…, SIGMOD Record, 2024

Point (3) is the deep one and it connects straight back to Section 1. Pre-joining bakes an access path into the stored layout — which is precisely what Codd's 1970 paper set out to abolish. You have re-invented the navigational database, with better hardware.

established That said, denormalisation is genuinely correct in one setting, and this is not a concession — it is the industry's settled position. In analytical systems, where data is written once and read many times and nothing is being updated in place, the update anomalies cannot occur. This is why the analytical world uses a deliberately denormalised design.

3.4 The star schema, and why it won

Two architectures fought over enterprise data warehousing in the 1990s. Bill Inmon (Building the Data Warehouse, 1992) argued for a normalised, enterprise-wide warehouse as the single source of truth, with departmental marts derived from it. Ralph Kimball (The Data Warehouse Toolkit, 1996) argued for dimensional modelling: build conformed subject-area marts directly, organised as facts surrounded by dimensions.

THE STAR SCHEMA Facts are what happened (many rows, numeric, immutable). Dimensions are the context you slice by (few rows, descriptive). FACT · engagement_days date_key → client_key → consultant_key → service_key → hours, billed_amount grain: one row per consultant, per client, per day DIM · date day, week, month, quarter, fiscal_year, is_holiday DIM · client name, industry, size_band, country, account_owner DIM · consultant name, grade, practice, hire_date, cost_rate DIM · service offering, delivery_mode, list_rate Why it won: every business question has the same shape — a number from the fact table, sliced by dimension attributes. "Revenue by industry by quarter" and "utilisation by grade by practice" are the same query with different columns. That uniformity is what makes self-service BI possible at all — and it is also what an LLM can learn.
Figure 3. Kimball's dimensional model. Deliberately denormalised, and correct here for the reason given above: analytical data is written once and never updated in place, so the anomalies normalisation defends against cannot arise. Note the italic line in the centre — the grain statement. A dimensional model without an explicit grain statement is not a model; it is a hope.

established Kimball's dimensional approach won the practical argument, and the star schema remains the default shape of analytical data in 2026 — it survived Hadoop, the death of Hadoop, the cloud warehouse, and the lakehouse essentially unchanged. inference My read on why: Inmon's design optimises for correctness-at-the-enterprise-level, which requires enterprise-level agreement before delivering value. Kimball's optimises for delivering one usable subject area quickly. Organisations reliably choose the thing that ships, and the enterprise model that requires universal agreement before it produces anything is a model that never produces anything.

3.5 Where the meaning goes to die

Two mechanisms silently destroy the meaning of data over time. Both are modelling problems, and both are invisible in any dashboard.

Slowly changing dimensions. A client moves from "mid-market" to "enterprise". If you overwrite the attribute, every historical report changes retroactively — last year's revenue mix shifts because a category label changed today. If you version the row instead (Kimball's "Type 2"), history is preserved but every query must now specify as of when. Most organisations overwrite, because it is easier, and then are puzzled that the same report run twice gives different answers. established This is a documented, named, solved problem that is nonetheless still one of the most common causes of untrustworthy corporate reporting.

Semantic drift. The column is called active_customer. In 2019 it meant "purchased in the last 12 months." In 2022 someone changed it to "has a live contract." The column name did not change. No documentation records the change. Every trend line crossing that boundary is now measuring two different things and presenting them as one. inference I would argue this is the single most under-diagnosed cause of bad executive decisions from good-looking data, precisely because it is invisible: the chart is smooth, the pipeline is green, the number is wrong.

Key points

  • Grain is the decision that cannot be undone. What one row represents determines which questions are answerable forever. Ask it first, ask it of every dataset.
  • Normalisation prevents contradiction, not untidiness. Constraints in the database are organisational rules that cannot be accidentally broken; the same rule in application code lasts until the second application.
  • Denormalise for analytics, normalise for operations. The split is not fashion — it follows from whether data is updated in place.
  • Kimball's star schema is still the default analytical shape thirty years on, and is also the shape LLMs handle best. That is not a coincidence: it is uniform and self-describing.
  • The failure you will meet most often is semantic, not technical. A definition changed and the column name didn't. There is no tool that detects this — only documentation discipline and someone who remembers.
  • Modelling failures masquerade as analytics failures. When the answer looks wrong, check what was measured before you check how it was analysed.

Section 4

Six decades, six arguments

The history is not a march of progress. It is one argument, restaged roughly every twelve years, with better hardware each time.

There is a reason to learn this history rather than just the current state, and it is not cultural literacy. The field has a documented pattern: a new workload appears, someone declares the relational model obsolete, builds a system that abandons it, discovers over five to eight years why the abandoned parts existed, and re-adds them. Michael Stonebraker and Andrew Pavlo have now written this paper twice — in 2005 and again in 2024 — and the second one is largely a list of which predictions from the first came true.

"We predict that what goes around with databases will continue to come around in upcoming decades. … We caution developers to learn from history. In other words, stand on the shoulders of those who came before and not on their toes." Stonebraker & Pavlo, SIGMOD Record 53(2), 2024

inference For an advisor this is directly monetisable. If you can recognise which stage of the cycle a proposal sits in, you can price its risk without understanding its implementation. A technology in year two of the cycle is being sold on the things it removed; the same technology in year seven is being sold on having added them back.

SIX ERAS — AND WHAT EACH ONE WAS ARGUING ABOUT Bars show each era's span on the axis. Eras overlap because adoption lags invention by roughly a decade. Codd '70 Selinger '79 ACID '83 MapReduce '04 Dynamo '07 Snowflake '16 LLM agents '24 196519751985 1995200520152026 1 · NAVIGATIONAL 1960s–1970s IMS · CODASYL · IDMS Data is a pointer graph, and the programmer walks it record by record. Cost: application code is welded to the storage layout. Reorganise the data and every program breaks. 2 · RELATIONAL 1970–1992 System R · INGRES · Oracle · DB2 · the SQL standard Say what you want, not how to get it. A cost-based optimiser works out the route. Win: data outlives the applications built on it, and unanticipated questions become answerable. 3 · WAREHOUSE + OO 1990–2003 Inmon · Kimball · OLAP cubes · object databases Split reporting from operations. Dimensional modelling wins the warehouse argument. Object databases try to replace SQL and fail commercially; their good ideas are absorbed instead. 4 · WEB SCALE / NoSQL 2003–2013 GFS · MapReduce · Bigtable · Dynamo · Hadoop · Cassandra · MongoDB Throw out schemas, joins and transactions; buy horizontal scale and failure tolerance. Cost: correctness moves into application code, undocumented and unenforced. 5 · SQL RETURNS / CLOUD 2012–2020 Spanner · Snowflake · Spark · Redshift · BigQuery Storage separates from compute. Columnar storage wins analytics outright. Every NoSQL system adds SQL back. Hadoop dies. The relational parts return. 6 · LAKEHOUSE + AI 2020–2026 Iceberg · Delta · DuckDB · pgvector · semantic layers · agents Open table formats break lock-in on storage; specialised stores are absorbed as extensions. The new consumer of data is a language model, and it needs written meaning, not just tables.
Figure 4. The eras overlap because adoption lags invention by roughly a decade — IMS installations outlived the arguments against them by thirty years. Note the shape: eras 2 and 5 are the relational model consolidating; eras 4 and, arguably, parts of 6 are the field trying to leave and being pulled back.

4.1 What actually happened in the NoSQL decade

This is the era most worth understanding properly, because it is the one whose vocabulary is still in circulation and whose lessons are most frequently mis-stated.

Between 2003 and 2007 Google and Amazon published a run of papers describing systems built for problems almost nobody else had. Google's The Google File System (2003), MapReduce (2004) and Bigtable (2006); Amazon's Dynamo (2007). These were honest engineering documents about running at a scale where individual machine failure is constant rather than exceptional.

The industry read them as a general recommendation. It was not. Amazon's Dynamo paper is explicit that it was built for the shopping cart — a workload where losing a write is worse than briefly showing an inconsistent state, and where there are no joins because there is nothing to join. inference The mass adoption that followed was, in most cases, organisations with a few million rows adopting an architecture designed for constant hardware failure at planetary scale, and paying its costs without needing its benefits.

The costs were real and specific:

  • "Schemaless" moved the schema, it did not remove it. The structure still exists; it now lives implicitly in every application that reads the data, undocumented and unenforced. Five years later, nobody knows which of the seven shapes in the collection are still valid.
  • No joins meant application-side joins. Fetch, fetch again, combine in application code — which is a hand-written nested-loop join without an optimiser, over the network.
  • Eventual consistency is a programming model, not a setting. It requires the application to handle stale reads and conflicting writes explicitly. Most did not; they simply had rare, undiagnosable bugs.

established The resolution is documented and not seriously disputed: by the end of the 2010s essentially every major NoSQL system had added a SQL or SQL-like query interface — DynamoDB (PartiQL), Cassandra (CQL), Couchbase (N1QL), MongoDB (an aggregation framework plus later SQL support). Hadoop, the era's flagship, is characterised by Stonebraker and Pavlo as having "died about a decade ago." The relational parts came back because the reasons for them had not gone away.

The mis-stated lesson. It is not "NoSQL was wrong." Key-value and document stores are the right tool for genuine cases — session state, caches, high-write telemetry, deeply nested documents with no cross-document queries. The lesson is that the trade was almost always made without identifying what was being traded, because it was framed as a modernisation rather than a trade. That framing is the thing to watch for. It is being used again in 2026, about different technology.

4.2 The one genuinely new thing: separating storage from compute

Not everything is a restaging. The cloud data warehouse — Snowflake's architecture paper is the canonical description (Dageville et al., SIGMOD 2016) — made a change that has no clean historical precedent in its consequences.

Traditional databases couple storage and compute in one machine: to store more you buy a bigger box, and the box's CPU sits idle most of the time. Snowflake put the data in cloud object storage (S3) and made compute clusters ephemeral things you spin up against it. The effects:

  • Storage and compute scale independently. Ten times the data does not require ten times the CPU.
  • Multiple isolated compute clusters read the same data — finance's heavy month-end job cannot slow down the product team.
  • Cost becomes a variable, per-second operating expense rather than a capital purchase.

inference That last point is the one with organisational consequences, and it is under-discussed. When query cost is metered per second, a badly-written query stops being a technical annoyance and becomes a line item. Several of the "our cloud data bill exploded" stories you will encounter are not procurement failures — they are the direct result of removing the natural ceiling that owning a fixed-size machine used to provide.

Stonebraker and Pavlo note the pattern-recognition point here too: this is the return of the 1970s shared-disk architecture, which failed at the time and works now because networks got fast enough. Their prediction is that shared-disk now dominates and shared-nothing is unlikely to return. That is a real, falsifiable, non-obvious claim from people with standing.

Key points

  • The field runs a ~12-year cycle: new workload → abandon relational → rediscover why it existed → re-add it. Knowing where a proposal sits in the cycle prices its risk.
  • Google and Amazon's papers were honest; the industry's reading of them was not. They described solutions to problems most companies did not have.
  • "Schemaless" relocates the schema into application code. That is a cost, and it is paid later, by someone else.
  • Separating storage from compute is the real structural innovation of the cloud era — and it converted database capacity from a capital constraint into a metered variable cost, with all the governance implications that implies.
  • Test any "we've moved beyond X" pitch against the cycle. Ask what was removed, who now performs that function, and what the plan is for when it needs to come back.

Section 5

The types, and what each is really for

Category names are marketing. The real taxonomy has two axes: what shape the data is stored in, and what the system gives up.

Vendors present the landscape as a dozen distinct product categories. It is more useful to see it as a small number of engineering decisions, recombined. The two that explain most behaviour are row-oriented versus column-oriented storage, and single-node versus distributed. Almost everything else is a feature, not an architecture — a point Stonebraker and Pavlo make sharply about vector databases in particular.

5.1 Rows versus columns — the split that defines the industry

This is the most useful single distinction in the field and it is entirely graspable.

THE SAME TABLE, TWO PHYSICAL LAYOUTS The logical table is identical. What differs is what sits next to what on disk — and that decides which questions are cheap. ROW STORE — one customer's whole record is contiguous 1001 · Nordisk · Aarhus · 48200 · 2019 1002 · Vestbo · Randers · 91400 · 2021 1003 · Bording · Kolding · 12750 · 2018 1004 · Aalund · Aalborg · 63900 · 2022 Cheap: "show me everything about customer 1002" — one read, one place on disk. Expensive: "average revenue across 40 million customers" — all five columns of every row must be read to use one of them. COLUMN STORE — each attribute is contiguous across all customers id: 1001 · 1002 · 1003 · 1004 … name: Nordisk · Vestbo · Bording … city: Aarhus · Randers · Kolding … revenue: 48200 · 91400 · 12750 … Three compounding consequences: ① Only the columns you asked for are read from disk. A query touching 2 of 60 columns reads ~3% of the data. ② Adjacent values share a type and often repeat, so compression is dramatic — 5–20× is routine. Less data on disk means less to read. ③ Uniform columns can be processed a batch at a time by the CPU (vectorised execution) rather than row by row. Cheap: aggregate scans over hundreds of millions of rows. Expensive: updating one customer — the change touches five places on disk. This is the OLTP / OLAP split. It is not a product-category distinction — it is a physics one. No system is optimal at both, which is why nearly every organisation past a certain size ends up running two.
Figure 5. Column stores were prototyped in academia (C-Store, Stonebraker et al., VLDB 2005) and are now universal in analytics. Stonebraker and Pavlo's 2024 assessment: "over the last two decades, all vendors active in the data warehouse market have converted their offerings from a row store to a column store." When someone proposes running the annual analysis directly against the production database, this figure is the reason not to.

5.2 The categories, honestly described

CategoryMechanismGenuinely right whenWrong whenStatus, mid-2026
Relational OLTP
Postgres, MySQL, SQL Server, Oracle
Row store, B-tree indexes, cost-based optimiser, full ACID transactions. Almost always, for anything that records what a business did. The default, and the burden of proof is on alternatives. Analytical scans over hundreds of millions of rows; write volumes beyond one large machine. dominant Postgres has become the sector's centre of gravity.
Analytical / columnar
Snowflake, BigQuery, Databricks, ClickHouse, Redshift
Column store, compression, vectorised execution, storage separated from compute. Aggregations over large history; many concurrent analysts; BI and reporting. Single-row lookups; frequent in-place updates; anything needing sub-10 ms latency. dominant The analytical default.
Embedded / in-process
SQLite, DuckDB
A library inside your program — no server, no network. SQLite row-oriented; DuckDB columnar. Local analysis; single-machine data up to hundreds of GB; anything on a laptop; embedded in an application. Many concurrent writers across machines. rising fast DuckDB has quietly eaten a large share of "we need a cluster" work.
Key-value
Redis, DynamoDB, Aerospike
A distributed hash map. Get and put by key; nothing else. Caching, sessions, rate limits, feature flags — where the access pattern is genuinely one key at a time. Anything you will later want to query by a second attribute. This always arrives. stable niche Correct and durable within its niche.
Document
MongoDB, Couchbase, Firestore
Stores JSON-ish documents; secondary indexes; flexible per-document structure. Genuinely heterogeneous nested content read as a whole — CMS, product catalogues, event payloads. Data with real relationships. Cross-document consistency. Anything reported on. converging Adding SQL and transactions; relational systems added JSON. The categories are merging.
Wide-column
Cassandra, HBase, Bigtable
Partitioned, sorted rows across a cluster; tuneable consistency; very high write throughput. Enormous write volumes with a known, fixed access pattern — telemetry, time-ordered event logs. Ad-hoc querying. The access pattern must be decided before the schema, and cannot change cheaply. niche Stonebraker & Pavlo: "Without Google, this paper would not be talking about this category."
Search
Elasticsearch, OpenSearch, Solr
Inverted index — term → list of documents containing it. Relevance ranking (BM25). Full-text search over large corpora; log exploration; faceted navigation. Used as a system of record. It is not transactional and is not designed to be. stable Though relational full-text search now covers many cases.
Time-series
TimescaleDB, InfluxDB, Prometheus
Columnar storage partitioned by time, with time-aware compression and downsampling. Sensor, metric and monitoring data at high ingest rates with time-window queries. The volume is modest — a partitioned relational table handles a great deal more than people expect. stable niche Increasingly delivered as a Postgres extension rather than a separate product.
Graph
Neo4j, TigerGraph
Nodes and edges as first-class citizens; traversal rather than join. Variable-depth traversal is the core workload — fraud rings, ownership chains, network topology. The graph is a modest part of the workload. Relational systems simulate graphs well. contested SQL:2023 added property-graph queries. Stonebraker & Pavlo report SQL/PGQ in DuckDB outperforming a leading graph DBMS by up to 10×, and predict a small market.
Vector
pgvector, Pinecone, Qdrant, Weaviate
Approximate nearest-neighbour indexes (HNSW, IVF) over embedding vectors — "find things semantically near this." Semantic retrieval, recommendation, RAG over documents. Treated as a separate system when your relational database has the extension and your corpus is under a few tens of millions of vectors. absorbing Stonebraker & Pavlo: such indexes are "a feature, not the foundation of a new system architecture."
Distributed SQL
Spanner, CockroachDB, TiDB, YugabyteDB
Data sharded across nodes with consensus replication (Paxos/Raft) preserving ACID transactions across shards. You genuinely need both global scale and real transactions, and can pay the latency cost of cross-node consensus. You do not. One large relational instance with replicas covers the overwhelming majority of businesses. slower than predicted Stonebraker & Pavlo attribute the muted uptake to existing systems being "good enough for the time."
Lakehouse
Iceberg, Delta Lake, Hudi + a catalog
Parquet files in object storage plus a metadata layer that adds tables, schema evolution, and transactions on top. Large volumes, several engines needing the same data, an explicit goal of avoiding storage lock-in. Under a few terabytes. The operational complexity is real and buys nothing at that size. consolidating Iceberg has effectively become the standard; Delta and Iceberg converged in 2026.
Hierarchical / network
IMS, IDMS, CODASYL
Navigational pointer structures. Never, for new work. legacy Still running core banking and insurance. Migrations remain some of the most expensive projects in enterprise IT.
Object-oriented, XML native
ObjectStore, MarkLogic-era XML DBs
Persist application objects / XML documents directly. Never, for new work. obsolete Both lost decisively. Their good ideas were absorbed into relational type systems.

Key points

  • Row versus column is the split that actually predicts behaviour. If you learn one thing from this section, learn to ask which one you are looking at.
  • The categories are converging, not proliferating. Document stores added SQL; relational systems added JSON, vectors, full-text, time-series and graph queries. The 2016 diagram of "the modern data stack" has more boxes than the 2026 one needs.
  • "It's a feature, not an architecture" is the most useful sentence for evaluating any new database category. Apply it to vectors, and be ready to apply it to whatever is next.
  • Postgres is the correct default for most mid-size organisations, and the burden of proof sits with anyone proposing something else. The counter-argument is real and given in §7.

Section 6

Possibilities and hard limits

Some constraints are engineering problems that money solves. Others are theorems. Knowing which is which is most of the value of this section.

6.1 The theorem: you cannot have everything during a network failure

Eric Brewer proposed the CAP conjecture in a 2000 keynote; Seth Gilbert and Nancy Lynch proved a formalised version in 2002 (SIGACT News 33(2)). The claim, stated precisely, is narrower than the way it is usually quoted:

When a network partition occurs — some nodes cannot talk to others — a distributed system must choose between remaining available (answer, possibly with stale data) and remaining consistent (refuse to answer rather than risk being wrong). You cannot have both, and this is a proof, not an engineering limitation. No vendor will ever solve it.

What CAP does not say, and where nearly all popular usage goes wrong: it says nothing about normal operation. "CP" and "AP" describe behaviour during a partition only. Daniel Abadi's PACELC formulation (2012) is the more honest frame: if there is a Partition, choose Availability or Consistency; Else — in normal operation — choose Latency or Consistency. The second half matters far more day to day, because partitions are rare and the latency-versus-consistency trade is paid on every single request. Someone who cites CAP but not PACELC has read the summary, not the argument.

6.2 The physics: latency numbers worth memorising

These are order-of-magnitude figures, stable for a decade, and they explain more architectural decisions than any vendor document.

LATENCY, LOGARITHMIC — EACH STEP RIGHT IS 10× 1 ns100 ns10 µs 1 ms100 ms10 s CPU cache read ~1 ns Main memory (RAM) ~100 ns SSD random read ~100 µs — 1,000× slower than RAM Network, same datacentre ~0.5 ms round trip Spinning disk seek ~10 ms Copenhagen → Virginia ~90 ms — bounded by the speed of light Cross-region consensus ~150–300 ms per transaction commit Read the gaps, not the bars. RAM to SSD is 1,000×. Local to intercontinental is ~200×. This is why caching exists, why "replicate it globally" is expensive rather than free, and why a globally-consistent database is slower than a local one. Money does not change the speed of light.
Figure 6. Figures are conventional orders of magnitude in the systems literature (the lineage runs back to Jeff Dean's widely-circulated "numbers everyone should know"); exact values vary by hardware. The ratios are the point, and the ratios are stable.

6.3 The scaling ladder

Each rung costs more in complexity than the one before, and most organisations climb further than they need to. inference The most common architectural error I would expect you to encounter in mid-size companies is not being on too low a rung — it is being on rung 4 or 5 with a workload that rung 2 handles comfortably.

  1. One machine, bigger. Unfashionable and frequently correct. A current commodity server handles workloads that required a cluster in 2012. Complexity cost: nearly zero.
  2. Read replicas. Copies serving reads. Cheap and effective, because most workloads are read-heavy. Cost: replicas lag, so reads may be slightly stale — which is fine until someone writes then immediately reads and gets their own old data.
  3. Caching. Redis or similar in front. Big win, and introduces the second-hardest problem in computing: knowing when the cached copy is wrong.
  4. Splitting workloads. Operational database plus a separate analytical one, fed by a pipeline. This is where most mid-size companies correctly land. Cost: two systems, a pipeline, and a permanent question about which numbers are authoritative.
  5. Sharding / distributed SQL. Data split across machines by key. Real horizontal write scale. Cost: cross-shard transactions and cross-shard joins become slow or impossible, and rebalancing is a project.
  6. Multi-region. Geographic distribution. Cost: the speed of light, permanently, on every consistent write.

6.4 What databases genuinely cannot do

  • Tell you whether the data is true. Constraints enforce internal consistency, never correspondence with reality. A database will faithfully store a decade of a mis-calibrated sensor.
  • Preserve meaning across a definition change. §3.5. No system detects this.
  • Give strong consistency and low latency across continents. Theorem plus physics.
  • Make an unrecorded fact recoverable. If the grain was wrong, the information is gone.
  • Answer a question nobody has defined. "Active customer" has no technical meaning. The organisation has to decide, and usually has not.

Key points

  • CAP is a theorem about partitions only. PACELC is the frame that describes every ordinary day: latency or consistency, on every request.
  • Memorise the latency ratios. RAM→SSD is ~1,000×; local→intercontinental is ~200×. They explain most architecture, and they are not negotiable.
  • Climb the scaling ladder reluctantly. One large machine plus replicas plus a separate analytical store covers the overwhelming majority of mid-size companies.
  • The limits that will actually hurt a client are semantic, not technical. Unrecorded facts, changed definitions, undefined terms. None have a product solution.

Section 7

Choosing and using: the advisor's heuristics

You will rarely be the one choosing. You will often be the one deciding whether to believe the person who did.

7.1 The default, and the honest case against it

plausible For a company of 200–1,000 people, the correct starting architecture is almost always: one well-run PostgreSQL instance with read replicas, plus a separate columnar system when analytics outgrows it. Postgres now covers JSON documents, full-text search, geospatial (PostGIS), time-series (TimescaleDB), and vector search (pgvector) through extensions, which removes the original reason most organisations ran four databases.

This has become close to conventional wisdom, which is exactly when to look for the strongest counter-argument. It exists, and it comes from people with standing on both sides. In discussion of the 2026 "just use Postgres" position, a former Citus Data engineer — Citus being a Postgres scaling company, so the person is if anything predisposed to the pro-Postgres view — makes the concrete objection: organisations underestimate "the CAPEX and OPEX required to make Postgres work well for workloads it wasn't designed for, at even reasonable scale," and describes companies running "solid-sized teams of Postgres experts whose primary job was constant tuning, operating, and essentially babysitting the system."

inference Both positions are correct at different scales, and the resolution is a question rather than a rule. The generalist default is right until you have a workload whose specialist demands exceed your ability to staff generalist operations for it. For a 400-person company that is a genuinely high bar. For a company whose product is data — analytics at scale, high-frequency telemetry, real-time personalisation — it can be crossed in year one. Note also that both sides of this argument have commercial interests, which is normal and does not make either wrong.

7.2 Eight questions that separate signal from pitch

Ordered roughly by how much they reveal per second spent.

  1. "What does one row represent?" — §3.1. Hesitation here predicts everything downstream.
  2. "Is this workload transactional or analytical?" If the answer is "both", the architecture will be a compromise and someone should say so out loud.
  3. "What are we giving up?" Every database is a set of trades. A pitch that names no trade-off is a pitch that has not been thought through, or is not being told to you.
  4. "How much data, really?" Ask for a number. The gap between perceived and actual volume is routinely two orders of magnitude, and it changes the answer completely. Modern single-machine tools handle hundreds of gigabytes comfortably.
  5. "What isolation level do we run at?" — §2.3. A precise answer signals a team that thinks about correctness. A blank look is a genuine finding.
  6. "Who owns the definition of this metric, and when did it last change?" — §3.5. The most valuable question on the list, and the one least likely to have an owner.
  7. "What happens when this is wrong?" Distinguishes a system needing strong consistency from one where eventual is fine. Most teams have never separated the two.
  8. "Show me the query plan for the slowest report." — §2.1. You are not auditing it. You are finding out whether anyone has ever looked.

7.3 Six things that should make you slow down

  • The pitch is framed as modernisation, not as a trade. §4.1. This is the single most reliable tell in the entire field.
  • "Schemaless" or "flexible schema" offered as a benefit. The structure has been moved, not removed — into application code, undocumented.
  • Scale requirements stated without numbers. "Web scale", "enterprise grade", "billions of records" with no measurement behind them.
  • A new database category with one product name attached. The category may be a feature. Ask whether the incumbent's extension does it, and what the gap actually is.
  • Benchmarks supplied by the vendor being benchmarked. Always. Not because vendors lie, but because they choose the workload.
  • An AI-analytics claim with an accuracy number but no description of the question set. §11 shows how far apart those numbers can be depending on what was asked.

Key points

  • One relational database plus a columnar analytical store is the right shape for the great majority of mid-size companies. Deviations should be argued for, not assumed.
  • The counter-argument to the generalist default is operational, not technical — specialist workloads on a generalist system consume expert staff time. That cost is real and is usually invisible in the business case.
  • Ask what is being given up. If nothing is, you are being sold to.
  • "Modernisation" framing is the tell. Every era's mistake arrived dressed as progress rather than as a choice.

Section 8

Where databases sit in the stack

The database is never alone. Understanding its neighbours is what lets you locate a problem rather than just observe it.

The canonical modern arrangement has two halves that mirror the row/column split of §5.1: an operational side that records what happens, and an analytical side that explains it. A pipeline connects them, and that pipeline is where truth most often goes missing.

THE TWO HALVES, AND THE SEAM BETWEEN THEM OPERATIONAL · row store · "what is true right now" Application / API the business logic ORM objects ⇄ tables. Convenient; hides the cost of queries. Cache (Redis) fast, and sometimes stale Queue (Kafka, SQS) decouples slow work PostgreSQL / MySQL / SQL Server — system of record ACID transactions · constraints · the authoritative copy Read replicas — scale reads, lag by milliseconds to seconds THE SEAM CDC — change data capture: read the write- ahead log, stream every change out. ELT — load raw, transform after. This is where definitions drift, rows are silently dropped, and time zones go wrong. ANALYTICAL · column store · seconds "what has been true over time" Lake / object storage — Parquet on S3 raw, cheap, open format, no structure imposed Table format — Iceberg / Delta + catalog tables, schema evolution, transactions, time travel Warehouse — Snowflake / BigQuery / DuckDB star schemas, modelled by dbt or equivalent Reverse ETL — push modelled data back into tools SEMANTIC LAYER — the newly load-bearing floor Defines revenue, active customer, churn, utilisation once, as executable definitions rather than tribal knowledge — plus which joins are legitimate and which are meaningless. Optional when humans wrote every query. Not optional once a machine is writing them. CONSUMERS BI — Tableau, Power BI, Looker humans, pre-built questions, definitions fixed at build time Notebooks — Python, R, SQL analysts, open-ended questions, judgement supplied by a person ML training & feature stores models consume history; the same features must exist live LLM agents — the new consumer arbitrary questions, no institutional memory, plausible when wrong WHY THIS DIAGRAM CHANGED IN 2025–26 Every consumer to the left of the last box arrives with context — a human who knows that "revenue" excludes intercompany, and that one region reports late. An agent arrives with none of it. It reads the schema and infers, confidently. The semantic layer is where that context has to be written down.
Figure 7. The operational/analytical split and the seam between them. The green band is the change worth tracking: the semantic layer was a nice-to-have for a decade because every query passed through a human who supplied the missing meaning. Removing the human removes the meaning, and it has to go somewhere.

8.1 Three neighbours worth understanding properly

The ORM. Object-relational mappers (Hibernate, Django ORM, ActiveRecord, SQLAlchemy) let developers work with objects while the library generates SQL. This is the practical resolution of the "impedance mismatch" that object databases failed to solve in the 1990s. The cost is that query cost becomes invisible: a loop over 500 objects can silently issue 501 queries — the "N+1 problem", and the most common performance bug in application development. Stonebraker and Pavlo's position is unusually direct: "Developers need to query their database directly", because ORMs conceal the optimisation opportunities that raw SQL exposes.

Change data capture. Rather than periodically copying tables, CDC reads the database's own write-ahead log (§2.4) and emits every change as a stream. It is elegant — the log already exists for durability, so this is nearly free — and it turns "sync nightly" into "sync continuously". inference Its second-order effect is more interesting than its first: once changes stream continuously, the distinction between the operational and analytical halves starts to blur, which is much of what the "real-time data" market is actually selling.

Retrieval-augmented generation. The now-standard pattern for pointing a language model at private data: chunk documents, embed each chunk as a vector, store the vectors, retrieve the nearest ones to a question, and put them in the prompt. Worth being precise about what this is and is not. RAG retrieves similar text. It does not compute, aggregate, or reason over structured records. inference A great deal of disappointment in 2024–25 enterprise AI came from pointing RAG at questions that were arithmetic over a database — "what was Q3 revenue in the Nordics" is not a semantic-similarity problem, and a vector index is the wrong instrument for it. The right instrument is a query, which is §11's subject.

Key points

  • Two halves, one seam. Operational records; analytical explains; the pipeline between them is where meaning is lost. Investigate the seam first.
  • The semantic layer moved from optional to structural the moment machines started writing the queries. This is the most consequential architectural shift currently underway.
  • ORMs trade visibility for convenience. Fine, until the N+1 query.
  • RAG is similarity retrieval, not analysis. Matching it to the wrong question type is a leading cause of failed AI pilots.

Section 9

The leading edge, mid-2026

Four movements with genuine momentum, and one honest assessment of what is still unresolved.

9.1 Open table formats have effectively won the storage layer

established The proprietary-storage era of the cloud warehouse is closing. Data increasingly lives as Parquet files in object storage, with an open table format — principally Apache Iceberg — supplying tables, schema evolution, and transactions on top. Databricks put Iceberg v3 into public preview in April 2026, adopting natively the three features that had been Delta Lake's differentiators (deletion vectors, row lineage, and a VARIANT type for semi-structured data), which substantially collapses the Delta-versus-Iceberg distinction that occupied the market for five years.

inference The strategic consequence is the one to carry into a board conversation. When storage is an open format that any engine can read, the query engine becomes a swappable component and vendor lock-in shifts from the data itself to the catalog — the metadata service that tracks tables, schemas and permissions. That is where the commercial fight has moved. "Which catalog, and can we leave it?" is now a more consequential procurement question than which warehouse.

9.2 The small-data counter-revolution

DuckDB — an in-process analytical database, columnar, no server, from CWI Amsterdam — has made a serious argument that most organisations calling themselves big-data are not. A large fraction of real analytical workloads fit on one machine, and a single machine with no network is dramatically simpler and faster than a cluster.

The same group has pushed this further with DuckLake (v1.0, April 2026), whose manifesto makes a pointed argument about lakehouse design. Iceberg and Delta encode metadata as files in object storage — "a maze of JSON and Avro files" — which makes small changes expensive and requires many sequential HTTP round-trips to plan a query. But both already require a database for their catalog. Their conclusion:

"Once a database has entered the lakehouse stack anyway, it makes an insane amount of sense to also use it for managing the rest of the table metadata!" Mark Raasveldt & Hannes Mühleisen, The DuckLake Manifesto, DuckDB Labs

inference Whether or not DuckLake specifically wins, note the shape of the argument — it is §4's cycle, exactly on schedule. An era abandoned the database for scale reasons, built increasingly elaborate machinery to recover what the database provided, and is now being told to use a database.

9.3 Consolidation, not proliferation

established The direction of travel is toward fewer systems. Vector search arrived in 2023 as a new product category and was absorbed into mainstream relational databases within roughly a year — considerably faster than JSON was a decade earlier. Stonebraker and Pavlo's read is that specialised vector systems are "essentially document-oriented DBMSs with specialized ANN indexes," and that "such indexes are a feature, not the foundation of a new system architecture." Their broader prediction: "NoSQL systems are on a collision course with RDBMSs. The differences … have diminished over time and should become nearly indistinguishable in the future."

9.4 The unresolved one: machines as the primary query author

This is the live frontier and the one where I would counsel the most caution, because the evidence is genuinely mixed and the marketing is not.

Stonebraker and Pavlo — who have no product to sell here — note that natural-language database interfaces are "an old research topic that dates back to the 1970s, but which historically has poor outcomes," and add: "We acknowledge LLMs have impressive results for this task but caution those who think NL will replace SQL." They also observe a specific enterprise hesitancy: "There is a reluctance to depend on current LLM technology for decision-making inside the enterprise, especially with financial data," because the outputs are not explainable to a human.

The countervailing development is architectural rather than model-level: the semantic layer of Figure 7. Giving a model executable definitions of business concepts, rather than raw table structures, measurably improves accuracy. §11 has the numbers, including what they still leave on the table.

Key points

  • Open table formats won; the lock-in moved to the catalog. Change the procurement question accordingly.
  • "How much data, really?" Single-machine tools have moved the threshold at which distributed systems are justified up by roughly two orders of magnitude since 2015.
  • Categories are consolidating. Assume a new database category will become a feature of an existing system within two to three years, and price accordingly.
  • Natural-language querying is real, partial, and being oversold. The serious work is in the semantic layer, not the model.

Section 10

Data science: the essentials

Four different jobs wear the same job title. Most confusion in the field — and most disappointment with it — comes from not distinguishing them.

10.1 The four jobs

These require different methods, different data, and different standards of evidence. Conflating them is the field's most expensive habit.

JobThe questionWhat it needsHow it fails
DescriptionWhat happened? Correct data, agreed definitions, correct grain. No statistics at all. Silently, through definition drift and wrong grain. The chart looks fine. §3.5.
PredictionWhat will happen? Labelled historical examples; a future that resembles the past. Loudly at first, then silently as the world drifts away from the training data.
InferenceHow confident can we be? A sampling model; an honest account of uncertainty. By reporting precision that the data cannot support.
CausationWhat happens if we act? An experiment, or a defensible identification strategy for observational data. Catastrophically — it drives a decision, and correlation was never causation.

inference The one worth pressing on in a client setting is the gap between rows two and four. A model that predicts churn accurately does not tell you what to do about churn. Customers who contact support churn more — that is predictive and real. It does not follow that reducing support contact reduces churn; the contact is a symptom. Organisations act on predictive models as if they were causal ones routinely, and the resulting decisions are occasionally the exact opposite of correct.

10.2 Breiman's two cultures

Leo Breiman — a Berkeley statistician who invented random forests — published Statistical Modeling: The Two Cultures in Statistical Science in 2001. It is the single most useful paper for understanding what data science actually is and why it caused friction.

His argument: statistics had split into two cultures. The data modelling culture assumes the data were generated by a stochastic model (linear regression, logistic regression), fits its parameters, and interprets them — you get an explanation, in exchange for assuming a structure that is probably wrong. The algorithmic modelling culture treats the mechanism as unknown and optimises purely for predictive accuracy — random forests, boosted trees, neural networks. You get accuracy, and you often lose interpretability.

Breiman argued the first culture's near-monopoly in academic statistics had led to irrelevant theory and poor predictions. established He was substantially vindicated: the algorithmic culture became machine learning and then modern AI. But the trade he named is unchanged, and it is the trade that matters in advisory work. Accuracy and explanation are in tension, and which you need depends on what the answer is for. A model you must defend to a regulator, a board, or a court has an interpretability requirement that a recommendation engine does not.

10.3 The methodological core, in five ideas

  • Overfitting. A model complex enough will memorise its training data, including its noise, and perform beautifully there and badly everywhere else. This is why performance is only meaningful on data the model has never seen — the held-out test set. A quoted accuracy figure without a described holdout is not a result.
  • The bias–variance trade-off. Too simple and the model misses real structure; too complex and it chases noise. Most of practical modelling is navigating this.
  • Cross-validation. Rotating which portion is held out, to get a stable estimate of out-of-sample performance from limited data.
  • Leakage. Information from the future, or from the answer, contaminating the training data. The classic case: a feature computed after the outcome it predicts. The symptom is suspiciously excellent performance in development and collapse in production. inference In my reading this is the most common single cause of machine-learning projects that "worked in the pilot".
  • Distribution shift. Models assume the future resembles the training past. When the world changes — a pandemic, a pricing change, a competitor exit — the model does not report an error. It reports a confident, wrong number.

10.4 The traps that survive technical competence

These are not beginner errors. They defeat well-trained people, which is why they are worth knowing by name.

  • Confounding. A third variable drives both things you are comparing. Ice cream sales and drowning both rise with temperature.
  • Simpson's paradox. A trend present in every subgroup reverses when groups are pooled. This is not a curiosity; it appears in real business data whenever group sizes differ, and it means the aggregate number and the segment numbers can both be correct and tell opposite stories.
  • Survivorship bias. Analysing only the entities that remain. Studying your current customers to understand churn is studying the people who did not churn.
  • Multiple comparisons. Test twenty hypotheses at 95% confidence and roughly one will be "significant" by chance. Dashboards with a hundred metrics are running this experiment continuously and reporting the winners.
  • Base rate neglect. A 99%-accurate test for a condition affecting 1 in 1,000 produces about ten false positives per true one. This governs fraud detection, screening, and anomaly alerting, and it is why high-accuracy alerting systems get ignored by the people receiving the alerts.

10.5 What the work actually consists of

The definitive statement is D. Sculley and colleagues at Google, Hidden Technical Debt in Machine Learning Systems (NeurIPS 2015). Its central observation, which has held up for a decade: in a real production machine-learning system, the modelling code is a small fraction of the total, surrounded by a vastly larger mass of data collection, verification, feature extraction, serving infrastructure, configuration and monitoring.

The paper also names failure modes specific to ML that have no equivalent in ordinary software — entanglement (changing any one input changes the meaning of all the others: "CACE" — changing anything changes everything), hidden feedback loops (the model's own outputs influence the data it is later trained on), and undeclared consumers (systems quietly depending on your model's output, so you cannot change it).

Monica Rogati — formerly of LinkedIn, a practitioner rather than an academic — framed the consequence memorably in 2017 as the AI hierarchy of needs: you cannot do machine learning on top of an organisation that cannot reliably collect, move, store, and label its data. The layers below are not preparatory work. They are the work.

Key points

  • Description, prediction, inference and causation are four different jobs. Establish which one is being asked for before anything else. Most disagreement about analysis is actually disagreement about which job it was.
  • Prediction does not license action. A model that forecasts an outcome says nothing about what changes it. Acting on predictive models as if causal is a live and expensive error.
  • Accuracy and explainability trade against each other — Breiman's two cultures. Which you need is a business question, not a technical one.
  • An accuracy number without a described holdout is not a result. Ask what was held out and how.
  • The modelling is the small part. Sculley et al.: the code that learns is a fraction of a real system. Budget and staff accordingly, or the pilot never becomes production.
  • Simpson's paradox and base rates defeat competent people. Know them by name so you can ask about them.

Section 11

The problem taxonomy, and the reliability boundary

Which data problems can an AI agent solve reliably today, which need a human check, and which still require a data scientist and a domain expert in the same room.

This is the question you actually asked, so it gets the most careful treatment and the most explicit evidence. The short version: the boundary is not drawn by task difficulty. It is drawn by two things — whether the answer can be cheaply verified, and how much undocumented organisational context the question secretly requires.

11.1 What the evidence actually shows

Three independent measurements, none from a vendor selling the capability, with numbers that are worth holding precisely because the marketing numbers are so different.

Multi-step analysis is largely unsolved. DABstep (Egg et al., Adyen and Hugging Face, 2025) built 450+ analysis tasks from Adyen's real payments-operations workload, requiring agents to combine structured transaction data with unstructured documentation. Frontier models of that vintage scored roughly 67–81% on the easy split — single-dataset, minimal documentation — and the best managed 14.55% on the hard split, which requires cross-referencing sources and multi-step reasoning. The failure modes named are specific and instructive: agents follow explicit instructions well and fail on implicit rules that must be inferred from documentation; they degrade at planning as steps accumulate.

Text-to-SQL is far harder on real schemas than on benchmarks. The original Spider benchmark, on small clean databases, was largely solved — GPT-4o scored 86.6%. Spider 2.0 rebuilt the task from real enterprise environments: databases with over 1,000 columns, multiple SQL dialects, solutions often exceeding 100 lines. The same model scored 10.1%. inference That 86.6 → 10.1 collapse, on the same underlying skill, is the most useful single number in this entire section, because it quantifies the gap between a demo and an enterprise.

And the benchmarks themselves are unreliable. contested Jin, Choi, Zhu and Kang (University of Illinois, CIDR 2026) hand-audited two leading benchmarks and found annotation error rates of 52.8% in BIRD Mini-Dev and 66.1% in the audited portion of Spider 2.0-Snow — incorrect ground-truth queries, queries that do not match the database, ambiguous questions. Re-scoring five leading agents on corrected examples moved absolute accuracy by −2 to +19 points and shifted rankings by up to three places. Their conclusion: the error rate "undermines the reliability of the leaderboard and fails to accurately reflect the true performance of the agents."

How to read leaderboards after that. Public text-to-SQL leaderboards currently show vendor-submitted agents in the mid-90s on some Spider 2.0 splits while independent baselines on harder splits sit in the 70s and general-purpose models sit far below. Given both the annotation findings above and the ordinary incentive to tune against a public test set, a leaderboard number is evidence about a benchmark, not about your data. The defensible position for an advisor: insist on evaluation against a held-out set of your client's own real questions, graded by someone who knows the domain. Anything else measures the wrong thing.

The architectural fix, honestly reported. Giving models a semantic layer — written definitions of business measures and disambiguation rules rather than raw table structures — measurably helps. A 2026 paired benchmark from Cube, a semantic-layer vendor, ran 100 natural-language questions against a retail dataset with and without a 4 KB hand-authored semantic document. Accuracy rose from roughly 45–50% to roughly 68% across three frontier models. inference The improvement is substantial and the direction is almost certainly right. But note what the vendor's own best case is: on a clean retail dataset, with a purpose-written semantic layer, roughly one answer in three is still wrong. That is the number to bring to a client considering unsupervised natural-language analytics.

THE RELIABILITY BOUNDARY Placement is set by two questions, not by how hard the problem sounds. DRIVER 1 · CAN THE ANSWER BE CHEAPLY CHECKED? A number you can recompute, a file you can diff, a query you can re-run — versus a judgement nobody can falsify before acting on it. DRIVER 2 · HOW MUCH UNWRITTEN CONTEXT DOES IT NEED? Exclusions, definitions, known bad periods, which joins are legitimate. Everything a ten-year employee knows and no document records. RELIABLE TODAY Delegate. Spot-check, don't supervise. ▸ Reshaping, cleaning, deduplicating a file ▸ Profiling data — nulls, ranges, cardinality ▸ Writing a query against a schema it can read ▸ Descriptive aggregation on a modelled star schema with documented measures ▸ Generating charts from a specified query ▸ Format and unit conversion, joins on keys whose meaning is explicit ▸ Explaining what existing code or SQL does ▸ Drafting the boilerplate of a pipeline ▸ Summarising an existing analysis WHAT THEY SHARE The answer is checkable in seconds, and everything needed to answer is written down somewhere the agent can read. ! NEEDS A HUMAN CHECK Agent drafts, a competent person verifies. ▸ Text-to-SQL on a documented schema with a semantic layer ▸ Churn / conversion prediction where labelled history already exists ▸ Forecasting a stable, well-behaved series ▸ Anomaly detection against thresholds someone has already agreed ▸ Analysing a pre-registered A/B test ▸ Feature engineering from documented fields ▸ Recommendation ranking ▸ Exploratory analysis to generate hypotheses (good at this; must not conclude from it) WHAT THEY SHARE The method is standard and the output looks right whether or not it is. Failure is silent, so the check is not optional. HUMAN JUDGEMENT REQUIRED Agent assists. It does not decide. ▸ Deciding what to measure at all ▸ Defining a business term — "active customer", "churn", "utilisation" ▸ "Why did revenue drop last quarter?" ▸ Any causal claim from observational data — attribution, elasticity, uplift ▸ Designing an experiment ▸ Text-to-SQL on an undocumented enterprise warehouse ▸ Forecasting through a regime change ▸ Adversarial settings — fraud, gaming, anything with an opponent adapting WHAT THEY SHARE There is no ground truth in the data to check against. The answer depends on assumptions someone must own. THE OPERATIVE RULE Green is not "easy" and red is not "hard" — several red items are trivial to compute and impossible to justify. The question that places a problem is: if the agent is confidently wrong, how long before anyone finds out? Seconds → green. A review meeting → amber. Two quarters and a bad decision → red. Note also that items move leftward as an organisation documents its semantics. The boundary is partly a property of your data estate, not only of the model.
Figure 8. The reliability boundary. inference The placements are my synthesis of the benchmark evidence in §11.1 against the failure modes in §10.4 — they are a judgement, not a measurement, and the right response to disagreement about a specific item is to test it on your own data. The structurally important claim is the last line: a company that has written down its definitions has moved several problems from amber to green without changing model.

11.2 The consequence for how you advise

inference Three things follow, and they are more actionable than any tool recommendation.

First, the constraint is the data estate, not the model. The same agent is reliable against a documented star schema with a semantic layer and unreliable against an undocumented warehouse. When a client's AI-analytics pilot disappoints, the model is rarely the variable worth changing — and the vendor will nonetheless propose changing it.

Second, the investment that pays is unglamorous. Writing down what the columns mean, what the metrics mean, which joins are legitimate, which periods are unreliable. This work has never had a sponsor because it never had a visible payoff. It now has one, and this is the strongest practical argument in the primer: semantic documentation has become a capability investment rather than a hygiene cost.

Third, "verify" must mean something specific. "A human reviews the output" is not a control if the human is reviewing a fluent paragraph containing a number they cannot independently derive. The verifiable version is: the agent shows its query, the query runs against known-good definitions, and someone who understands the domain can read the query. That is a real control. It is also the reason a non-technical executive is well served by being able to read SQL — which, of everything on this page, is the thing most worth an afternoon of your time.

Key points

  • Verifiability and hidden context set the boundary — not difficulty. Ask how long a confident error would survive undetected.
  • 86.6% → 10.1%. Same model, same skill, clean benchmark versus real enterprise schema. Carry this number.
  • Benchmark numbers are evidence about benchmarks. Independent auditing found over half the examples in two leading text-to-SQL sets contained annotation errors. Insist on evaluation against the client's own questions.
  • The best vendor-reported case for natural-language analytics is still ~68%. On a clean dataset, with a hand-written semantic layer. Plan for the third that is wrong.
  • Agents are strong at generating hypotheses and weak at concluding from them. That maps precisely onto exploration versus inference in §10.1.
  • Documenting semantics moves problems from amber to green. This is the highest- leverage data investment available to a mid-size company in 2026, and it requires no new platform.

Section 12

The map

Everything above, on one page, arranged by what causes what.

The shape of this map is the argument of the primer. Two outer spines — how the machine works, and what people do with it — and a spine down the middle that both depend on and neither owns. That middle spine is meaning, and the crossing lines are where it leaks.

HOW THE MACHINE WORKS MEANING — THE LOAD-BEARING SPINE WHAT PEOPLE DO WITH IT Physical data independence Codd 1970 · say what, not how Cost-based optimiser Selinger 1979 · it guesses, and drifts An index is a chosen ordering B-tree 1972 · a bet on the questions Row store ⇄ column store the OLTP / OLAP split is physics ACID — isolation is the soft part wrong answers arrive without errors Distribution: CAP → PACELC latency or consistency, every request The ~12-year cycle abandon relational → rediscover → re-add Storage is open; lock-in moved Iceberg won → now ask about the catalog GRAIN what does one row represent? KEYS & DEPENDENCIES one fact, stated in one place NORMAL FORM ⇄ STAR SCHEMA normalise to operate, denormalise to analyse DEFINITIONS what "revenue", "active", "churn" mean SEMANTIC LAYER the above, written down and executable Semantic drift the definition changed; the column name didn't Four jobs, not one describe · predict · infer · cause Two cultures Breiman 2001 · accuracy ⇄ explanation Overfitting · leakage · drift why the pilot beat production Confounding · Simpson · base rates traps that survive competence ML is mostly not modelling Sculley et al. 2015 · the rest is data plumbing Agents as query authors verifiability × hidden context 86.6% → 10.1% clean benchmark → real enterprise schema The boundary is movable documenting meaning shifts amber → green enables decides answerability constraints = enforced rules shape follows use undefined ⇒ confidently wrong removing the human removes the context each era re-learns this
Figure 9. Read the crossing lines rather than the boxes. Every arrow leaves the green spine, because meaning is what the machine and the analysis both consume and neither produces. The green spine has no owner in most organisations — it is not the DBA's job, not the analyst's, not the data scientist's — which is a reasonable one-sentence explanation of why so many well-funded data programmes produce numbers nobody trusts.

The whole primer in six sentences

  • A database separates what you want from how it is fetched; everything else in the field is a consequence of, or a rebellion against, that separation.
  • The storage layout is a bet about which questions will be asked — rows for operations, columns for analysis — and it cannot be hedged.
  • The decisions that determine what is answerable are made before any tool is chosen: grain, keys, and definitions.
  • The field runs a cycle of abandoning and re-adopting the relational model roughly every twelve years; knowing where a proposal sits prices its risk.
  • Data science is four different jobs, and the expensive mistake is treating a predictive result as a causal one.
  • AI agents are reliable exactly where answers are cheaply checkable and context is written down — which makes writing down your semantics the highest-leverage investment available.

Section 13

Lexicon, 1960–2026

Every term you are likely to hear, tagged by the era that produced it and whether it still means anything. Search it, or filter by era to read the field's development chronologically.

The value of reading this by era rather than alphabetically: you can see the field's arguments recur. Terms marked obsolete are worth knowing precisely because someone will use one, and the usage tells you when their mental model was formed.

TermEraStatusWhat it means — and what it became
Hierarchical model1966 · IBM IMSobsoleteData as a strict parent-child tree. A child has exactly one parent, so anything many-to-many required duplication. → superseded by the relational model; IMS installations still run core banking.
Network model / CODASYL1969obsoleteRecords linked by explicit pointer "sets", allowing many-to-many. More expressive than hierarchical, equally welded to storage. → the model Codd argued against.
Navigational access1960s–70sobsoleteThe programmer walks the pointer structure record by record. Bachman's Programmer as Navigator (Turing lecture, 1973). → replaced by declarative querying; conceptually resurrected every time someone "pre-joins for performance".
ISAM1966obsoleteIndexed Sequential Access Method — an early index over a sorted file. → the ancestor of the modern index.
Batch / master file1960s–70sfadingAccumulate transactions, process them overnight against a master file. → survives as "nightly batch", which streaming and CDC are steadily eroding.
Record · field1960scurrentPre-relational vocabulary for what relational theory calls a tuple and an attribute, and what everyone actually says: row and column.
Relational model1970 · CoddcurrentData as mathematical relations — unordered sets of tuples, no pointers. The foundation of everything since.
Physical data independence1970currentUsers are insulated from how data is stored. The single most consequential idea in the field. → what every "schemaless" system gives up.
Relation · tuple · attribute1970currentThe formal terms for table, row, column. Used when precision matters; "table/row/column" otherwise.
Relational algebra / calculus1970–72currentThe operator set (select, project, join, union, difference) that SQL compiles down to. Still the internal language of every query engine.
Normalisation · 1NF/2NF/3NF/BCNF1970–74currentOrganising tables so each fact is stored once, preventing update/insert/delete anomalies. Not tidiness — a defence against contradiction.
Functional dependency1971currentA determines B: knowing A fixes B. The formal machinery underneath normal forms.
Primary / foreign / candidate key1970currentThe identifier of a row; a reference to another table's identifier; any attribute set that could serve as identifier.
Referential integrity1970scurrentThe engine refuses to store a reference to a row that does not exist. A business rule no application can accidentally break.
B-tree1972 · Bayer & McCreightcurrentBalanced, shallow, sorted index structure. Lookup cost grows with the logarithm of table size. Still the default index in 2026.
SEQUEL → SQL1974 · Chamberlin & BoycecurrentStructured English Query Language, renamed for trademark reasons. Codd himself disliked parts of it — notably duplicate rows and three-valued logic with NULLs.
System R · INGRES1974–79currentThe two prototypes that proved the relational model practical. System R → DB2 and SQL; INGRES → Postgres, Sybase, SQL Server lineage.
Query optimiser · access path1979 · Selinger et al.currentChooses the cheapest execution plan using cost estimates. The hardest component to build and the source of most surprising behaviour.
Cardinality estimation1979–currentThe optimiser's guess at how many rows a step will produce. When this guess is badly wrong, the plan is badly wrong.
Nested loop · hash · sort-merge join1970s–80scurrentThe three join algorithms. Nested loop suits small inputs with an index; hash suits large unsorted inputs; sort-merge suits pre-sorted ones.
Entity-Relationship model1976 · ChencurrentDiagramming notation for entities, attributes and relationships before committing to tables. Still the standard whiteboard language.
Schema · DDL · DML1970scurrentThe structure definition; the language that defines it (CREATE/ALTER); the language that manipulates data (SELECT/INSERT/UPDATE).
Transaction1981 · GraycurrentA group of operations that succeeds or fails as one unit. Gray's The Transaction Concept is the founding statement.
ACID1983 · Härder & ReutercurrentAtomicity, Consistency, Isolation, Durability. Atomicity and durability are near-absolute; isolation is where the honest caveats live.
Isolation levelsSQL-92currentRead Uncommitted / Read Committed / Repeatable Read / Serializable. Most systems default to a weak level. Critiqued as ambiguous by Berenson et al., 1995.
Dirty read · non-repeatable read · phantom1980scurrentThe three classical anomalies the isolation levels are defined against. Worth knowing by name to ask which your system permits.
Two-phase locking (2PL)1976–currentAcquire all locks, then release all locks. The classical mechanism for serializability. → largely displaced in practice by MVCC.
Two-phase commit (2PC)1978–currentProtocol for committing a transaction across multiple systems. Correct but blocking, and a classic source of distributed stalls.
MVCC1981–currentMulti-version concurrency control: readers see a consistent snapshot rather than blocking on writers. Why Postgres readers never block writers.
Deadlock1970scurrentTwo transactions each holding what the other needs. Detected and resolved by killing one — which the application must be prepared to retry.
Stored procedure · trigger1980scurrentLogic executed inside the database. Fashionable in the 1990s, then unfashionable as logic moved to application code; still correct for integrity-critical rules.
View · materialised view1980scurrentA saved query presented as a table; a materialised view stores the result and must be refreshed. → the direct ancestor of the semantic layer.
SQL-86 · SQL-921986 / 1992currentThe ANSI/ISO standards that made SQL portable. SQL-92 remains the practical baseline; later editions added JSON (2016), property graphs and arrays (2023).
Codd's 12 rules1985historicalCodd's criteria for what counts as genuinely relational, published partly to attack products claiming the label. No commercial system fully satisfies them.
4GL · CASE tools1980sobsolete"Fourth-generation languages" and computer-aided software engineering — promised applications without programming. → the lineage that runs to low-code and, arguably, to today's code generation.
Client-server1980scurrentDatabase on a server, application on a client, talking over a network. Still the default shape; embedded databases (SQLite, DuckDB) are the deliberate exception.
ODBC · JDBC1992 / 1997currentStandard connection interfaces that let any tool talk to any database. Unglamorous and load-bearing.
OLTP · OLAP1990scurrentOnline transaction processing (many small reads/writes) versus online analytical processing (few huge scans). The distinction that justifies running two systems.
Data warehouse1992 · InmoncurrentA separate, integrated, historical store for analysis. Inmon argued for a normalised enterprise-wide design with derived marts.
Dimensional modelling · star schema1996 · KimballcurrentA central fact table surrounded by dimension tables. Won the practical argument and remains the default analytical shape thirty years on.
Fact · dimension · conformed dimension1996currentWhat happened (numeric, many rows); the context you slice by; a dimension shared identically across several fact tables so numbers reconcile.
Grain1996 · KimballcurrentWhat one row of a fact table represents. The most consequential and least discussed decision in any data design.
Slowly changing dimension (Type 1/2/3)1996currentHow to handle an attribute that changes: overwrite (history rewritten), add a versioned row (history preserved), or keep a previous-value column.
Snowflake schema1990sfadingA star schema with normalised dimensions. Saves storage, costs joins and clarity. Mostly abandoned — and unrelated to the company of the same name.
ETL1990scurrentExtract, Transform, Load — transform before loading, because warehouse compute was scarce. → inverted to ELT once cloud compute became cheap.
Data mart1990sfadingA departmental subset of the warehouse. → largely dissolved into modelled layers inside a single warehouse.
OLAP cube · MOLAP / ROLAP / HOLAP1993fadingPre-aggregated multidimensional structures for fast slicing. → made largely unnecessary by columnar engines fast enough to aggregate on demand.
Drill down · roll up · slice and dice1990scurrentNavigating a dimensional model by changing level of detail or filtering. The vocabulary of every BI tool since.
Data mining · KDD1990ssupersededFinding patterns in large datasets; "knowledge discovery in databases". → the same activity is now called machine learning or data science.
OODBMSlate 1980s–90sobsoleteObject-oriented databases storing application objects directly. Lost decisively; the good ideas were absorbed into relational type systems.
Impedance mismatch1990scurrentThe friction between object-oriented code and relational tables. → resolved pragmatically by ORMs rather than by replacing the database.
Write-ahead log · ARIES1992 · Mohan et al.currentLog the change before applying it, so a crash can be replayed. → also the mechanism CDC later hijacked to stream changes out.
Business intelligence1990scurrentReporting and dashboards over a warehouse. Persistent, if slightly dated, umbrella term.
Operational data store1990sfadingAn intermediate store of near-current integrated operational data. → mostly replaced by CDC into a lake.
Master data management1990s–2000scurrentMaintaining one authoritative record of core entities — customer, product, supplier. Perennially difficult, and it is a data-modelling problem wearing a governance costume.
Star schema query pattern1990scurrentAggregate a fact measure, grouped by dimension attributes. Its uniformity is what makes both self-service BI and LLM querying feasible.
CAP theorem2000 Brewer · 2002 Gilbert & LynchcurrentUnder a network partition, choose consistency or availability. Frequently misquoted as a general trade-off; it applies only during partitions.
Eventual consistency2000scurrentReplicas converge in time, absent new writes. A programming model with real obligations, not a configuration setting.
BASE2000sfadingBasically Available, Soft state, Eventually consistent — a deliberate rhetorical foil to ACID. Rarely used seriously now.
GFS · MapReduce · Bigtable · Dynamo2003–2007currentThe Google and Amazon papers that launched the era. Honest engineering documents about problems most companies did not have.
Hadoop · HDFS · MapReduce jobs2006–2015obsoleteThe open-source implementation of Google's stack. Stonebraker & Pavlo: "Hadoop died about a decade ago." → superseded by Spark, then by cloud warehouses and object storage.
Hive · Pig2008–obsoleteSQL-ish and scripting layers over MapReduce — the industry admitting within two years that it wanted SQL back. Their metastore outlived them as the ancestor of the modern catalog.
NoSQL2009fadingUmbrella term for non-relational stores; later softened to "not only SQL" as every system in the category added SQL.
Key-value · document · wide-column · graph store2000scurrentThe four NoSQL families. All remain useful in their genuine niches; all have converged toward relational features.
Sharding · partitioning2000scurrentSplitting data across machines (sharding) or within one (partitioning) by key. Buys write throughput; costs cross-shard transactions and joins.
Consistent hashing1997 · popularised 2007currentAssigning keys to nodes so that adding or removing a node moves as little data as possible. Central to Dynamo and its descendants.
Quorum (R + W > N)2007currentTuning how many replicas must acknowledge a read or write. The dial that trades consistency against latency and availability.
LSM-tree1996 · adopted 2000scurrentLog-structured merge tree: buffer writes in memory, flush to sorted files, merge in the background. Why write-heavy stores (Cassandra, RocksDB) beat B-trees on ingest.
Bloom filter1970 · ubiquitous 2000scurrentA compact structure that answers "definitely not present" or "possibly present". Saves enormous numbers of pointless disk reads.
Column store · vectorised execution2005 · C-StorecurrentStore each column contiguously; process batches of values at a time. Now universal in analytics — every warehouse vendor converted.
Denormalisation · pre-joining1970s · revived 2000scurrentDuplicating data to avoid joins. Correct for analytical stores; a return to navigational design when used for operational ones.
ORM · N+1 problem2000scurrentObject-relational mapping libraries, and their signature failure: a loop over N objects silently issuing N+1 queries.
Caching layer · memcached · Redis2003–2009currentAn in-memory store in front of the database. Enormous speed win; introduces the problem of knowing when the cached copy is stale.
Data lake~2010currentRaw files in cheap storage, structure imposed at read time. Powerful and, without governance, the origin of the "data swamp" joke.
Web scale2000smarketingRarely a measurement. Treat as a prompt to ask for numbers.
Spanner · TrueTime2012 · GooglecurrentGlobally distributed database with real transactions, using atomic clocks and GPS to bound clock uncertainty. Proved global ACID was possible — at a latency price.
Paxos · Raft1998 / 2014currentConsensus algorithms letting a group of machines agree despite failures. Raft (Ongaro & Ousterhout) was explicitly designed to be understandable, and largely displaced Paxos in practice.
PACELC2012 · AbadicurrentIf Partition: Availability or Consistency; Else: Latency or Consistency. The honest extension of CAP, and the half that applies every day.
NewSQL2011fadingSystems promising NoSQL scale with ACID guarantees. Uptake was muted — Stonebraker & Pavlo attribute this to existing systems being "good enough". → the surviving term is "distributed SQL".
Separation of storage and compute2016 · SnowflakecurrentData in object storage; ephemeral compute clusters against it. The structural innovation of the cloud era — and it turned database capacity into a metered variable cost.
Spark · RDD · DataFrame2012currentIn-memory distributed processing that displaced MapReduce. Still widely used, increasingly displaced in turn by warehouse SQL and single-node engines.
Kafka · log-based streaming2011currentA durable, replayable, ordered log as the backbone between systems. Reframed integration from "copy data" to "subscribe to changes".
Change data capture (CDC)2010s · DebeziumcurrentStreaming every change out of a database by reading its write-ahead log. Nearly free, because the log already exists for durability.
ELT2010scurrentLoad raw, transform inside the warehouse. The inversion of ETL, made sensible by cheap elastic compute.
dbt · analytics engineering2016–currentManaging warehouse transformations as version-controlled, tested SQL. Created a role between analyst and data engineer, and made data modelling a reviewable artefact.
Parquet · ORC · Avro2009–2013currentOpen file formats: Parquet and ORC columnar for analytics, Avro row-based for streaming. Parquet is now the de facto standard for analytical data at rest.
Object storage (S3 and equivalents)2006 · dominant 2010scurrentEffectively unlimited, cheap, durable file storage with high latency. The substrate the entire modern analytical stack sits on.
Lambda architecture2011obsoleteParallel batch and streaming paths reconciled at query time. Abandoned because maintaining the same logic twice is intolerable.
Kappa architecture2014fadingStreaming only, with reprocessing by replaying the log. Cleaner than Lambda; largely absorbed into ordinary streaming practice.
Modern data stack~2019fadingA category label for the cloud warehouse plus ingestion, transformation and BI vendors. → the constituent tools are now consolidating back together.
Data mesh2019 · DehghanicontestedDecentralised, domain-owned data products with federated governance. A genuine organisational insight that proved hard to implement; adoption has cooled markedly.
Data contract~2022currentAn explicit, enforced agreement about the schema and semantics a producer guarantees to consumers. The durable idea rescued from the mesh discussion.
Feature store2017–fadingShared repository of ML features, ensuring training and serving compute them identically. Real problem; increasingly solved inside warehouses rather than by a separate product.
Polyglot persistence2011supersededUse a different database per workload. Sound in theory; in practice it multiplied operational burden. → reversed by the consolidation of §9.3.
HTAP2014contestedHybrid transactional/analytical processing — one system for both. Attractive; constrained by the row/column physics of §5.1.
Reverse ETL2020fadingPushing modelled warehouse data back into operational tools. A useful pattern that struggled to be a product category.
Data observability · lineage2019–currentMonitoring freshness, volume and schema changes; tracing where a column came from. Lineage is the practical defence against semantic drift.
Snapshot isolation · time travel1995 · table-level 2019currentReading a consistent point-in-time view; at table-format level, querying a table as it stood last Tuesday. Genuinely valuable for audit and debugging.
Open table formatIceberg 2017 · Delta 2019currentA metadata layer over Parquet files giving tables, schema evolution, transactions and time travel. Iceberg has effectively become the standard.
Lakehouse2021 · DatabrickscurrentWarehouse-style management over lake-style open storage. Now the mainstream large-scale architecture.
Catalog2023–currentThe service tracking which tables exist, their schemas and permissions — Unity, Polaris, Nessie, the Iceberg REST spec. Where vendor lock-in moved once storage became open.
Deletion vector · row lineage · VARIANTIceberg v3, 2026currentMark rows deleted without rewriting files; track per-row change history; store semi-structured data natively. The features that collapsed the Delta/Iceberg distinction.
Embedded / in-process analyticsDuckDB 2019–currentA columnar analytical engine running inside your process, no server. Has moved the threshold at which a cluster is justified up by orders of magnitude.
DuckLake2025 · v1.0 2026emergingLakehouse design putting all metadata in a SQL database rather than in files, on the argument that a database was already required for the catalog.
Embedding · vector2013 · mainstream 2023currentA numeric representation of meaning, such that similar things sit near each other. The substrate of semantic search.
ANN index · HNSW · IVF2016–currentApproximate nearest-neighbour indexes — trade exactness for speed at scale. Note "approximate": results are probabilistic, unlike a B-tree lookup.
Vector database2022–absorbingProducts built solely around ANN search. Being absorbed as extensions to existing databases — "a feature, not the foundation of a new system architecture."
RAG2020 · mainstream 2023currentRetrieval-augmented generation: fetch similar text, put it in the prompt. Retrieval by similarity — not aggregation, computation or reasoning over records.
Semantic layer · metrics layer2020srisingBusiness definitions expressed once, executably — measures, permitted joins, disambiguation rules. Optional for humans; structural for agents.
Text-to-SQL · NL2SQL1970s · revived 2023currentNatural language to executable query. Genuinely improved and still far weaker on real enterprise schemas than benchmark figures suggest.
Agentic analytics2024–emergingAn LLM agent planning and executing multi-step analysis. Strong on well-specified single-source tasks; measured at roughly 15% on multi-step enterprise tasks (DABstep).
Model Context Protocol (MCP)2024–emergingAn open protocol for connecting models to tools and data sources, including databases. Standardises the plumbing, not the semantics.
Zero-ETL2022–marketingVendor framing for managed replication between their own products. The transformation work does not disappear; it moves.
Local-first · CRDT2011 · rising 2020snicheConflict-free replicated data types — structures that merge concurrent edits deterministically. The foundation of collaborative editing, and a genuine advance in offline-capable applications.
Serverless · usage-based pricing2020scurrentCompute that scales to zero and bills per second. Removes capacity planning; removes the natural ceiling on the cost of a bad query.

Dates are of first significant publication or general adoption, whichever is more informative. Status reflects mid-2026 practice, and is a judgement — inference.

Section 14

Sources

Primary sources only. Where a source has a commercial interest in its own finding, that is stated.

Foundational papers

  • Codd, E. F. "A Relational Model of Data for Large Shared Data Banks." CACM 13(6), 1970.
  • Bachman, C. "The Programmer as Navigator." ACM Turing Award Lecture, CACM 16(11), 1973.
  • Bayer, R. & McCreight, E. "Organization and Maintenance of Large Ordered Indices." Acta Informatica 1(3), 1972.
  • Chamberlin, D. & Boyce, R. "SEQUEL: A Structured English Query Language." SIGFIDET, 1974.
  • Chen, P. "The Entity-Relationship Model." ACM TODS 1(1), 1976.
  • Selinger, P. et al. "Access Path Selection in a Relational Database Management System." SIGMOD, 1979.
  • Gray, J. "The Transaction Concept: Virtues and Limitations." VLDB, 1981.
  • Härder, T. & Reuter, A. "Principles of Transaction-Oriented Database Recovery." ACM Computing Surveys 15(4), 1983.
  • Mohan, C. et al. "ARIES: A Transaction Recovery Method…" ACM TODS 17(1), 1992.
  • Berenson, H., Bernstein, P., Gray, J., Melton, J., O'Neil, E. & O'Neil, P. "A Critique of ANSI SQL Isolation Levels." SIGMOD, 1995.

Warehousing and dimensional modelling

  • Inmon, W. H. Building the Data Warehouse. Wiley, 1992.
  • Kimball, R. The Data Warehouse Toolkit. Wiley, 1996 (and later editions).

Distributed systems and the web-scale era

  • Ghemawat, S., Gobioff, H. & Leung, S.-T. "The Google File System." SOSP, 2003.
  • Dean, J. & Ghemawat, S. "MapReduce: Simplified Data Processing on Large Clusters." OSDI, 2004.
  • Chang, F. et al. "Bigtable: A Distributed Storage System for Structured Data." OSDI, 2006.
  • DeCandia, G. et al. "Dynamo: Amazon's Highly Available Key-value Store." SOSP, 2007.
  • Gilbert, S. & Lynch, N. "Brewer's Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services." SIGACT News 33(2), 2002.
  • Abadi, D. "Consistency Tradeoffs in Modern Distributed Database System Design" (PACELC). IEEE Computer, 2012.
  • Stonebraker, M. et al. "C-Store: A Column-oriented DBMS." VLDB, 2005.
  • Corbett, J. et al. "Spanner: Google's Globally-Distributed Database." OSDI, 2012.
  • Ongaro, D. & Ousterhout, J. "In Search of an Understandable Consensus Algorithm" (Raft). USENIX ATC, 2014.
  • Dageville, B. et al. "The Snowflake Elastic Data Warehouse." SIGMOD, 2016.

The historical reviews — the most useful single reading

  • Stonebraker, M. & Hellerstein, J. "What Goes Around Comes Around." 2005.
  • Stonebraker, M. & Pavlo, A. "What Goes Around Comes Around… And Around…" ACM SIGMOD Record 53(2), 2024. db.cs.cmu.edu — if you read one thing beyond this primer, read this.

Data science

  • Breiman, L. "Statistical Modeling: The Two Cultures." Statistical Science 16(3), 2001.
  • Sculley, D. et al. "Hidden Technical Debt in Machine Learning Systems." NeurIPS, 2015.
  • Rogati, M. "The AI Hierarchy of Needs." 2017 — practitioner framing, not peer-reviewed.

Agent and text-to-SQL evidence (§11)

  • Egg, A., Iglesias Goyanes, M., Kingma, F., Mora, A. (Adyen); von Werra, L. & Wolf, T. (Hugging Face). "DABstep: Data Agent Benchmark for Multi-step Reasoning." 2025. arXiv:2506.23719
  • Spider 2.0 — enterprise text-to-SQL benchmark and leaderboard. spider2-sql.github.io. Note: leaderboard entries are self-submitted, several by vendors.
  • Jin, T., Choi, Y., Zhu, Y. & Kang, D. (UIUC). "Text-to-SQL Benchmarks are Broken: An In-Depth Analysis of Annotation Errors." CIDR, 2026. vldb.org
  • Cube. "Why semantic layers make LLM analytics reliable: a paired benchmark across three frontier models." 2026. cube.devvendor source; Cube sells semantic-layer software. Reported here because its own best case (~68%) is the useful figure.

Current landscape

  • Raasveldt, M. & Mühleisen, H. "The DuckLake Manifesto: SQL as a Lakehouse Format." DuckDB Labs, 2025; DuckLake v1.0, April 2026. ducklake.selectvendor source (DuckDB Labs).
  • Databricks. "The next era of the open lakehouse: Apache Iceberg v3 in Public Preview." April 2026. databricks.comvendor source.
  • Hacker News discussion of "It's 2026, Just Use Postgres," including the Citus Data counter-argument quoted in §7.1. news.ycombinator.com — practitioner commentary, not peer-reviewed.
On what is not here. Latency figures in Figure 6 are conventional orders of magnitude from the systems literature rather than a measured benchmark. Placements in Figure 8 are my judgement against the cited evidence, not a measurement. The status column in the lexicon is a reading of mid-2026 practice. Each is marked as inference where it appears — the distinction between what is established and what I am concluding is maintained deliberately throughout, and where I could not verify something I have left it out rather than smoothed it.

Prepared for Jakob Beck · MøllerBeck · July 2026. Advisor-evaluator lens, ~70/30 database-to-data-science weighting, primary sources only.