CRISPcore

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).

Three-source Venn: native name spellings outside, programme canon name at the common intersectionSystem AnameSystem BcustomerSystem CpreferredCANONname

Lobes — native labels

Common ∩ — locked name

A · B · C — discrete sources

Shape Conform around the ∩: shared enterprise entities and attributes across same-type vendors / systems / sources. Lane-only detail stays outside as extensions — not parallel FACT tables per source.

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.

StandardIndustriesCoversSource
ACORD IM / NGDSInsurance, reinsurance, brokersParty, Agreement, Claim, Role, Place, Financeacord.org
HL7 FHIR R4Healthcare, payers, HIEsPatient, Encounter, Claim, Medication, Observationhl7.org/fhir
FIBOBanks, capital markets, finance dataParties, instruments, contracts ontologyedmcouncil.org
ISO 20022Payments, securities messagingPayments & regulatory message semanticsiso20022.org
IFRS 18Group finance, consolidationFinancial statement presentationifrs.org
TM Forum SIDTelecom, digital servicesCustomer, product, service, resourcetmforum.org
IEC CIMUtilities, grid, energy marketsNetwork assets, meters, settlementcim-mg.ucaiug.io
GS1 EPCIS 2.0Supply chain, pharma/food traceWhat / when / where / why eventsgs1.org
ARTS ODM / POSLogRetail, POSMerchandise & POS transactionsomg.org/retail
ISO IDMPLife sciences, pharmaMedicinal product identificationema.europa.eu
OPC UA 40010-1Robotics, manufacturingRobot asset & state semanticsopcfoundation.org
XTCE / CCSDSSpace & satellite opsTM/TC dictionaries, space packetsomg.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

Conform sits closest to an integrated enterprise model; dimensional shapes belong on Publish for consumers — not as Conform FACT_* tables.
SchoolOptimisesCRISP take
InmonIntegrated subject-area CIFClosest spirit for Conform — shared enterprise entities. CRISP adds tritemporal assertions, Rules, Identity, Span/Publish.
KimballAnalytic fact + dim grainsFine for consumer ergonomics over Publish — not the Conform truth model. Do not name Conform tables FACT_*.
Data VaultAudit hubs / links / satsExcellent upstream or parallel history. Not a substitute for typed Conform, Rules, or Identity.
MedallionBronze → silver → gold hygieneLanding/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

Sparse header hub is the stable join anchor; assertion rows version business/system belief underneath.
ObjectRole
{SUBJECT}_HEADERStable 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.

Header + assertion pattern
{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 payload

Entity vs domain

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 · …

Relationships live on ROLE/LINK entities — qualified by type/usage and scoped with link_to_domain + link_to_key (target header).
PatternWhenQualify with
{SUBJECT}_ROLESubject plays a role in a contextrole_type + link_to_domain / link_to_key
{SUBJECT}_LINKSubject attached for a usage*_usage + link_to_*

Suffix cheat-sheet

SuffixUse
_kindSpecies of row or edge
_typeContextual role or event
_usage / _channel / _domainLink 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

  1. Name Conform tables as entities — not FACT_/DIM_.
  2. Header hub + versioned assertions for each identity subject.
  3. Relationships in ROLE/LINK entities with type/usage + link_to_*.
  4. Prefer generic link tables when the join shape is shared.
  5. Money/events are assertions; Publish names KPIs later.
  6. Never collapse relationship entities into identity facades.
  7. Lock the entity list (forensic + AI + human) before adaptors bind.