Search

The Associative Model of Data

5 min read
2 views

Relational Databases: History, Power, and Pain Points

In the early 1980s, Edgar Codd published a paper that would change the way data is stored forever. By applying predicate logic, he defined the relational model, a way to organize information into tables linked by keys. That idea spread quickly. Software vendors embraced it, customers adopted it, and a single data architecture came to dominate the market. The result was a standard that, over the last three decades, has powered everything from enterprise resource planning systems to mobile applications.

It is easy to look back at those days and assume the relational model solved all problems. In reality, its strengths - well‑defined schema, easy query writing, strong consistency guarantees - often come at a cost. New applications need custom code to map real‑world concepts into tables, and that mapping can be tedious and expensive. When a project changes, the whole schema and the supporting codebase may have to be rewritten.

Another frequent complaint comes from application service providers who must deliver a personalized experience to a large number of customers. The relational model insists on a one‑size‑fits‑all schema. Adding a feature that applies only to a subset of users can create a table of fields that most users never use. Those unused columns end up with null values, increasing storage use and making queries slower.

Customer‑centric data is a third pain point. Imagine you want to record a particular preference for a single user - say, a preferred email address format. In a traditional relational design, that preference must belong to the same table that holds all other user data. If you add a new preference type, you add a column to the table, but that column still appears for every user, even if they never set that preference. The result is a database littered with nulls and a maintenance headache.

When different departments or even different companies try to combine their data, the relational model shows its limits. Two databases may both hold a table called “Customer” but structure it differently: one may use a separate “CustomerAddress” table while another stores the address inline. Merging those tables is a complex process involving data transformation, schema mapping, and a lot of code to keep the merged database consistent.

These shortcomings are not minor annoyances. They shape the daily work of developers, database administrators, and data architects. In practice, the time spent writing glue code and maintaining schemas can outstrip the time spent building new features. That creates an environment where the system is more of a liability than an asset.

Because of these challenges, people have looked beyond the relational model. The search has focused on ways to keep the power of relational queries while adding flexibility, reducing code bloat, and simplifying data integration. One proposal that has generated recent interest is the Associative Model of Data, introduced by Simon Williams, CEO of LazySoft Ltd.

Williams argues that the relational model’s core assumption - that every piece of data belongs to a fixed table - clamps down on natural relationships between facts. The Associative Model, by contrast, treats data as a network of connected entities and associations, similar to how language forms sentences. This perspective can cut the overhead of managing nulls, make it easier to extend a database for individual users, and lower the friction of merging disparate data sources.

In the next section we will dive into the mechanics of the Associative Model, explaining how it maps real‑world relationships into a structure that feels more like human conversation than rigid tables.

What Is the Associative Model? A Sentence‑Based Data Paradigm

The core idea behind the Associative Model is simple: data is expressed as sentences that link entities with associations. Each sentence resembles a subject‑verb‑object construction from everyday language. Take “John likes apples.” Here “John” and “apples” are entities - things that exist on their own - while “likes” is the association that ties the two together.

Entities are defined by their independent existence. A person, a product, or a piece of equipment can be an entity. Associations, on the other hand, are context‑dependent. They describe a relationship that holds between entities, and they can disappear when the context changes. For instance, a person may be a programmer, a soccer player, or a guitarist at different times. Each role is an association; if the person stops playing soccer, that association fades but the person entity remains.

Because associations depend on the entities they connect, the model naturally supports nested relationships. A complex sentence can be broken down into smaller pieces, each represented by an association. Consider “Mike sends email on Tuesdays before 10:30.” The outer association is “sends.” The next level adds the modifier “on Tuesdays,” and the innermost modifier is “before 10:30.” In a diagram, each modifier would be a node linked to the previous node, forming a chain that mirrors the natural hierarchy of the sentence.

To represent this in the database, you would create an association record for each link. For example, an association “Mike sends email” would have a child association “on Tuesdays,” which itself has a child association “before 10:30.” Each association carries its own metadata - timestamps, ownership, permissions - allowing the system to manage each link independently.

The syntax can also be written with parentheses to make nesting explicit: ((Mike sends email) on Tuesdays) before 10:30. The parentheses indicate the grouping of associations, and the ellipsis used in the earlier example serves the same purpose. This notation makes it easy for developers and users to read and write complex relationships without writing lengthy join queries.

