Every application, underneath all its features, comes down to one quiet question: where does the data live, and how is it organised? The answer — the choice of database — is one of the most consequential decisions in a project, because it is also one of the hardest to change later. Get it right, and the database fades into the background. Get it wrong, and it becomes the thing you are forever fighting.
The debate usually gets framed as “SQL versus NoSQL”, as if one must win. In reality they are different tools for different shapes of problem, and the mark of good engineering is knowing which fits the job in front of you. Here is how I think about it.
SQL: Structure, Relationships, and Guarantees
SQL (relational) databases have powered serious software for decades, and for good reason. They store data in tables with a defined structure, and they excel when your data has clear relationships — customers who have orders, orders that contain products, products that belong to categories.
Why people reach for SQL
The great strength of relational databases is trustworthiness. They enforce structure, so bad data struggles to get in. They handle relationships elegantly, letting you ask complex questions across connected data. And crucially, they offer strong transactional guarantees: when money moves from one account to another, either the whole operation happens or none of it does — never half. For anything involving orders, payments, or inventory, that reliability is not a luxury; it is the point.
NoSQL: Flexibility and Scale
NoSQL is an umbrella term for databases that deliberately relax the rigid structure of the relational model in exchange for flexibility and, often, easier horizontal scaling. Instead of tables, they might store flexible documents, simple key-value pairs, or graphs of connections.
Why people reach for NoSQL
NoSQL shines when your data does not fit neatly into rigid tables, when its shape changes often, or when you need to handle enormous volume by spreading it across many machines. A catalogue where every product has wildly different attributes, a stream of activity logs, a real-time feed — these can be more natural, and more scalable, in the right NoSQL store.
The Real Trade-Off
Strip away the marketing and the choice usually comes down to a single tension: consistency versus flexibility and scale. Relational databases prioritise keeping data correct and connected. Many NoSQL databases prioritise flexibility and the ability to grow massively, sometimes accepting that data may be briefly out of sync across servers in exchange.
Neither priority is universally right. A banking ledger cannot tolerate “briefly out of sync”. A social feed happily can. The engineering skill is matching the database’s priorities to what your application actually needs.
The question is never “which database is best?” It is “which set of trade-offs does my problem actually require?” Answer that honestly and the choice usually makes itself.
How I Actually Decide
For most projects — a typical business application, an e-shop, a platform with orders and users and clear relationships — I reach for a relational database by default. It is mature, reliable, well understood, and its guarantees are exactly what business data needs. The cases where I choose NoSQL are specific: a particular part of the system with huge scale, genuinely unstructured data, or access patterns that a relational model serves poorly.
You do not have to choose only one
A common and powerful pattern is to use both. A relational database can be the trusted system of record for the data that must be correct, while a NoSQL store or a fast in-memory cache handles the parts that need speed, scale, or flexibility. Using the right tool for each part of the system, rather than forcing everything into one, is often the most mature answer of all.
Avoiding the Expensive Mistake
The most costly database decisions are the ones made by fashion rather than fit — choosing a technology because it is trendy, then bending the whole application around a poor match. The database should serve the problem, not the other way around. A little honest thought at the start saves an enormous, painful migration later.
Building Something Data-Heavy?
If you are planning an application and want to be sure its foundations are right — that the data is structured to be reliable today and to scale tomorrow — that is exactly the kind of decision I help get right from the start. As a developer based in Rhodes, I design data models that hold up. Get in touch and let’s make sure your foundations are solid.


