Relational Database (RDBMS)
A Relational Database (RDBMS) is a traditional approach to data storage using tables, rows, and columns. It supports clearly defined relationships between entities, transactions, and ACID properties, making it suitable for classic enterprise applications and transactional systems.
✅ When is it appropriate
An RDBMS is suitable if most of the following conditions apply:
- the data is transactional and tabular
- relationships between entities are clear and predictable
- the project requires strong ACID properties
- the team has experience with traditional databases (PostgreSQL, MySQL, Oracle)
- related data can be linked using JOINs; queries rarely need to traverse more than two or three levels of relationships
- the project requires reporting and analytics on structured data
Relational databases enforce data integrity at the database level: foreign keys prevent orphaned records, constraints prevent invalid values, and transactions ensure that a group of changes either all succeed or all fail together.
❌ When is it NOT appropriate
An RDBMS may not be ideal if:
- the data is highly interconnected and dynamic
- frequent queries require traversal across many connected entities
- the project is oriented toward recommendation systems, social networks, or knowledge graphs
- schema flexibility and dynamic addition of new relationships are key
- queries frequently need to traverse many levels of connected records, such as finding all connections within a social network up to six degrees of separation
A relational database models relationships using JOIN operations. Each additional hop adds another JOIN. For data with many nested connections (such as social graphs or recommendation engines), the queries become complex and slow as the dataset grows.
👍 Advantages
- robust and reliable for transactional applications
- ACID properties and data consistency
- mature tools for reporting, BI, and analytics
- schema changes require explicit migrations, which makes the process intentional and auditable but also requires planning before changing the data structure
- widely supported and well-documented
- decades of tooling for backups, monitoring, reporting, and migrations means the operational problems you encounter have almost certainly been solved before
👎 Disadvantages
- less flexible for dynamic or highly interconnected data
- queries on complex relationships (multi-level connections) can be slow
- scaling beyond a single server requires replication or sharding, which adds operational complexity and does not scale as naturally as some NoSQL databases
- rigid schema can slow down development iterations
- less suitable for recommendation systems and social networks
🛠️ Typical use cases
- transactional applications, ERP, CRM
- banking and financial systems
- reporting and analytics
- traditional web applications
- projects with a fixed and predictable data structure
⚠️ Common mistakes (anti-patterns)
- using an RDBMS for highly interconnected and dynamic graph data
- not normalizing the schema to avoid data duplication, causing rows to fall out of sync when the same information is stored in multiple places
- ignoring the need for a flexible schema
- not adding indexes on columns used in WHERE or JOIN clauses, causing the database to scan every row in the table for each query as data grows
- combining with graph databases without a clear design
While relational databases excel at structured, transactional data, trying to force them to handle highly interconnected or rapidly evolving datasets can lead to poor performance, complex queries, and maintenance challenges.
💡 How to build on it wisely
Recommended approach:
- Start with an RDBMS as the default for any application with structured data and clear entity relationships, unless you have a specific reason not to.
- Optimize indexes and queries for reporting and analytics.
- Keep the schema stable and well-documented.
- Monitor query performance as data grows and add indexes on any column that appears frequently in WHERE or JOIN conditions.
- If highly connected graph data is needed, consider a hybrid solution with a graph database.
A relational database is the right default for most applications. The signal to look at alternatives is when queries consistently require traversing many levels of connected records, when the schema changes so frequently that migrations become a constant burden, or when write volume outgrows what a single server can handle.
Related topics
☕ If you found this page helpful, consider supporting my work by buying me a coffee.
Feedback & Sharing
Give us your thoughts on this page, or share it with others who may find it useful.
Share with your network:
Feedback
Found this helpful? Let me know what you think or suggest improvements 👉 Contact me.