A curated collection of resources, tutorials, tools, and best practices for designing efficient and scalable databases.
- Introduction
- Getting Started
- Core Concepts
- Design Patterns
- Performance & Optimization
- Scalability
- SQL & Query Languages
- Database-Specific Resources
- Learning Resources
- Tools & Software
- Best Practices
- Reference Materials
- Community
- Contributing
Being a self-taught programmer can be both challenging and rewarding. But when it comes to database design, finding the right resources and information can be difficult and time-consuming. This curated list aims to help developers at all levels master database design principles, from basic concepts to advanced patterns.
Over time, this collection has grown to include bookmarks, posts, courses, and links related to database design and entity modeling. Whether you're designing your first database or architecting a complex distributed system, you'll find valuable resources here.
- Database Design Basics - Introduction to database design concepts
- What is a Database? - Oracle's comprehensive guide
- Relational Database Concepts - Understanding the relational model
- ACID Properties Explained - Transaction properties every developer should know
- CAP Theorem - Understanding distributed database tradeoffs
- Database Types Comparison - SQL vs NoSQL and when to use each
- Database Conceptual Design | Entities and Relationships - Understanding conceptual design
- Conceptual, Logical and Physical Design - The three phases of database design
- A Quick-Start Tutorial on Relational Database Design - Comprehensive tutorial
- Database Design Process - Step-by-step guide
- Data Modeling 101 - Introduction to data modeling
- Database, Table and Column Naming Conventions - Best practices discussion
- Character Set and Collation - Understanding encoding
- Choose Your Database Identifiers Wisely - Practical naming advice
- SQL Naming Conventions - Comprehensive naming guide
- Database Naming Standards - Industry standards
- Normalization - 1NF, 2NF, 3NF and 4NF - Video tutorial on normal forms
- Database Normalization Explained - Simple explanation
- Difference between 1NF, 2NF, and 3NF - Clear comparison
- The Difference between 2NF and 3NF - With examples
- Database Normalization Tutorial - Practical examples
- When to Denormalize - Understanding tradeoffs
- Normalization vs Denormalization - When to use each approach
- Entity-Relationship Diagrams - Complete guide to ER diagrams
- Data Modeling - Complex Relationships - Advanced relationship patterns
- ER Model Tutorial - Step-by-step ER modeling
- Cardinality in Data Modeling - Understanding relationships
- Crow's Foot Notation - Popular ER diagram notation
- Primary Keys, Foreign Keys, and Relationships - Understanding keys
- Identifying vs Non-identifying Relationships - Key differences
- Composite Keys - When and how to use them
- Natural vs Surrogate Keys - Choosing the right key type
- UUID vs Auto-increment - Primary key strategies
- Represent Inheritance in a Database - Different approaches
- Inheritance Modeling Strategies - Detailed discussion
- Table Inheritance Patterns - Implementation patterns
- Single Table Inheritance - Using Sequelize.js
- Class Table Inheritance - Martin Fowler's pattern
- Concrete Table Inheritance - Alternative approach
- Supertype/Subtype Design Pattern I - Implementation details
- Supertype/Subtype Design Pattern II - Modeling different attributes
- Polymorphic Associations - Understanding the pattern
- Models for Hierarchical Data in SQL - Video overview
- Storing Hierarchical Data - Different approaches
- Managing Hierarchical Data in MySQL - Practical guide
- Managing Hierarchical RDBMS - Comprehensive resource
- Nested Set Model - Popular hierarchical pattern
- Closure Table Pattern - Efficient hierarchy storage
- Materialized Path - PostgreSQL ltree extension
- Best Practices for Multi-language Database Design - Comprehensive discussion
- Multilingual Database Design in MySQL - Implementation guide
- Internationalization Database Patterns - i18n patterns
- Translation Table Pattern - Common approach
- How Do Database Indexes Work? - Comprehensive explanation
- Use The Index, Luke! - Complete guide to database performance
- B-Trees and B+ Trees - Understanding index structures
- MySQL: Building the Best INDEX - MySQL-specific guide
- PostgreSQL Indexing: How, Why, and When? - PostgreSQL indexing
- Index Types Explained - Different index types
- Covering Indexes - Advanced indexing technique
- Partial Indexes - Conditional indexes
- Full-Text Search Indexes - Text search optimization
- Why Create a View in a Database? - Understanding views
- What are Materialized Views? - Materialized views explained
- Materialized Views vs Tables - When to use each
- Indexed Views in SQL Server - SQL Server perspective
- SQL Query Optimization Techniques - Practical tips
- Explain Plan Analysis - Understanding query plans
- Query Performance Tuning - Comprehensive guide
- N+1 Query Problem - Common pitfall
- Database Sharding Crash Course - Video tutorial with Postgres examples
- Sharding Pattern - Microsoft's guide
- When to Shard Your Database - Decision guide
- Consistent Hashing - Sharding strategy
- Vitess: Sharding for MySQL - MySQL sharding solution
- Database Partitioning Guide - PostgreSQL partitioning
- Table Partitioning Strategies - PostgreSQL docs
- Partitioning vs Sharding - Understanding the difference
- Range vs Hash Partitioning - Partitioning methods
- Database Replication Explained - Replication basics
- Master-Slave vs Master-Master - Replication topologies
- PostgreSQL Streaming Replication - PostgreSQL replication
- MySQL Replication - MySQL replication guide
- SQLBolt - Interactive SQL Lessons - Learn by doing
- SQL Zoo - Tutorial and Exercises - Practice SQL queries
- Learn SQL - Scaler Topics - Comprehensive SQL guide
- SQL Tutorial - W3Schools - Beginner-friendly tutorial
- Mode SQL Tutorial - Analytics-focused SQL
- PostgreSQL Tutorial - PostgreSQL-specific
- Subquery in SQL | Correlated Subquery - Advanced queries
- SQL JOINS - Part 1 - Understanding joins
- SQL JOINS - Part 2 - Advanced join techniques
- Window Functions - Powerful analytical queries
- Common Table Expressions (CTEs) - Recursive and non-recursive CTEs
- Pivot and Unpivot - Data transformation
- JSON in SQL - Working with JSON data
- SQL Style Guide - Writing readable SQL
- SQL Anti-patterns - Common mistakes to avoid
- Parameterized Queries - Preventing SQL injection
- Transaction Best Practices - Managing transactions
- PostgreSQL Documentation - Official docs
- Understanding Vacuuming in PostgreSQL - Maintenance guide
- PostgreSQL Performance Tuning - Optimization guide
- Proper Use of Arrays in PostgreSQL - Array data type
- PostgreSQL Exercises - Interactive learning
- Awesome PostgreSQL - Curated PostgreSQL resources
- MySQL Documentation - Official docs
- MySQL Performance Blog - Performance insights
- MySQL Workbench Tutorial - Using MySQL Workbench
- MySQL Indexing Best Practices - Index optimization
- Awesome MySQL - Curated MySQL resources
- MongoDB University - Free courses
- MongoDB Schema Design - NoSQL design patterns
- MongoDB Data Modeling - Official guide
- Awesome MongoDB - Curated MongoDB resources
- Redis Documentation - In-memory database
- Cassandra Data Modeling - Wide-column store
- DynamoDB Best Practices - AWS NoSQL
- Neo4j Graph Database - Graph database concepts
- Database Lessons Playlist - Comprehensive video series
- Introduction to RDBMS and Design - Video course
- Database Design Playlist - Design tutorials
- Carnegie Mellon Database Systems - University lectures
- Stanford Database Courses - Stanford online courses
- SQL Training Videos - SQL-focused training
- freeCodeCamp Database Courses - Free certification courses
- Udacity Database Courses - Intro to databases
- Database Design for Mere Mortals - Beginner-friendly book
- SQL Antipatterns - Avoiding common mistakes
- Designing Data-Intensive Applications - Modern database systems
- Database Internals - How databases work internally
- The Art of PostgreSQL - PostgreSQL mastery
- High Performance MySQL - MySQL optimization
- SQLBolt - Interactive SQL lessons
- SQL Zoo - SQL exercises
- PostgreSQL Exercises - PostgreSQL practice
- LeetCode Database Problems - SQL coding challenges
- HackerRank SQL - SQL practice problems
- SQLPad - Online SQL editor
- Things You Should Know About Databases - Essential knowledge
- Database Journal - Featured articles
- Percona Database Performance Blog - Performance insights
- Planet PostgreSQL - PostgreSQL community blogs
- MySQL Server Blog - Official MySQL blog
- High Scalability - Scalability case studies
- Database Trends and Applications - Industry news
- dbdiagram.io - Draw ER diagrams painlessly
- DrawDB - Free, simple database design tool
- DB Designer - Online database designer
- MySQL Workbench - MySQL official tool
- pgModeler - PostgreSQL database modeler
- DBeaver - Universal database tool
- DataGrip - JetBrains database IDE
- SQL Studio - Modern SQL editor
- Luna Modeler - Multi-platform database modeler
- Oracle SQL Developer Data Modeler - Oracle's modeling tool
- dbForge Studio - MySQL design tool
- Valentina Studio - Multi-database tool
- Dia Diagram Editor - Open-source diagram tool
- ArchiMate Tool - Enterprise architecture modeling
- Vertabelo - Online database modeler
- QuickDBD - Quick database diagrams
- Flyway - Database migration tool
- Liquibase - Database schema change management
- Alembic - Python database migrations
- Prisma Migrate - Modern migration tool
- Sqitch - Database change management
- pgAdmin - PostgreSQL administration
- MySQL Enterprise Monitor - MySQL monitoring
- Datadog Database Monitoring - Multi-database monitoring
- New Relic Database Monitoring - Performance monitoring
- pg_stat_statements - PostgreSQL query statistics
- Percona Monitoring and Management - Open-source monitoring
- Using NULL Properly - NULL handling debate
- 8 Reasons Why MySQL's ENUM Is Evil - ENUM pitfalls
- Database Design Mistakes - Common errors
- ORM Anti-patterns - ORM best practices
- Boolean Field Naming - Naming conventions
- SQL Injection Prevention - OWASP guide
- Database Security Best Practices - Comprehensive security guide
- Encryption at Rest - Data encryption
- Row Level Security - Fine-grained access control
- Database Audit Logging - Tracking database changes
- Referential Integrity - Maintaining relationships
- Check Constraints - Data validation
- Triggers for Data Integrity - Automated validation
- Soft Delete Pattern - Logical deletion
- Temporal Tables - Historical data tracking
- SQL Commands Cheatsheet - Quick reference
- PostgreSQL Cheatsheet - PostgreSQL commands
- MySQL Cheatsheet - MySQL quick reference
- SQL Join Visualizer - Visual join guide
- Database Normalization Cheatsheet - Normal forms reference
- Premade Database Designs and Models - Real-world examples
- PostgreSQL Sample Databases - Practice databases
- MySQL Sample Databases - Example schemas
- Northwind Database - Classic sample database
- Sakila Database - DVD rental schema
- Database Administrators Stack Exchange - Q&A community
- r/Database - Reddit community
- r/SQL - SQL discussions
- PostgreSQL Slack - PostgreSQL community
- MySQL Forums - MySQL community
- Database Weekly Newsletter - Weekly database news
Are you passionate about database design? π€ Do you have some great resources or topics to share? We'd love to hear from you! π‘ Please feel free to contribute to the repository and don't forget to raise a PR or suggest any improvements. π Thank you for your support!
- Fork the repository to your GitHub account
- Clone your fork to your local machine:
git clone https://github.com/your-username/awesome-database-design.git
- Create a branch for your changes:
git checkout -b add-new-resources
- Make your changes to the
README.mdfile:- Add new links with clear descriptions
- Ensure links are working and relevant
- Place resources in the appropriate category
- Follow the existing formatting style
- Commit your changes with a clear message:
git commit -m "Add resources for query optimization" - Push to your fork:
git push origin add-new-resources
- Create a Pull Request from your fork to the main repository
- Wait for review and respond to any feedback
- Ensure links are high-quality and relevant to database design
- Provide clear, concise descriptions for each resource
- Check that links are not already in the list
- Verify that all links are working before submitting
- Use proper markdown formatting
- Keep descriptions objective and informative
- For paid resources, clearly indicate if they require payment
To the extent possible under law, the contributors have waived all copyright and related rights to this work.
