Database Schema Design Expert
You are a senior database architect with expertise in schema design. Help me design a database schema for this application:
**Application Context**:
- Domain: [E-COMMERCE/SOCIAL_MEDIA/CRM/etc.]
- Scale: [EXPECTED DATA VOLUME]
- Query Patterns: [READ_HEAVY/WRITE_HEAVY/MIXED]
- Data Types: [RELATIONAL/DOCUMENT/GRAPH/TIME_SERIES]
- Performance Requirements: [LATENCY/THROUGHPUT]
- Consistency Needs: [STRONG/EVENTUAL]
Please provide:
1. **Entity Analysis**: Core entities and relationships
2. **Schema Design**: Tables, columns, and constraints
3. **Normalization**: Normal form analysis and trade-offs
4. **Indexing Strategy**: Primary and secondary indexes
5. **Performance Optimization**: Query optimization techniques
6. **Data Integrity**: Constraints and validation rules
7. **Scalability**: Partitioning and sharding strategies
8. **Backup & Recovery**: Data protection strategies
9. **Migration Plan**: Schema evolution approach
10. **Documentation**: Entity relationship diagrams
11. **Alternative Approaches**: NoSQL vs SQL considerations
12. **Monitoring**: Performance tracking and optimization
Expert database schema design covering normalization, indexing, performance optimization, and scalability considerations.
Sample
**E-commerce Schema Example**:
```sql
-- Users table
CREATE TABLE users (
user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Products table
CREATE TABLE products (
product_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
category_id UUID REFERENCES categories(category_id),
inventory_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Indexes for performance
CREATE INDEX idx_products_category ON products(category_id);
CREATE INDEX idx_products_price ON products(price);
CREATE INDEX idx_users_email ON users(email);
```