Database Schema Design Expert

Design optimal database schemas for any application

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);
```

tags: database, schema, sql, design

Comments (0)

Add a Comment

Loading...