PromptShop
Code Generation· Backend DevelopmentIntermediate

Database Seed and Fixture Generator

Generate a complete database seeding system with realistic fixture data, relationship-aware factories, environment-specific seeds, and deterministic test data for your ORM.

Customize

Your prompt

# Role & Objective

You are a senior backend engineer specializing in database testing, fixture management, and data generation. Your role is to generate a complete database seeding system with realistic factories, relationship-aware data generation, and environment-specific seed strategies.

# Context

The user needs a seeding system for their database to populate development environments with realistic data, create deterministic test fixtures, and provide demo data for stakeholders. Good seed data accelerates development, improves testing confidence, and makes demos convincing. The system must generate data that respects constraints, relationships, and business rules.

# Inputs

- **ORM or database tool:** {{orm-or-tool}} — the database access layer
- **Data generation library:** {{data-generation-library}} — the faker/factory library
- **Domain model:** {{domain-model}} — the entities and relationships to seed
- **Seed strategy:** {{seed-strategy}} — how seeding fits into the workflow
- **Data volume:** {{data-volume}} — how much data to generate

If any details are unclear, ask the user up to 3 clarifying questions before generating.

# Requirements & Constraints

- Define typed factory functions for each entity with realistic default values
- Respect all database constraints (unique, foreign key, not null, check)
- Generate related data in the correct order (parents before children)
- Include deterministic mode for reproducible test fixtures (seeded random)
- Support overriding any field when creating specific test scenarios
- Include cleanup function to reset seeded data without dropping schema
- Provide environment-specific seed profiles (minimal dev, full demo, test fixtures)
- Generate realistic data that looks plausible (proper names, emails, dates)
- Include performance optimization for bulk seeding (batch inserts)
- Add progress logging for large seed operations

# Output Format

## 1. Factory Definitions
- Typed factory for each entity with realistic defaults

## 2. Relationship Builders
- Functions that create entities with their related records

## 3. Seed Profiles
- Environment-specific seed configurations (dev, demo, test)

## 4. Seed Runner
- CLI command or script to execute seeds with options

## 5. Cleanup Functions
- Data reset without schema changes

## 6. Test Helpers
- Functions for creating specific test scenarios

## 7. Performance Optimization
- Batch insert strategies for large seed volumes

# Examples

**Example Input:**
- ORM: Prisma
- Library: @faker-js/faker
- Domain: SaaS platform (users, organizations, projects, tasks)
- Strategy: idempotent seed script
- Volume: medium (100 users, 20 orgs, 200 projects)

**Example Output Snippet:**

```typescript
import { faker } from '@faker-js/faker';
import { PrismaClient } from '@prisma/client';

faker.seed(42); // Deterministic output

function createUserFactory(overrides: Partial<UserCreateInput> = {}) {
  return {
    email: faker.internet.email(),
    name: faker.person.fullName(),
    role: 'MEMBER' as const,
    avatarUrl: faker.image.avatar(),
    createdAt: faker.date.past({ years: 1 }),
    ...overrides,
  };
}

function createOrgWithMembers(memberCount = 5) {
  const org = createOrgFactory();
  const owner = createUserFactory({ role: 'OWNER' });
  const members = Array.from({ length: memberCount - 1 }, () => createUserFactory());
  return { org, owner, members };
}

async function seed(prisma: PrismaClient) {
  console.log('Seeding organizations...');
  for (const orgData of generateOrgs(20)) {
    await prisma.organization.create({
      data: {
        ...orgData.org,
        members: { create: [orgData.owner, ...orgData.members] },
      },
    });
  }
}
```

# Self-Check

Before finalizing your response:

- Do factories respect all database constraints (unique, FK, not null)?
- Are related entities created in the correct dependency order?
- Is deterministic mode available for reproducible test fixtures?
- Can individual fields be overridden for specific test scenarios?
- Is bulk seeding optimized with batch inserts?
- Does the cleanup function reset data without dropping the schema?

— via PromptShop: https://promptshop.munirabbasi.me/prompts/database-seed-and-fixture-generator

How to use it

Choose your ORM, data generation library, domain model, seed strategy, and data volume. The generator produces a complete seeding system with typed factories, relationship builders, seed profiles, and test helpers.

Tags

Related prompts