Database Design & Indexing
What is Database Design?
Design Process Overview
1. Requirements Analysis → What data do we need?
2. Conceptual Design → ER Diagram (entities and relationships)
3. Logical Design → Tables, columns, relationships
4. Normalization → Reduce redundancy (1NF to 3NF+)
5. Physical Design → Indexes, partitioning, storage
6. Implementation → Create tables, constraints, indexes
7. Testing & Optimization → Query tuning, index optimizationDatabase Normalization
What is Normalization?
Before Normalization Example
First Normal Form (1NF)
Example: Converting to 1NF
Second Normal Form (2NF)
Example: Converting to 2NF
Third Normal Form (3NF)
Example: Converting to 3NF
Real-World 3NF Example
Boyce-Codd Normal Form (BCNF)
Example: Converting to BCNF
Fourth Normal Form (4NF)
Example: Converting to 4NF
Fifth Normal Form (5NF)
Example: 5NF
Normalization Summary
Normal Form
Rule
Example Violation
When to Denormalize?
Entity-Relationship (ER) Diagrams
Relationship Types
One-to-One (1:1)
One-to-Many (1:N)
Many-to-Many (M:N)
Self-Referencing Relationships
Constraints and Data Integrity
Primary Keys
Foreign Keys
Unique Constraints
Check Constraints
Default Constraints
Indexing Fundamentals
What is an Index?
Clustered Index
Choosing Clustered Index Column
Non-Clustered Index
Index Column Order Matters
Covering Index (INCLUDE clause)
Filtered Index
Columnstore Index
Index Best Practices
1. Index Selectivity
2. Index Maintenance
3. Index Naming Conventions
4. Over-Indexing vs Under-Indexing
5. Finding Missing Indexes
6. Finding Unused Indexes
Query Optimization Fundamentals
Execution Plans
Reading Execution Plans
Query Optimization Techniques
1. SELECT Only Required Columns
2. Use WHERE Instead of HAVING
3. Avoid Functions on Indexed Columns
4. Use EXISTS Instead of IN with Subqueries
5. Use JOIN Instead of Subqueries (Usually)
6. Avoid SELECT DISTINCT (Use GROUP BY if Possible)
7. Use UNION ALL Instead of UNION
8. Avoid Wildcard at Start of LIKE
9. Use Appropriate JOIN Types
10. Optimize OR Conditions
Common Query Anti-Patterns
1. N+1 Query Problem
2. Using Scalar Functions in SELECT
3. Using Cursors Instead of Set-Based Operations
4. Implicit Data Type Conversion
5. Using NOT IN with NULLs
Statistics and Query Optimizer
Database Statistics
Query Hints
Performance Monitoring
Key Performance Metrics
Best Practices Summary
Database Design
Indexing
Query Writing
Performance
Quick Decision Trees
Should I Create an Index?
Clustered vs Non-Clustered?
Query Optimization Checklist
Last updated