Mapping this structure onto a relational database is possible, but it requires a separate table for each entity type and another table for each association type. That approach defeats the purpose of the Associative Model, which seeks to avoid rigid table schemas. Instead, the Associative Model stores all entities in a single table, each identified by a unique key. All associations share a second table that records the source entity, the target entity, the association type, and any additional attributes.

With this flat structure, the database can represent thousands of different kinds of relationships without changing the schema. Adding a new type of association is as simple as inserting a new row into a lookup table that defines the association. There is no need to alter tables or update application code that expects a fixed set of columns.

Because the model follows the flow of natural language, developers find it intuitive to model real‑world scenarios. The sentence “John is the CEO of Acme Corp.” can be expressed as an entity “John” linked to an entity “Acme Corp” through the association “CEO of.” If later John becomes CFO, the old association can be marked as inactive, and a new “CFO of” association can be created. The history of relationships is preserved without cluttering the schema.

In the next section we will see how this design philosophy translates into tangible benefits for everyday database tasks, such as handling variable‑length fields, merging data from multiple sources, and tailoring data to individual users.

Concrete Advantages of Associative Databases: Flexibility, Integration, and User‑Centric Design

One of the most immediate gains when switching from a relational model to an associative one is the elimination of null columns. In the classic example of a survey table where each question can have a different number of responses, a relational design forces you to create a column for each possible response. If a question only has three options, two columns will remain empty. In an associative database, each answer becomes an entity linked to the question through a “has‑answer” association. The number of columns is constant regardless of how many options a question offers, so there are no wasted spaces.

This approach scales naturally. If you later add a new question with ten answers, you simply create ten new answer entities and link them to the question. No schema changes, no code modifications, no nulls. The same pattern works for other variable‑length data, such as user preferences, product attributes, or event logs. Each piece of information becomes a discrete entity, and the associations that describe how it relates to other entities can be extended on the fly.

Flexibility also helps when you need to adapt the database for a specific customer. An application service provider may have a dozen clients, each requiring a small tweak to the data model - perhaps one client needs to store a custom field for a tax code. In the relational world, that would mean adding a new column to the client’s tables, running a migration script for each client, and updating application logic. With an associative model, you can add a new entity type for “TaxCode” and create an association between the client entity and the tax code entity. Existing clients remain untouched, and the new client simply receives the new association. The code that queries client data stays the same, because it follows the generic pattern of “retrieve all associations for a client.”

Integration is another area where the associative approach shines. Imagine two departments, each with its own database, want to share customer data. In the relational model, you might need to map every field, write ETL jobs, and resolve conflicts manually. In the associative model, each database is already a collection of entities and associations. To merge them, you only need to add the sentences from the second database into the first. Conflicts, such as duplicate entity identifiers, can be resolved with a simple deduplication rule. Because the data is already expressed as relationships, there is no need for elaborate schema mapping.

Even in complex scenarios like merging a legacy relational system with a new associative system, the process is straightforward. You export the legacy data as a set of sentences: each table row becomes a set of entities and associations. The new system can then ingest those sentences without any schema changes. The only work required is to handle any ambiguity - two entities that share the same name but represent different real‑world objects. Once resolved, the data sits in a unified structure that can be queried using the same simple patterns that apply to all other data.

Another practical advantage is the ease of version control and change tracking. Every entity and association can be stored in a versioned format, and each change can be audited. If a user modifies their address, the old address association is archived and a new one is created. The system retains a history of the user’s addresses, which is useful for compliance, analytics, and debugging. In relational databases, such change tracking often requires separate audit tables and triggers that add overhead.

Performance can also benefit. Because the associative model uses a small number of tables and relies on key lookups rather than complex join chains, query engines can optimize retrieval more easily. For read‑heavy workloads, this can translate into faster response times. Write workloads are simplified because inserting a new relationship is just a matter of adding a row to the association table, without the need to maintain referential integrity across multiple tables.

Ultimately, the associative model reorients how developers think about data. Instead of mapping every field to a column, they think in terms of stories: who is connected to whom, under what circumstances, and through which association. This narrative view aligns closely with real‑world thinking, reduces the friction of change, and keeps the data system lean and adaptable. In the next section we’ll look at how to start experimenting with this model and where to find the tools that make it practical.

Getting Started with the Associative Model: Tools, Resources, and Community

Suggest a Correction

Found an error or have a suggestion? Let us know and we'll review it.

Share this article

Comments (0)

Please sign in to leave a comment.

No comments yet. Be the first to comment!

Related Articles