A schema tells an AI what exists. It does not tell the AI what the data means, how it should be connected, or when it should not be used.
For decades, enterprise databases have been designed primarily for developers, data engineers, and analysts.
That design worked because humans supplied the missing context.
An experienced analyst knows that invoice_amount is not the same as recognized revenue.
A data engineer knows that two tables should not be joined directly even though their IDs look compatible.
A finance team knows that created_at is an operational timestamp while financial reporting should use settlement_date.
None of this knowledge has to exist in the physical schema for humans to work effectively.
AI agents change that assumption.
If an agent is expected to query enterprise data directly, the data model must communicate much more than:
table
column
type
The real engineering question becomes:
What information does an AI system need before enterprise data becomes reliably usable?
I think the answer is larger than schema retrieval and embeddings.
A useful model is:
AI-Readable Data
=
Meaning
+
Structure
+
Relationships
+
Usage Rules
+
Trust
## 1. Machine-Readable Is Not AI-Readable
Consider this schema:
CREATE TABLE sales_order (
order_id BIGINT,
customer_id BIGINT,
total_amount DECIMAL(18,2),
created_at TIMESTAMP,
status VARCHAR(20)
);
A model can parse it.
It knows that total_amount is numeric and created_at is temporal.
But it still does not know:
Does total_amount include tax?
Are cancelled orders included?
Is total_amount order value or recognized revenue?
Should created_at be used for financial reporting?
How does customer_id map across CRM and ERP?
Can this table be joined directly to invoice?
The schema describes structure.
Enterprise analytics requires usage context.
That gap is where many AI data failures begin.
## 2. Descriptions Help, but They Do Not Solve the Problem
A common improvement is to add table and column descriptions:
table: sales_order
columns:
total_amount:
type: decimal
description: Total amount of the sales order.
created_at:
type: timestamp
description: Time when the order was created.
This is useful metadata.
But now ask:
What was revenue last quarter?
The description still does not tell the model whether total_amount should be used as Revenue.
A technically accurate description can still be insufficient for analytical reasoning.
The missing information is not:
What is this column?
It is:
When is this column valid for a business question?
## 3. Meaning Should Be Explicit
Suppose the warehouse contains:
sales_order.total_amount
invoice.invoice_amount
finance_revenue.recognized_amount
payment.received_amount
All four fields may be retrieved for the word:
Revenue
Embedding similarity is doing exactly what it should.
The fields are semantically related.
But enterprise AI needs a stronger object:
metric:
id: revenue
name: Revenue
version: 2.1
definition:
business_term: Recognized Revenue
aggregation: SUM
source:
table: finance_revenue
column: recognized_amount
time:
field: recognition_date
This changes the problem from:
Which revenue-like field should the model choose?
to:
Retrieve the governed Revenue definition.
That is a much more reliable operation.
## 4. Relationships Need to Be First-Class Context
Even perfect semantic definitions are not enough for multi-table analytics.
Suppose a user asks:
Which customers have unpaid invoices?
The system may need:
Customer
↓
Order
↓
Invoice
↓
Payment
But real enterprise schemas often do not contain complete foreign keys.
A relationship may exist because:
order.customer_id
and:
customer.customer_id
share values.
One useful relationship signal is inclusion:
Inclusion(A → B)
=
|distinct(A) ∩ distinct(B)|
---------------------------
|distinct(A)|
where:
A = order.customer_id
B = customer.customer_id
If the inclusion ratio is high and B has high uniqueness, the system has evidence for a possible reference relationship.
Relationship discovery can combine:
Database Constraints
Column Names
Value Inclusion
Uniqueness
Business Validation
Then relationships can move through states:
Discovered
↓
Candidate
↓
Validated
↓
Trusted
At query time, the AI should prefer trusted relationships instead of reconstructing joins from scratch.
## 5. Positive Knowledge Is Only Half the Model
Most semantic systems are good at representing positive knowledge:
Revenue uses recognized_amount.
But production systems also need negative knowledge:
Do NOT use invoice_amount as Revenue.
That distinction is more important than it looks.
Imagine:
field:
table: sales_order
name: total_amount
usage:
valid_for:
- order_value
- sales_volume
invalid_for:
- recognized_revenue
- cash_collection
Now the system knows both:
What this field can answer.
and:
What this field must not answer.
Humans use this kind of knowledge constantly.
We say:
Don't use that table for finance.
Don't join those tables directly.
Don't use created_at for reporting.
That field looks like customer_id, but it is actually account_id.
These constraints often exist only as tribal knowledge.
For AI systems, they should become structured context.
## 6. Why Negative Knowledge Matters for Retrieval
Suppose a vector search for:
customer revenue
returns:
sales_order.total_amount score 0.91
invoice.invoice_amount score 0.89
finance_revenue.recognized_amount score 0.87
A naive retrieval pipeline might choose the highest score.
But relevance is not authority.
If the governed context says:
sales_order.total_amount
invalid_for: recognized_revenue
the retrieval system can exclude or penalize that candidate.
Conceptually:
def rank_candidate(candidate, query_context):
score = candidate.semantic_similarity
if candidate.is_authoritative_for(query_context.metric):
score += AUTHORITY_BONUS
if candidate.is_invalid_for(query_context.metric):
score -= INVALID_USAGE_PENALTY
return score
The important shift is that retrieval is no longer based only on similarity.
It becomes:
Similarity
+
Business Validity
+
Trust
+
Usage Constraints
## 7. Usage Rules Should Be Machine-Consumable
A free-text description such as:
This table is generally used for order reporting and should normally not be used for financial revenue reporting.
is useful to humans.
For AI systems, structured rules are easier to enforce:
table: sales_order
valid_for:
- order_analysis
- sales_pipeline
invalid_for:
- recognized_revenue
- financial_close
preferred_time_field:
order_analysis: created_at
constraints:
- exclude_cancelled_orders
This does not mean every business rule must become rigid YAML.
Some rules remain contextual.
But high-value, frequently reused constraints should be represented in a form tools and agents can consume deterministically.
## 8. Trust Signals Resolve Competing Context
Enterprise systems frequently contain multiple definitions.
For example:
Revenue v1.8
Revenue v2.0
Revenue v2.1
Or several candidate relationships:
Customer → Order
Customer → Account → Order
Customer → Contract → Order
An AI-readable context needs signals that help select among them.
For example:
metric:
id: revenue
version: 2.1
status: active
owner: finance
effective_from: 2026-01-01
validated: true
A relationship might include:
relationship:
id: rel_customer_account
status: trusted
confidence: 0.97
validated_by: data_governance
Now retrieval can distinguish:
Relevant
from:
Relevant + Authoritative
That difference matters in production.
## 9. AI-Readable Context Can Be Built as a Data Object
A richer representation for a field might look like:
field:
table: sales_order
name: total_amount
type: decimal
meaning:
business_term: Order Value
description: Confirmed sales order value
structure:
nullable: false
distinct_ratio: 0.84
relationships:
- target: customer.customer_id
via: sales_order.customer_id
status: trusted
usage:
valid_for:
- order_analysis
- sales_volume
invalid_for:
- recognized_revenue
- cash_received
trust:
owner: sales_operations
status: active
validated: true
This object contains far more actionable context than:
total_amount DECIMAL
or even:
Total amount of the sales order.
## 10. Build Query Context From AI-Readable Objects
Once these objects exist, query-time context construction becomes more reliable.
Suppose the question is:
Show recognized revenue by customer for last quarter.
A context builder could resolve:
Business Metric
→ Revenue v2.1
Dimension
→ Customer
Relevant Sources
→ finance_revenue
→ customer
Trusted Relationship
→ finance_revenue.customer_id
→ customer.customer_id
Time Field
→ recognition_date
Excluded Candidates
→ sales_order.total_amount
→ invoice.invoice_amount
The resulting model context can be compact:
metric:
name: Revenue
source: finance_revenue.recognized_amount
aggregation: SUM
dimension:
name: Customer
source: customer.customer_name
relationship:
finance_revenue.customer_id -> customer.customer_id
time_field:
finance_revenue.recognition_date
do_not_use:
- sales_order.total_amount
- invoice.invoice_amount
The LLM no longer needs to infer the enterprise model from raw schema.
It receives an instruction-ready representation.
## 11. This Is More Than RAG
A standard RAG pipeline looks like:
Question
↓
Embedding
↓
Retrieve Relevant Context
↓
LLM
An AI-readable data layer introduces additional steps:
Question
↓
Resolve Business Concepts
↓
Retrieve Relevant Data Objects
↓
Apply Usage Constraints
↓
Prefer Trusted Definitions
↓
Resolve Relationships
↓
Build Query Context
↓
LLM
The goal is not merely:
Find context.
It is:
Find context that is valid for this analytical task.
## 12. AI-Readable Data Should Be Model-Independent
One architectural mistake is putting all of this context inside a model-specific system prompt.
For example:
If user asks Revenue, use table X.
Never join A directly to B.
For finance reporting use settlement_date.
...
That works initially.
But the knowledge becomes coupled to one agent implementation.
A better architecture keeps enterprise data knowledge outside the model:
AI Agent
↓
Context Resolver
↓
AI-Readable Data Layer
↓
Enterprise Data
Then different agents can consume the same knowledge:
Sales Agent
Finance Agent
Analytics Agent
Operations Agent
The model can change without rebuilding the enterprise's data understanding.
## 13. AI-Readable Data Needs a Lifecycle
This context cannot be static.
Schemas change.
Metrics change.
Relationships change.
Usage rules change.
So the system needs:
Discover
↓
Validate
↓
Publish
↓
Monitor
↓
Detect Change
↓
Update
For example, if:
Revenue v2.1
becomes:
Revenue v2.2
the old version should not silently disappear.
Historical queries may still need to be reproduced.
The same applies to relationships and usage constraints.
## 14. A Practical Architecture
One possible design:
Enterprise Data
│
▼
┌─────────────────────┐
│ Metadata Extraction │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ Relationship │
│ Discovery │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ Semantic / Metric │
│ Governance │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ Usage Rules & │
│ Negative Knowledge │
└──────────┬──────────┘
│
▼
AI-Readable Data Objects
│
▼
Context Resolver
│
▼
AI Agent
The point is not that every implementation needs these exact services.
The important idea is the separation between:
Raw Enterprise Data
and:
Context AI Can Reliably Use
## 15. What Should Be Measured?
If AI-readability becomes a real engineering objective, teams can measure it.
Possible metrics include:
Semantic Coverage
% of important tables / fields mapped to business concepts
Relationship Coverage
% of frequently queried multi-table paths represented as validated relationships
Usage Rule Coverage
% of high-value data objects with explicit valid / invalid usage
Trusted Context Resolution Rate
% of queries where metric + sources + relationships
are resolved without free-form LLM inference
Negative Constraint Hit Rate
How often invalid candidates are removed
because of explicit usage constraints
These metrics move the conversation from:
Our documentation is better.
to:
Our data is increasingly usable by AI systems.
## 16. The New Definition of Data Readiness
Traditional data readiness asks:
Is the data available?
Is it clean?
Is it integrated?
Is it documented?
AI adds another requirement:
Can an AI determine:
- what the data means,
- how it connects,
- when it is valid,
- when it is invalid,
- and why it should be trusted?
That is a much stronger definition.
## Final Thoughts
Enterprise AI is exposing a problem that humans have hidden for years.
Our data models often depend on undocumented organizational knowledge.
Experienced people know:
which field to use,
which table not to use,
which relationship is valid,
which timestamp matters,
which definition is authoritative.
AI does not automatically know any of that.
So the goal should not be merely to give AI access to more schemas.
The goal should be to make enterprise data AI-readable.
That means representing:
Meaning
Structure
Relationships
Usage Rules
Trust
And especially the knowledge most systems still ignore:
What the AI should not do with the data.
Sometimes the difference between a demo and a production data agent is not another model upgrade.
It is one critical piece of enterprise knowledge:
Don't use this data that way.

Top comments (0)