Wednesday, July 1, 2026

Part 2 — Why Relational Joins Don't Translate to Semantic Search

 "Databases retrieve records. AI retrieves meaning. Those are fundamentally different problems."


Welcome Back

In Part 1, we introduced our Enterprise Order Management System (OMS) and the challenge of enabling an AI assistant to answer complex business questions.

We discovered an important reality:

The data already exists.

The business context does not.

Every answer the AI needs is distributed across multiple services:

  • Customer Service
  • Order Service
  • Product Catalog
  • Inventory Service
  • Payment Service
  • Warehouse Service
  • Shipping Service
  • Returns Service
  • Customer Support

The natural question many architects ask next is:

"Can't we simply retrieve the relevant records from each service and join them together?"

It's a reasonable assumption.

After all, relational databases have solved this problem for decades.

Unfortunately, semantic retrieval follows a very different set of principles.


Chapter 1 – How Databases Think

Traditional databases are designed around relationships.

Consider a simplified version of our Order Management System.

Customer
    │
    ├── Orders
    │      │
    │      ├── Order Items
    │      ├── Payments
    │      ├── Shipments
    │      └── Returns
    │
    └── Support Tickets

When a business application needs information, the database follows explicit relationships.

Foreign keys tell the optimizer exactly how records are connected.

A SQL query might join six or seven tables without difficulty.

The database engine knows:

  • where to start,
  • which indexes to use,
  • how to optimize execution,
  • and how to return a consistent result.

Relational databases are incredibly good at this.

Because they were designed for it.


Chapter 2 – How Vector Search Thinks

Now imagine the same data after generating embeddings independently.

Instead of relational records, we now have thousands—or millions—of vectors.

One vector represents a customer.

Another represents an order.

Another represents a shipment.

Another represents a payment.

Another represents a support ticket.

Each embedding captures only the meaning of its own record.

None of them understands the complete business story.

When a user asks:

"Which premium customers experienced delayed deliveries due to inventory shortages and later requested refunds?"

Vector search doesn't follow foreign keys.

It searches for semantic similarity.

It returns records that individually appear relevant.

Not records that collectively answer the business question.

This is a completely different retrieval model.


Chapter 3 – The First Solution Most Teams Try

At this point, many teams design a pipeline like this:

User Question
        │
        ▼
Generate Embedding
        │
        ▼
Search Customer Collection
Search Order Collection
Search Payment Collection
Search Shipment Collection
Search Support Collection
        │
        ▼
Join Everything
        │
        ▼
Send Context to LLM

At first glance, the architecture seems logical.

Each collection contributes part of the answer.

The LLM will combine everything together.

Problem solved.

Or so it seems.


Chapter 4 – Where the Architecture Starts to Break

Let's examine what actually happens.

Imagine each collection returns the five most relevant results.

Customer Collection      → 5 records
Orders Collection        → 5 records
Payments Collection      → 5 records
Shipments Collection     → 5 records
Returns Collection       → 5 records
Support Collection       → 5 records

The retrieval service now has 30 independent records.

But which payment belongs to which order?

Which shipment belongs to which customer?

Which refund corresponds to which delayed delivery?

Semantic similarity does not preserve business relationships.

The retrieval engine has no understanding of transactional consistency.

The application now needs to reconstruct those relationships manually.

In effect, we've recreated a distributed join engine—outside the database.


Chapter 5 – The Hidden Costs

This architecture introduces several challenges that are often underestimated.

Latency

Every additional collection increases retrieval time.

Instead of one retrieval operation, the system performs many.


Context Explosion

The LLM receives dozens of partially related records.

Many are irrelevant.

Some are duplicated.

Others contradict one another.

The prompt becomes larger, slower, and more expensive.


Poor Retrieval Precision

Each embedding represents only a fragment of the business context.

The search engine may retrieve the correct shipment but the wrong customer.

Or the correct customer but an unrelated refund.

Each retrieval is locally correct.

The final business answer is still wrong.


Operational Complexity

The retrieval layer gradually becomes responsible for:

  • joining records,
  • removing duplicates,
  • resolving relationships,
  • filtering irrelevant context,
  • assembling prompts,
  • handling missing data.

In other words, we've moved business logic from the application into the AI pipeline.


Chapter 6 – The Architect's Analysis

This is the point where many RAG implementations begin to struggle.

Not because the embedding model is weak.

Not because the vector database is slow.

Not because the LLM is inaccurate.

The architecture itself is asking the retrieval layer to solve a problem it was never designed to solve.

Databases retrieve structured relationships.

Vector search retrieves semantic similarity.

Those are fundamentally different responsibilities.

Recognizing that distinction is one of the most important architectural lessons when building Enterprise RAG systems.


Key Takeaways

Before moving forward, there are several principles worth remembering:

  • Database joins and semantic retrieval solve different problems.
  • Vector search cannot reconstruct business relationships from fragmented embeddings.
  • Retrieval-time joins increase latency and operational complexity.
  • Large prompts are often symptoms of poor data architecture rather than limitations of the LLM.
  • Enterprise RAG succeeds when business context is available before retrieval—not assembled afterward.

What's Next?

If joining data during retrieval is the wrong approach, then a more important question emerges:

"Should we change the retrieval process... or should we change the data itself?"

That question fundamentally changes the architecture.

In Part 3, we'll introduce the concept of Semantic Business Documents—a design pattern that transforms fragmented transactional data into rich business context before embeddings are ever generated.

In my experience, this is the architectural shift that separates proof-of-concept RAG systems from production-ready Enterprise AI platforms.

No comments:

Post a Comment

Part 7 — Enterprise RAG Reference Architecture

  "Architecture is not about connecting components. It is about defining responsibilities that can evolve independently." Welcome ...