Skip to content
About
Main content

Data Vault

What does Data Vault cost the people who read it?

The constraint that addresses is not analytical. It is that sources are many, volatile, mutually contradictory, and arrive on independent schedules, while an auditor will later ask what each source asserted and when.

The decomposition

  • Hubs hold business keys and nothing else, one row per entity ever observed.
  • Links hold relationships as first-class entities (a customer placed an order; an order contains a product).
  • Satellites hold descriptive attributes, partitioned by source and versioned by load timestamp.
CREATE TABLE hub_customer (
  customer_hk   CHAR(32),       -- md5 hash of the business key
  customer_bk   VARCHAR,        -- business key from the source
  load_ts       TIMESTAMP,
  record_source VARCHAR
);
CREATE TABLE sat_customer_address (
  customer_hk   CHAR(32),
  load_ts       TIMESTAMP,
  record_source VARCHAR,        -- which system said this
  address       VARCHAR
);
CREATE TABLE link_customer_order (
  link_hk       CHAR(32),
  customer_hk   CHAR(32),
  order_hk      CHAR(32),
  load_ts       TIMESTAMP,
  record_source VARCHAR
);

Four properties that follow

Each is a real derivation, not a style preference.

  1. Cardinality becomes data, not schema. Because a relationship lives in its own table, a source changing from one-to-many to many-to-many means new rows, not a migration. That is a : is resolved at read time.
  2. Contradiction becomes representable. Two sources asserting different addresses produce two satellite rows, and both are true statements about what was received. A star forces you to resolve the contradiction at load time, so the resolution rule is buried in a pipeline. Vault forces you to resolve it at read time, so the rule is at least visible. Note the asymmetry: this does not make the decision easier, it makes it locatable.
  3. Loads become order-independent. Hash keys derived from business keys remove the surrogate-lookup serialization point (Late arrivals and surrogate keys), so any table can load at any time, in any order, without coordination. This is a real engineering property and the strongest practical argument for the pattern.
  4. Auditability by construction. Everything is insert-only with load timestamps. This is the immutable-store law again,

The cost

The cost is entirely on the read side, and it is large. A question about five attributes of two entities may traverse a dozen tables. That is why, in practice, Data Vault always ships with a of stars or wide marts on top.

It is worth that addition when sources are numerous, contested and changing. It is pure overhead for one source and one team.

Genuinely unsettled: whether cheap columnar compute has reduced the read-side penalty enough to make the pattern a broad default. Practitioners disagree, and neither side has published the comparison that would settle it.