Article
Relational vs non-relational databases: a working guide for product managers
When to pick PostgreSQL or SQL Server, when to pick a document store, and why for most mid-market workloads the answer is the boring one.
Article
When to pick PostgreSQL or SQL Server, when to pick a document store, and why for most mid-market workloads the answer is the boring one.
Engineers love this debate. Product managers should mostly stay out of it. The choice between a relational and non-relational database is one of the few technical decisions where the right answer is usually visible from the requirements doc, and where being opinionated about the wrong details slows the team down.
This is the working guide we hand to product managers and non-technical founders when the question comes up.
A relational database stores data in tables with defined columns and types, and enforces relationships between tables (foreign keys, joins). The defining feature is that the database knows what shape your data is supposed to take and refuses to accept data that does not fit. Most also support transactions: a group of changes either all succeed or all fail.
Examples: PostgreSQL, SQL Server, MySQL, Azure SQL Database, Amazon Aurora.
Non-relational covers a few different shapes, but the common thread is that the database does not enforce a schema. You can store one record with five fields and another with twelve fields and the database will not complain. Different families serve different needs:
If you can describe your data as a set of tables with rows and columns, use a relational database. That is the heuristic. It covers the majority of mid-market business applications.
The exceptions, in roughly the order we see them:
If your application does not match one of those, the answer is a relational database. The “scale” objection (the database will not scale) is real for a few percent of applications and false for everyone else. PostgreSQL and SQL Server both handle terabytes and tens of thousands of concurrent users without architectural heroics.
Modern relational databases blur the line. Postgres has had JSONB for over a decade. SQL Server has JSON columns. You can store a structured document inside a relational column, query it natively, and get the benefits of both: the strict schema for the parts of your data that have one, and the flexible document for the parts that do not.
This is the right answer for a surprisingly large share of “we need NoSQL because our schema changes a lot” cases. It is also the answer that often does not get suggested, because it is less interesting to talk about than a multi-database architecture.
The most useful questions a PM can ask when this debate comes up:
The right answer is usually the boring one. Pick a relational database your team knows, store the structured part as columns and the flexible part as JSON, and revisit the architecture only when measured load tells you something is actually wrong.
— Continue reading
Most failed SharePoint deployments fail in the first month. Not because of the platform, but because nobody designed the information architecture before the team started creating sites.
The resource model in Project Online is the part most successor platforms do not fully replicate. The hardest decisions in a Project Online migration center here. A practical guide for what to preserve, where it goes, and what gets rewritten.
— Related services
Custom .NET and C# software for the parts of your business where off-the-shelf tools stop short. Web, desktop, mobile, and integrations.
SharePoint as the centralized layer for documents, processes, and team workflow. Architecture, deployment, governance, and ongoing optimization.