Data Vault
What does Data Vault cost the people who read it?
The constraint that Data Vault 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.
- 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 late-binding move: cardinality is resolved at read time.
- 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.
- 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.
- Auditability by construction. Everything is insert-only with load timestamps. This is the immutable-store law again, with the same missing collector.
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 presentation layer 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.