What does each AIMS term mean?
Rather than restructuring source data to fit a modeling methodology, AIMS (AI-ready, Meaning-first Silver) starts with business meaning. Written so a machine can read it, your business model is an ontology. The business model plus the mappings that tie silver columns to it is the meaning layer.
A table can be tested yet silent about what its rows mean. Five meaning levels say how much it tells its reader: 0 Typed, 1 Identified, 2 Related, 3 Described and 4 Integrated.
Joins, codes and governance rules depend on columns that identify, relate, hold a code or hold sensitive data. So these critical columns must be mapped. The unit of work a set of tables is organized and generated in, a project, may add classes. Gold and agents may read a table once it publishes: level 2 complete, level 3 for its critical columns, its checklist passed. Elsewhere, attribute coverage measures mapping, and low coverage only warns.
Three systems can mean three things by customer. Each business thing your data is about, a business entity, gets a definition. How do you tell one instance from another? Five shapes answer, the entity classes: independent, dependent, event, reference and association.
An unnamed line leaves every report guessing. So a business relationship carries a role, a cardinality, an optionality and a policy for an unresolved reference. Count versions as customers and the answer’s wrong, so a table carrying an entity says what one row is in its grain sentence.
Every restructuring is a decision somebody must keep defending, so the silver layer’s default is one table per source table, at the same grain, typed and renamed, a source-aligned table. Its default materialization is a view over the layer below silver that keeps every version a source delivered, persistent staging, in bronze. That’s your audit trail, and it exists before silver starts.
Each row says which source record it is, its source primary key, and which version or event, its change sequence. History is chosen on purpose, as a history policy: append, current, versioned (Type 2) or snapshot. A silently dropped row is a lie in the row count, so each quality rule’s failure action warns, quarantines (sets the row aside, counted) or blocks.
Customer 123 in two systems can be two customers. A business key is the set of values the business uses to identify one thing, in a fixed order, such as a company code and an account number. It’s unique only inside the system that issued it, its record source. Written out in a business key column, it starts with the record source code: awlt||AU||00001042. Every reference needs one place to find its identity, the entity’s key register of distinct business keys.
Which column holds the customer’s name? One meaning, defined once on its entity, is a business attribute. An attribute mapping ties a column to it. Every column is mapped, source-only on purpose, or unmapped. Codes differ by system, so a code list holds the business values (reference data), and an approved code mapping (a value mapping) says, per record source, which source code means which.
An agent must know what one row is before it counts. A published table’s data contract projects what the catalog holds, down to its known limitations: unmapped columns and unmapped codes.
Integrating every source up front is costly. So AIMS integrates only when a business requirement calls for it. That’s integration by exception. Two record sources never join until matching gives their keys one shared key. A person approves the match rules and types a manual match where no rule can decide.
One combined record per business thing is a golden record. When sources disagree, a survivorship rule says which value wins.
Models are unreliable at what a key identifies. So above the approval boundary, a person approves every decision that changes meaning or values, however confident the model. Below the boundary, how much a person reviews is the AI recommendation workflow. Accepting is a decision, not authorship, so a value the AI proposed keeps the record of what proposed it, its provenance, until a person changes the value.
Other methods’ names
| The AIMS name | Hook | Data Vault | dbt |
|---|---|---|---|
| business entity | business concept | core business concept (a hub) | entity |
| business key | business key | business key | natural key |
| record source code | key set | business key collision code | source |
| business key column | hook column | business key column, hash key | (none) |
| source primary key | (none) | (none) | unique key |
| change sequence | (none) | load date | updated_at in snapshots |
| business attribute | (none) | satellite attribute | column |
| attribute mapping | (none) | (none) | (none) |
| code list, code mapping | (none) | reference table | seed |
| business relationship | compound hook | link | relationship test |
| source-aligned table | frame (formerly bag) | a raw satellite, loosely | staging model |
| key register | an implied hub | hub | (none) |
| shared key, matching | (none) | same-as link | (none) |
| golden record | (none) | business hub and business satellite | intermediate model |
| history policy | (none) | insert-only, Type 1, Type 2 | incremental, snapshot |
| failure action | (none) | (none) | warn, error |
Relationship kinds
| Kind | Carried as |
|---|---|
| Reference | many-to-one, with a role |
| Containment | the parent inside the child’s key |
| Hierarchy | a pointer to its own kind |
| Association | its own entity, a role per side |
| Classification | a code, beside any mapped value |
| Equivalence | shared keys, never a source column |
| Specialization | a kind of another entity |
Kinds name links, not entity classes. Each relationship states its cardinality (1:1, 1:N, M:N or N:1) and optionality. A row with an orphaned reference is allowed and counted, warned and flagged (the default), or quarantined.
Columns and source changes
| Order | Columns |
|---|---|
| 1 | business key columns: own identity, then each referenced role |
| 2 | source columns in order, typed and renamed, source-only ones kept |
| 3 | mapped values, beside the column each translates |
| 4 | quality flags for the warn rules a row broke |
| 5 | system columns: load timestamp, record source, hash difference, history dates and flags |
| Source change | Result |
|---|---|
| Deleted row | ignored, tombstoned, version closed, or hard deleted (append tables reloadable from persistent staging only) |
| Added column | unmapped, a finding, not a failure |
| Type change | quarantined at the cast |
| Removed column | kept, nullable and deprecated, until a person retires it |
Business keys
| Field | Holds |
|---|---|
| Key parts | in order, each a column or a fixed value, with its padding |
| Normalization | trim, upper-case and collapse whitespace |
| Separator | from Settings, one between parts |
| Entity | Record source code | Parts |
|---|---|---|
| Customer Account | awlt | company code, customer number padded to eight digits |
| Sales Order | awlt | company code, order number |
| Sales Order Line | awlt | company code and order number from its order, line number |
| Product | awlt | product number |
| Customer Account | wb | account identifier, upper-cased |
Types and mappings
| Semantic types | Type contract |
|---|---|
| identifier, code, name, free text, flag, geography, reference to another entity | an identifier keeps leading zeros, never summed |
| quantity, monetary amount, percentage, ratio, count | a monetary amount needs scale and currency |
| date, instant, duration | a date isn’t an instant |
| Sales order column | Business attribute | Type and role |
|---|---|---|
| company_code | Company Code | identifier, part of the business key |
| order_number | Order Number | identifier |
| customer_number | Sold-to Customer | relationship |
| bill_to_customer_number | Bill-to Customer | relationship |
| order_date | Order Date | date, temporal |
| amount | Order Amount | monetary amount, measure, currency from the currency column |
| currency | Order Currency | code, code list Currency |
| status | Order Status Code | code, code list Order Status |
The ninth, changed_at, is the source’s ChangedAt: the source change time and change sequence.
Publishing and matching
| Area | Acceptance checklist |
|---|---|
| Identity | grain confirmed, business key approved, uniqueness tested |
| Values | type contracts and units set |
| History | policy chosen, replay repeatable, time columns apart |
| Rules | orphans counted, failure actions set, row counts reconciled |
| Governance | lineage, ownership and classification on record |
| Matching | Holds |
|---|---|
| Match rules | exact matches after normalization, in order, each approved by a person |
| Manual matches | a person’s: business key, shared key, effective dates |
| Shared keys | on the key register, computed each run |
Templates and run metrics
| Kind | AIMS templates write |
|---|---|
| Structure | create statement, current view, key register view |
| Loads | the history policy’s load, the clean and quarantine pair |
| Expressions | business key columns, mapped values from code mappings |
| Tests | a data test per block rule |
| Grain | Every run measures |
|---|---|
| Table | quarantine rate, warn counts per rule, row count against source, freshness against the entity’s target |
| Business key | identity uniqueness |
| Relationship | orphan count |
| Entity | matching coverage and attribute coverage |
| Source | drift: columns added, removed or retyped since the last contract |
Agent instructions
| Instruction |
|---|
| Read the grain sentence first, name the counted thing, and on a version grain count keys, not rows. |
| Answer “when” from the time the question means (source change, effective or load), using the version valid then. |
| Join only along the contract’s relationships, by role, and name any join that changes the grain. |
| Add only what the semantic type allows, in one unit and currency, and recompute ratios from their parts. |
| Filter and group on mapped values, never source codes. |
| Take every metric and segment from the consumption layer’s definitions, inventing none. |
| Decline or qualify each clause with no mapping, naming the gap. |
| Cite the contract version, the tables read and the load behind them. |