Field note · January 19, 2026

Pattern: Deterministic surrogate key

Derive the key from the content instead of an auto-increment, so reprocessing the same row produces the same key.

1 min read ·Data engineering ·pipelines modelling

The shape: hash(natural key columns) — stable across reruns, machines and backfills. — that is Deterministic surrogate key, and it comes up more than it should.

Derive the key from the content instead of an auto-increment, so reprocessing the same row produces the same key.

What makes it a pattern rather than a tip is that the wrong version is the one you write naturally. It reads correctly, it runs, and it returns something. The failure is in the result, not in the execution — which means the only defence is recognising the shape before you are in it.

Two datasets on this site have the shape built in: retail-orders. Both are small enough to run the broken version, see the number, then run the corrected one and see it change.

It lives under moving because it is about data in transit: reruns, backfills, and the assumption that yesterday only ever arrives once.

The long-form treatment is in the course (idempotency-and-backfills, facts-and-dimensions); the pattern page is the version to read at 4pm with a query open.

If you have a better formulation of this one, the repository takes issues. Several entries there are sharper than what we started with because someone pushed back.