Data modelers trained in the conceptual/logical/physical paradigm often struggle to grasp what fact-oriented modeling — and FCO-IM in particular — actually offers. This isn't a failure of intelligence; it's a collision of mental models. Traditional data modeling treats structure as the primary artifact. Fact-oriented modeling treats semantics as primary, with structure as a derivable consequence.
This distinction matters enormously when we move from project-level modeling to enterprise-scale concerns.
The Enterprise Modeling Problem
Enterprise Data Modeling aims to create shared models across an organization. In traditional approaches, this ambition quickly collides with reality: different departments have different constraints. Consider a simple fact:
Birthdate: "John Doe was born on 1-1-1982." (Or: Person was born on Date.)
For HR, birth date might be mandatory — required for benefits administration. For Marketing, it's optional — nice to have for birthday promotions, but not essential. For a medical research division, it might be mandatory and require additional precision rules.
Traditional enterprise modeling resolves this by choosing the lowest common denominator: make birth date optional, strip away the precision rules, and let each application layer add its own validation. The "shared" model becomes so generalized it loses semantic precision. What remains is not a meaningful enterprise model but a vague sketch that each team interprets differently.
Fact-oriented modeling offers a different path. The fact type Person was born on Date captures what is semantically true across the enterprise — persons have birth dates. This is the shared vocabulary. Constraints — whether the attribute is mandatory, what precision is required, what validation applies — become contextual annotations rather than structural commitments.
The enterprise layer becomes a shared vocabulary, not a shared structure.
What Traditional Modelers Cannot See
There is a further blind spot that deserves attention: foreign keys hide populated fact types.
In a traditional data model, a relationship between tables appears as a line — perhaps with a verb phrase label, perhaps with crow's feet indicating cardinality. That line represents a foreign key constraint. But what is actually being modeled?
Consider Employee works in Department. In fact-oriented modeling, this is a fact type with:
- Its own population (actual employee-department pairs)
- Its own semantics (what does "works in" mean?)
- Its own metadata (source system, SME, considerations)
- Its own annotations (temporal? transitional? annotatable?)
In a traditional ER diagram, this same reality might appear as:
- A foreign key
DepartmentIDin theEmployeetable, or - A linking table
Employee_Departmentif many-to-many, or - An attribute if denormalized
The visual representation — a line between boxes — gives no indication that this represents data in its own right. There is no natural place to document the semantics of the relationship. There is no recognition that this "line" could have its own history, its own sources, its own annotations.
The Constraint Determines the Representation
Here is the deeper issue: in fact-oriented modeling, the fact type exists first. The constraints then determine how it manifests physically:
| Constraint | Physical Representation |
|---|---|
| Many-to-one, mandatory | Foreign key column in the "many" table |
| Many-to-one, optional | Nullable foreign key column |
| Many-to-many | Linking table |
| One-to-one, identifying | Merged into single table |
The same semantic unit — Employee works in Department — can appear in radically different structural forms depending on constraints. Traditional modelers see only the structural form. They cannot see the underlying fact type that all these forms represent.
This matters because:
- Documentation attaches to the wrong place. Comments on a foreign key column describe a constraint, not the relationship itself.
- The population is invisible. A foreign key is a reference, not a recognition that "employee-department assignments" is a dataset with its own lifecycle.
- Semantic questions have nowhere to live. What does "works in" mean? Is it primary assignment? Physical location? Reporting line? The line between boxes cannot answer.
Fact-oriented modeling keeps the fact type visible regardless of how constraints shape its physical form. The relationship is always a first-class citizen with its own identity, population, and documentation — not a line that might or might not get a verb label.
The Hidden Grouping Operation
Here lies another deep conceptual gap. Traditional modelers treat the entity as a primitive — a starting point. Columns are properties of that entity. The primary key identifies the entity. This seems natural because they have never worked at a level where entities don't yet exist.
In fact-oriented modeling, object types are derived, not assumed. You begin with roles in fact types. An object type emerges when you recognize that the same kind of thing plays roles across multiple fact types — so you group those roles and give the grouping a name.
Example: The Hidden Grouping
Consider how a traditional modeler might design an order system:
ORDER (OrderID, OrderDate, CustomerID, TotalAmount)
This feels atomic — an Order is a thing with properties. But decompose it into facts:
- Order was placed on Date
- Order was placed by Customer
- Order has TotalAmount
Now ask: what is an Order? It's whatever plays the first role in each of these fact types. The "OrderID" isn't an identifier of some pre-existing thing — it's the name we give to a grouping of roles. The entity "Order" is the objectification of that grouping.
This reframes everything:
-
A primary key is not an identifier — it's an objectification. You're taking a combination of roles, grouping them, and declaring "this grouping is a thing we can refer to."
-
Composite keys become natural, not awkward. In ER thinking, composite keys feel like exceptions. In fact-based thinking, they're simply a grouping of more roles. The operation is identical whether you group one role or five.
-
The grouping operation becomes visible. Traditional modelers perform this grouping constantly — they just cannot see themselves doing it. Fact-oriented modeling makes the choice explicit, which means you can question it, justify it, or decide differently.
Example: Alternative Groupings
Take a flight booking domain. Traditional modeling might produce:
FLIGHT (FlightNumber, DepartureCity, ArrivalCity, DepartureTime)
BOOKING (BookingID, FlightNumber, PassengerID, SeatNumber)
But consider the underlying facts:
- Flight departs from City
- Flight arrives at City
- Flight departs at DateTime
- Booking is for Flight
- Booking is for Passenger
- Booking assigns Seat
Is "Flight" really the natural grouping? Or might "Route" (the departure/arrival city pair) be objectified separately? Should "FlightLeg" exist as its own object type? These are design choices that traditional notation obscures. Fact-oriented modeling forces you to confront them.
Technical Decisions as Annotations, Not Architecture
Perhaps nowhere is the contrast starker than in how each paradigm handles cross-cutting technical concerns.
Temporality
In traditional data modeling, making something temporal demands structural redesign:
- Add effective and expiry date columns
- Create history tables
- Implement slowly changing dimension patterns (Type 1, Type 2, Type 6...)
- Restructure queries to handle time-variant joins
The model mutates. What was a simple table becomes a complex temporal structure.
In CaseTalk, temporality is an annotation on the fact type. The fact Employee works in Department means exactly what it means. Checking the "temporal" option instructs the generator to produce time-aware structures. The semantic model remains unchanged.
Transitional (Multi-Source) Facts
In enterprise environments, the same fact type often receives data from multiple source systems — and those sources may conflict. Consider Customer lives at Address: HR has one address, CRM has another, and the shipping system has a third.
Traditional data modeling handles this through architectural decisions:
- Designate a single authoritative source (losing the others)
- Create separate columns per source (
HR_Address,CRM_Address) - Build complex reconciliation logic into ETL processes
- Implement master data management infrastructure
Each approach embeds the multi-source problem into the structure itself.
In CaseTalk, marking a fact type as transitional acknowledges that multiple sources may populate it with potentially conflicting values. The semantic meaning — Customer lives at Address — remains unchanged. The transitional annotation signals that the implementation must accommodate source tracking, conflict detection, and reconciliation workflows. The model captures what is being said; the annotation addresses who is saying it and how disagreements are handled.
Localization
Supporting multiple languages in traditional modeling typically requires:
- Adding language code columns
- Creating translation tables
- Possibly switching to EAV (Entity-Attribute-Value) patterns
- Restructuring queries for language-aware retrieval
In CaseTalk, localizability is another annotation. The fact Product has Description remains semantically stable. The "localizable" flag determines whether the generated schema includes language handling.
Annotatable (User Notes on Records)
Business users often need to attach notes to individual records: why was this price overridden? What was the justification for this exception? Who approved this change and under what circumstances?
Traditional data modeling accommodates this through structural additions:
- Add a
NotesorCommentscolumn to the table - Create a separate comments table with foreign keys
- Build audit trail tables that capture change reasons
- Implement workflow tables linking approvals to record changes
Each approach adds tables, columns, and relationships. The "simple" entity grows increasingly complex, and the pattern must be repeated for every entity requiring this capability.
In CaseTalk, marking a fact type as annotatable signals that individual fact instances can carry user-provided notes. The fact type Order has TotalAmount remains semantically clean. The annotatable flag instructs the generator to produce structures that support per-record commentary — without cluttering the conceptual model with implementation details.
Why This Matters for Enterprise Modeling
These annotations reveal another dimension of the lowest-common-denominator problem. When enterprise modelers must commit structurally to temporality, event-orientation, or localization, they face an impossible choice:
- Force every consuming system into one approach, or
- Strip out these capabilities entirely from the shared model
Neither is acceptable. The annotation approach means these decisions can be made per context without fragmenting the shared semantic layer.
Traceability at the Right Granularity
There is a further advantage that emerges from working at the fact type level: documentation and metadata attach where they actually belong.
In traditional entity-based modeling, documentation lives at the entity or attribute level. You might annotate the Customer entity with its source system, or add a comment to the BirthDate column explaining a business rule. But this granularity is often wrong.
Consider: who provided the knowledge that customers have birth dates? That's different from who provided the knowledge that customers have email addresses. What source system is authoritative for the birth date? That may differ from the source for email. What were the considerations around making birth date mandatory? Those discussions have nothing to do with email requirements.
When documentation attaches at the entity level, these distinct concerns collapse into a single annotation blob — or worse, go undocumented because there's no natural place to put them.
Fact-Level Metadata
In fact-oriented modeling, each elementary fact type is an independent semantic unit. This means each can carry its own metadata:
| Fact Type | Source System | SME | Considerations |
|---|---|---|---|
| Customer was born on Date | HR Master | J. Smith (HR) | Required for benefits; privacy review completed 2024-03 |
| Customer has EmailAddress | CRM | M. Jones (Marketing) | Multiple emails under discussion; currently modeled as primary only |
| Customer lives at Address | CRM + HR | Both departments | Conflict resolution: CRM is authoritative for mailing; HR for legal residence |
Each fact type becomes a traceable unit with:
- Source attribution — which system or document provided this knowledge
- Subject matter expert — who validated or contributed this fact type
- Decision history — what alternatives were considered, what was decided and why
- Compliance notes — privacy classifications, retention rules, regulatory considerations
- Change history — when the fact type was introduced, modified, or deprecated
Why This Matters
This granularity becomes critical for:
Data lineage. When a downstream report shows incorrect birth dates, you can trace back to the specific fact type, its authoritative source, and the SME responsible — without wading through entity-level documentation that conflates unrelated attributes.
Impact analysis. When a source system changes, you can identify exactly which fact types are affected. The impact is precise, not "somewhere in the Customer entity."
Knowledge preservation. When the original SME leaves the organization, their contribution is documented at the level where they actually provided input — specific fact types — not lost in generic entity descriptions.
Audit and compliance. Regulators increasingly demand data lineage at the field level. Fact-based models naturally support this because the semantic unit (fact type) aligns with what auditors actually want to trace.
Traditional modeling can attempt this through extensive attribute-level comments, but it fights against the grain of the paradigm. In fact-oriented modeling, this traceability is natural because the primary unit of work — the elementary fact type — is exactly the right granularity for attaching meaning, provenance, and governance metadata.
The Derivation Argument
From a properly grounded fact-based model, you can derive:
- Entity-Relationship diagrams
- Relational schemas
- XML structures
- Graph database schemas
- API specifications
The reverse transformation — from ER to fact-based — loses information. This isn't methodological arrogance; it's a mathematical property of abstraction levels. The fact-based model contains more semantic information than any of its derived representations.
This means fact-oriented modeling isn't competing with traditional approaches. It sits beneath them, providing a stable semantic foundation from which multiple physical representations can be generated.
Shifting the Conversation
When communicating with traditional data modelers, a few approaches help:
Ask what changes most often. In their experience, what triggers model revisions? Usually it's constraints — cardinalities shift, optionality changes, business rules evolve. The underlying things and relationships remain relatively stable. Fact-oriented modeling aligns with this reality: fact types are stable; constraints are contextual.
Challenge them with population. Can their conceptual model hold actual data? Traditional conceptual models cannot — they are documentation, not working semantics. A fact-based model is populated from the start. This makes the model testable against reality from day one.
Demonstrate decomposition. Take one of their entities and decompose it into constituent facts. Show that what they call an entity is really a bundle of roles that could have been grouped differently. Once they see that the grouping was a choice rather than a given, the conversation shifts.
Show the stability. Model a simple domain in both paradigms. Then announce: "Now make it temporal." Watch the traditional model undergo surgery while the fact-based model gains an annotation. The demonstration speaks louder than any theoretical argument.
A Natural Fit for AI and Large Language Models
There is a final advantage that positions fact-oriented modeling for the emerging era of AI-assisted systems: LLMs thrive on exactly what fact-based models provide.
Large Language Models are fundamentally about language and meaning. They excel when given:
- Clear, verbalized semantics (fact types are natural language expressions)
- Taxonomic structure (object types organized in hierarchies)
- Ontological relationships (how concepts relate to each other)
- Concrete examples (populated fact instances)
- Contextual metadata (sources, constraints, considerations)
A well-constructed FCO-IM model delivers all of this in one integrated package. When you expose a CaseTalk model to an LLM, you're not handing it a technical schema that requires interpretation — you're giving it a semantically rich knowledge base expressed in terms it can directly reason about.
What Traditional Models Lack
Consider what a traditional ER diagram or relational schema provides to an AI:
- Table and column names (often abbreviated or technical)
- Data types and constraints (structural, not semantic)
- Foreign key relationships (mechanical links, not meaning)
The AI must infer what CUST_ADDR_EFF_DT means. It must guess the business significance of relationships. It has no access to why certain design decisions were made, what alternatives were considered, or what the actual business vocabulary is.
The Integrated Advantage
A fact-oriented model combines what other approaches scatter across disconnected artifacts:
| Concern | Traditional Approach | Fact-Oriented Model |
|---|---|---|
| Taxonomy | Separate glossary documents | Object type hierarchy in the model |
| Ontology | Conceptual diagrams (if they exist) | Fact types expressing relationships |
| Semantics | Data dictionaries (often outdated) | Verbalized fact types as primary artifact |
| Examples | Test data (disconnected from model) | Population directly in the model |
| Metadata | Scattered comments, external wikis | Attached to elementary fact types |
When an LLM can access all of this through a single model, conversations about the domain become precise and grounded. You can ask: "What do we know about customers?" and receive an answer drawn from actual semantic structure, not inferred from cryptic column names.
Toward Conversational Modeling
This integration points toward a future where domain experts interact with models through natural language — asking questions, proposing changes, exploring implications — with the LLM serving as an intelligent interface to the semantic foundation.
The richer the model, the more powerful that conversation becomes. Fact-oriented modeling, with its emphasis on verbalization, its accommodation of metadata at the fact level, and its integration of examples with structure, provides exactly the semantic density that makes such conversations productive.
Traditional modeling methods, designed for human-to-database translation, lack the semantic richness that AI systems need. Fact-oriented modeling, designed for human-to-human communication about data, turns out to be precisely what human-to-AI communication requires.
Conclusion
The gap between fact-oriented modeling and traditional data modeling is not about better or worse — it's about operating at different levels of abstraction. Traditional modeling begins with structure and embeds semantics. Fact-oriented modeling begins with semantics and derives structure.
For project-scale work, either approach can succeed. For enterprise-scale integration, the semantic foundation becomes essential. When the shared layer must accommodate varying constraints, temporal requirements, localization needs, and event-orientation — all without fragmenting into departmental silos — fact-oriented modeling offers something traditional approaches cannot: a stable vocabulary from which diverse implementations can be generated.
The conversation changes when modelers realize that what they've been treating as primitives are actually derived. Entities emerge from facts. Structure follows semantics. And the choices they've been making invisibly can finally be seen, questioned, and improved.


