Introduction
A database choice can look technical while hiding a basic question: what truth must this system protect? Teams often start with a list of database types. They compare relational, document, key-value, graph, and time-series products. Yet a long list cannot tell them which facts must stay in step, which questions must be fast, or who will restore the store after a bad change.
My view is to reverse the order. First, define the work. Next, compare a simple baseline with any special option. Then run a small probe against rules set before the test. Choose a product only after that proof exists.
The Moeenism Database Fit Test makes this process practical. It is an original, fallible pre-selection method. Microsoft, AWS, PostgreSQL, and Neo4j do not prescribe or endorse it. Moreover, it is not an architecture sign-off, capacity plan, security review, compliance check, migration plan, or production approval.
Key Takeaways
- Start with the truth, queries, changes, time limits, failure limits, and ownership that the workload needs.
- Compare a simple baseline with a special option. Do not compare product pages in the abstract.
- Write acceptance rules before the probe. Otherwise, every result can be called a success.
- A special store should solve a named mismatch that the baseline cannot meet.
- More database types mean more truth boundaries, sync paths, backup work, skills, and failure modes.
- ADVANCE_CANDIDATE means “send for expert review.” It never means “buy, move, or deploy.”
Why a List of Database Types Is Not a Decision
Database labels describe different things. “Relational” and “graph” describe data models. “Cloud” describes where or how a service is run. “Commercial” describes a license or market offer. “Distributed” describes how data and work may be spread. Therefore, putting all of them in one flat list can make unlike choices look equal.
Public platform guides show why context matters. Microsoft’s data-model guide starts with workload access patterns, then asks readers to weigh consistency, latency, scale, governance, and cost. AWS also groups many database models around different workload needs. Those sources are useful maps. However, they cannot set your truth rules, risk limits, or operating capacity.
There is another trap. Polyglot persistence can sound mature because it uses more than one store. In some systems, it is the right design. Microsoft notes that many production systems use several models and advises combining them where access patterns or life cycles truly diverge. Still, every extra store creates a new question: which one owns the truth when data moves between them?
The Moeenism Database Fit Test
Use the full test for a new primary store, a material workload change, a proposed specialist store, or a migration where the model can change truth, access, recovery, or ownership. For routine tuning inside an approved model, use a short change note instead.
Before testing, name the bounded work and decision owner. Then record a baseline option. This should be the simplest option the team can already run, not an automatic relational winner. Finally, name the special option and the exact mismatch it is meant to solve.
| Question | Evidence to name before the test | Mistake it prevents |
|---|---|---|
| Truth | Facts that must change together or never disagree | Choosing speed while breaking a truth rule |
| Questions | Dominant reads, writes, searches, and relationship walks | Testing easy queries instead of the work that matters |
| Shape | Expected record or relationship changes | Assuming today’s schema will stay fixed |
| Time | Fixed speed, freshness, volume, and growth limits | Calling a fast demo proof of real fit |
| Failure | Tolerable stale reads, data loss, outage, and recovery time | Treating every unavailable or stale state as equal |
| Run | Owners for access, monitoring, backup, restore, upgrade, migration, and cost | Selecting a store nobody can safely own |
For each line, record the rule, baseline result, candidate result, evidence date, owner, and retest trigger. Also record what remains unknown. In simple terms, the sheet must show why a result matters and who accepts the next task.
Run a Bounded Probe, Not a Beauty Contest
A good probe compares what each store does. It does not reward the best demo. Use sample data, then run six checks:
- Truth check: run two writes at once or a set of linked writes. Verify the named truth rule.
- Question check: run the main reads and writes. Compare correct results and response time with limits set before the test.
- Shape check: make one expected data or relationship change. Check the meaning, rollback, and migration path.
- Time check: run a small load at the fixed volume and time. State why it is not proof of live scale.
- Failure check: exercise one relevant restart, dependency loss, or recovery case. Compare the result with the declared loss and time limits.
- Run check: confirm a named owner and clear path for access, alerts, backup, restore, upgrades, moves, and cost review.
This probe complements a deeper database restore test. It does not replace one. Likewise, a selection record should later feed a simple decision log so the final reason and limits do not disappear.
Four Outcomes Keep the Result Honest
Do not turn the test into a vague score. Use an action state instead:
- HOLD: a required truth, failure, security, ownership, or legal condition is unknown, failed, or unowned.
- KEEP_BASELINE: the special option does not meet a need the baseline misses. It also does not remove a measured gap worth its added work.
- DEEPER_REVIEW: the probe shows a useful gain, but proof about scale, recovery, safety, law, moves, or cost is missing.
- ADVANCE_CANDIDATE: no required test failed, every unknown has an owner and date, and the option meets a fixed need the baseline misses. This only sends it to expert design review.
A fit gain must be seen in the test. For example, the option may protect a truth rule that failed on the baseline. It may meet a named query limit, handle a required link walk, or remove measured work in a change path. “It felt faster” is not proof.
A Hypothetical Booking Workload
Consider a sample event-booking service. It stores events, seats, customers, payments, and entry scans. This is a fictional example with sample records. It is not based on a real company, customer, system, or incident.
First, suppose the key rule is that one seat cannot be sold twice. The main work is a transaction that reserves a seat and records payment state. A relational baseline passes the truth check, meets the predeclared query limit, and has a named restore owner. A proposed graph store makes event-to-attendee paths easy, but it does not solve a baseline failure. The outcome is KEEP_BASELINE.
Now change the bounded use. The team needs to explore long, changing links among people, sessions, skills, speakers, and tips. Sample graph walks exceed the baseline limit even after a model and index pass. A graph option meets that named query limit. Its owner also shows backup, restore, access, and alert paths. The result can move to ADVANCE_CANDIDATE for that link-heavy use.
However, this does not prove that the graph store should own seat sales. A mixed design would need a clear truth owner, sync rules, replay rules, and recovery order. Otherwise, a useful read model can quietly become a second source of truth.
How Common Models Enter the Conversation
A model becomes an option because of proof, not fashion. PostgreSQL docs describe relational data as relations, often seen as tables with typed columns. That can fit work with clear records, joins, and transaction rules. By contrast, a document model may fit records whose shape changes as a unit. A key-value model may suit direct access by a known key. A graph model uses nodes and links, which can fit deep link walks. Time-series models can fit a fast stream of time-stamped events.
These are starting clues. They are not product decisions. For example, a document store can still need careful schema rules. A graph query can still be slow. A relational store can scale far beyond a small proof. Therefore, test the required behavior instead of repeating a model stereotype.
What We Recommend
Start with the least complex candidate that can meet the bounded need and that the team can operate. Then make specialization earn its place. This is not a universal relational-first law. A clear relationship, time-series, search, or key-access need may justify a specialist early.
Still, each extra part has a real owner and cost. The same rule used in cloud cost control applies here: name the item, the choice, the owner, and the review point. If nobody owns the extra store through backup, restore, change, and exit, the design is not ready.
Finally, stop when the test reaches its boundary. Security, privacy, law, capacity, resilience, licensing, migration, and total cost need qualified review. A small probe can narrow the choice. It cannot certify the system.
Frequently Asked Questions
Which database type is best for most applications?
There is no universal best type. Start with the workload’s truth, dominant access paths, expected changes, time limits, failure limits, and operating owner. Then compare a simple baseline with any specialist candidate.
Should every team start with a relational database?
No. A relational option can be a useful baseline when the team knows it well and the workload has clear transaction rules. However, a specialist may be a better early candidate when a named relationship, key-access, time-series, search, or scale need makes the baseline a poor fit.
Does a fast benchmark prove database fit?
No. A bounded test covers only the data, rules, load, and failure case you ran. It does not prove production scale, security, compliance, recovery, cost, or long-term ownership.
When is more than one database model justified?
Use more than one model when access patterns or data life cycles clearly diverge and the added store solves a measured mismatch. Also define which store owns each fact, how data syncs, and how both stores recover.
What should happen after ADVANCE_CANDIDATE?
Send the proof to the right design, safety, privacy, legal, scale, recovery, move, and cost reviewers. Do not treat the state as approval to buy, move, or deploy.
Conclusion
Database selection is not a catalog exercise. It is a choice about truth, questions, change, time, failure, and ownership. Therefore, write those six parts before discussing products.
Next, compare one operable baseline with one specialist candidate. Run the smallest safe probe that can expose a real mismatch. Record the observed result and its limits. If the specialist cannot earn its extra complexity with evidence, keep the baseline. If it can, advance the candidate for deeper review—nothing more.

