Principles
Principle
ER modelling for Conform
How to shape Conform so Identity, Span, and Publish stay honest — without joining an Inmon / Kimball / Vault tribe war. Conform is an enterprise assertion model; Publish may look dimensional to consumers, but must not invent grain or KPIs. The entities you draw are the canonical ∩ — shared meaning across same-type vendors / systems / sources — not a paste of any one source’s tables.
Canonical shape · the ∩
Same product type, multiple vendors / systems / sources → one programme model. Example: native labels name, customer, preferred collapse to locked name in the ∩; each lobe keeps that system’s other variance (see Extensions).
Lobes — native labels
Common ∩ — locked name
A · B · C — discrete sources
Optional industry-model lenses
Industry standards are optional bias when locking the entity list — not a wholesale copy into CORE. Use them as a pattern lens after forensic inventory, not as the programme model by decree.
| Standard | Industries | Covers | Source |
|---|---|---|---|
| ACORD IM / NGDS | Insurance, reinsurance, brokers | Party, Agreement, Claim, Role, Place, Finance | acord.org ↗ |
| HL7 FHIR R4 | Healthcare, payers, HIEs | Patient, Encounter, Claim, Medication, Observation | hl7.org/fhir ↗ |
| FIBO | Banks, capital markets, finance data | Parties, instruments, contracts ontology | edmcouncil.org ↗ |
| ISO 20022 | Payments, securities messaging | Payments & regulatory message semantics | iso20022.org ↗ |
| IFRS 18 | Group finance, consolidation | Financial statement presentation | ifrs.org ↗ |
| TM Forum SID | Telecom, digital services | Customer, product, service, resource | tmforum.org ↗ |
| IEC CIM | Utilities, grid, energy markets | Network assets, meters, settlement | cim-mg.ucaiug.io ↗ |
| GS1 EPCIS 2.0 | Supply chain, pharma/food trace | What / when / where / why events | gs1.org ↗ |
| ARTS ODM / POSLog | Retail, POS | Merchandise & POS transactions | omg.org/retail ↗ |
| ISO IDMP | Life sciences, pharma | Medicinal product identification | ema.europa.eu ↗ |
| OPC UA 40010-1 | Robotics, manufacturing | Robot asset & state semantics | opcfoundation.org ↗ |
| XTCE / CCSDS | Space & satellite ops | TM/TC dictionaries, space packets | omg.org/xtce ↗ |
Automotive / dealership programmes often use STAR BOD / DMS as a pattern lens — not a global statute like ACORD or FHIR.
Stance vs familiar schools
Where CRISP sits
Inmon-ish
Shared subject-area entities
Closest to Conform
Kimball
Fact + dim analytic grains
Publish consumers OK
Vault / medallion
History hubs · lake hygiene
Upstream / parallel
| School | Optimises | CRISP take |
|---|---|---|
| Inmon | Integrated subject-area CIF | Closest spirit for Conform — shared enterprise entities. CRISP adds tritemporal assertions, Rules, Identity, Span/Publish. |
| Kimball | Analytic fact + dim grains | Fine for consumer ergonomics over Publish — not the Conform truth model. Do not name Conform tables FACT_*. |
| Data Vault | Audit hubs / links / sats | Excellent upstream or parallel history. Not a substitute for typed Conform, Rules, or Identity. |
| Medallion | Bronze → silver → gold hygiene | Landing/cleaning only. Silver is usually adaptor input — not Conform. |
Why we avoid FACT_*
A Kimball fact encodes a chosen analytic grain. Conform needs native keys, tritemporal correction history, Identity lag, and first-class relationships. Calling early tables FACT_* invites collapsing history and inventing KPIs before Publish. Prefer entity names: PARTY, ACCOUNT, MONETARY_POST, …
Headers and assertion rows
Identity subjects use a sparse header plus versioned assertions:
Header + assertion
{SUBJECT}_HEADER
{subject}_header_key · stable enterprise join
{SUBJECT}
v1 closed
{SUBJECT}
v2 closed
{SUBJECT}
v3 open
| Object | Role |
|---|---|
| {SUBJECT}_HEADER | Stable join anchor — {subject}_header_key |
| {SUBJECT} | Tritemporal assertion — row key PK; FK to header; native keys in extensions |
Singletons use consume_key = header_key until Identity clusters. Anti-pattern: one dense “current row” master with no header/assertion split.
{SUBJECT}_HEADER
{subject}_header_key -- stable enterprise join id
{SUBJECT} -- assertion versions
{subject}_row_key -- PK of this version
{subject}_header_key -- FK → header
valid_* / system_* / warehouse_*
extensions -- source_natural_id, lane payloadEntity vs domain
- Entity — Conform table type (how you store assertions).
- Domain — business subject area (what you steward). Often appears as
link_to_domain.
When to use _LINK / roles — and types
Use a link or role entity when you assert a relationship, not a second copy of the subject. Qualify with a governed type/usage and optional scope:
Generic link · not per-domain tables
Subject
PARTY
{SUBJECT}_ROLE / _LINK
role_type · who / what role
link_to_domain · kind of target
link_to_key · target header
Target header
ACCOUNT_HEADER · …
| Pattern | When | Qualify with |
|---|---|---|
| {SUBJECT}_ROLE | Subject plays a role in a context | role_type + link_to_domain / link_to_key |
| {SUBJECT}_LINK | Subject attached for a usage | *_usage + link_to_* |
link_to_domain— governed domain code (kind of target), not the entity table name.link_to_key— target header key (which instance).- Prefer one generic role/link table over exploding per-domain physical duplicates when the shape matches.
- Do not put attachment on the subject row —
location_usagelives on the link, notlocation_kindon the place.
Suffix cheat-sheet
| Suffix | Use |
|---|---|
| _kind | Species of row or edge |
| _type | Contextual role or event |
| _usage / _channel / _domain | Link or reach semantics |
Relationship grain stays relationship grain
Span/Publish may collapse identity subjects to one consume key. Roles and links stay at Conform relationship grain — filter by type; do not fold them into the collapsed subject facade.
Checklist
- Name Conform tables as entities — not FACT_/DIM_.
- Header hub + versioned assertions for each identity subject.
- Relationships in ROLE/LINK entities with type/usage + link_to_*.
- Prefer generic link tables when the join shape is shared.
- Money/events are assertions; Publish names KPIs later.
- Never collapse relationship entities into identity facades.
- Lock the entity list (forensic + AI + human) before adaptors bind.