Testdaten generieren · FK-konsistent · aus dem Schema

Testdaten generieren: FK-konsistent aus SQL, Django und Prisma.

SeedBase liest dein Datenbankschema (SQL-Dump, Django models.py, Prisma oder direkt aus der Live-Datenbank) und generiert realistische Testdaten, bei denen jeder deklarierte Fremdschlüssel auflöst und die Verteilungen produktionsnah aussehen. Export als SQL, CSV, JSON oder direkter DB-Push. Für Entwicklung, Staging, CI und Demos.

Free-Tier · keine Kreditkarte · EU-Hosting · keine Tracker

Für deinen Stack: SQL-Testdaten · Django-Testdaten · DSGVO-Anonymisierung

Das Problem mit handgemachten Testdaten

Jedes Projekt kennt die zwei schlechten Optionen: drei handgetippte Fixture-Zeilen, die nichts testen, oder eine Kopie der Produktionsdatenbank mit echten Kundendaten auf jedem Entwickler-Laptop.

Fixtures veralten

Jede Migration bricht die handgepflegten Testdaten. Neue Spalten bleiben leer, neue Tabellen fehlen ganz.

Leere Datenbanken verstecken Bugs

Pagination, N+1-Queries, Performance-Probleme und volle Dashboards zeigen sich erst mit realistischen Datenmengen und Verteilungen.

Prod-Dumps sind ein DSGVO-Risiko

Echte E-Mails, IBANs und Adressen auf Dev-Rechnern, in CI-Volumes und alten Backups, jede Kopie ist Angriffsfläche.

So funktioniert's

Schema importieren

SQL-Dump einfügen, models.py pushen (VS-Code- oder JetBrains-Plugin), Prisma-Schema hochladen oder direkt die Datenbank verbinden.

Generieren

Zeilenzahlen pro Tabelle festlegen oder die Heuristik entscheiden lassen. Verteilungen konfigurierbar: Long-Tail, Normal, Zeilen pro Eltern-Datensatz.

Exportieren oder pushen

SQL, CSV oder JSON herunterladen, oder direkt in Postgres/MySQL schreiben. Deterministisch pro Seed, also reproduzierbar in CI.

Schema importieren: SQL-Dump, Django, Prisma oder Live-DB

Testdaten generieren beginnt mit dem Schema, nicht mit handgetippten Werten. SeedBase liest die Tabellen, Spalten und Beziehungen aus einer von vier Quellen und baut daraus den Generierungs-Bauplan. Du musst nichts doppelt pflegen, deine Migrationen bleiben die einzige Wahrheit.

  • SQL-Dump: ein CREATE TABLE-Dump aus PostgreSQL oder MySQL, direkt in den Editor eingefügt. SQL-Testdaten im Detail →
  • Django: die models.py per VS-Code- oder JetBrains-Plugin pushen, ohne Copy-Paste. Django-Testdaten im Detail →
  • Prisma: das schema.prisma hochladen, Relationen werden mitgelesen.
  • Live-Datenbank: eine lesende Verbindung angeben, SeedBase liest die echte Struktur per Introspektion aus.

Per CLI lässt sich derselbe Import skripten. Erst Schema einlesen, dann generieren:

# Python-CLI, Schema aus einem SQL-Dump anlegen
pip install seedbase
seedbase login
seedbase project create shop --from-sql schema.sql

Auch über das Node-SDK oder den MCP-Server für KI-Assistenten ist der Import erreichbar. Die ganze Bandbreite steht in der Doku.

FK-konsistente Daten generieren und exportieren

Der Kern beim Testdaten generieren ist die Fremdschlüssel-Konsistenz: Jeder Kind-Datensatz zeigt auf eine existierende Eltern-Zeile, über das ganze Schema hinweg, auch bei Selbstreferenzen (parent_id) und 1:1-Beziehungen. SeedBase fügt die Tabellen in topologischer Reihenfolge ein, sodass keine Verletzung der referenziellen Integrität entsteht. Getestet an einem echten Django-Projekt mit 20 Apps und 226 Tabellen, also genau dem Fall, für den FK-Konsistenz über hunderte Tabellen zählt.

Mit dem Node-SDK @seedbase/client generierst du eine SQL-Datei und lädst sie in deine Datenbank:

// generate.mjs, FK-konsistente Daten als SQL exportieren
import { SeedbaseClient } from "@seedbase/client";
import { writeFile } from "node:fs/promises";

const client = new SeedbaseClient({ token: process.env.SEEDBASE_TOKEN });
const gen = await client.generate(process.env.SEEDBASE_PROJECT, {
  seed: 42,
  wait: true,
});
// SQL, CSV oder JSON, hier INSERTs in FK-sicherer Reihenfolge
await writeFile("seed.sql", await client.download(gen.id, { format: "sql" }));

Wer die Zeilen lieber im Speicher als Fixture braucht, bekommt sie tabellenweise und schon in Fremdschlüssel-sicherer Reihenfolge zurück:

const rows = await client.seededRows(projectId, { seed: 42, rows: 100 });
// { kunden: [...], bestellungen: [...], positionen: [...] }

Statt SQL kannst du auch CSV oder JSON exportieren oder die Daten per direktem DB-Push gleich in Postgres oder MySQL schreiben.

Reproduzierbar per Seed: dieselben Testdaten in CI

Damit Snapshot-Tests und CI-Läufe stabil bleiben, ist die Generierung deterministisch: Derselbe Seed plus dasselbe Schema ergeben bei jedem Lauf exakt dieselben Zeilen. Ein gepinntes Referenzdatum macht zusätzlich die Zeitstempel reproduzierbar. Ein fehlschlagender Test lässt sich lokal mit demselben seed: 42 exakt nachstellen.

# .github/workflows/test.yml
- run: node generate.mjs
- run: psql "$DATABASE_URL" -f seed.sql
- run: pytest

Die Generierungs-Konfiguration lässt sich als JSON exportieren und neben den Migrationen versionieren (config-as-code). Für Python gibt es zusätzlich ein pytest-Plugin, dazu CLI und SDKs für Node und PHP, sodass die Testdaten-Generierung in jede Pipeline passt.

Produktionsdaten maskieren statt kopieren

Vollsynthetische Testdaten sind der sichere Weg, weil hinter ihnen keine echten Personen stehen. Manchmal müssen die Daten aber näher am Original liegen, etwa für einen reproduzierten Fehlerfall. Dann kopierst du keine Produktionsdatenbank, sondern lässt SeedBase die personenbezogenen Felder erkennen und formatwahrend maskieren: Aus einer echten E-Mail wird eine plausibel aussehende, aus einer IBAN eine gültig strukturierte, und gleiche Werte werden überall gleich ersetzt, sodass Joins konsistent bleiben.

So gehen weder Format noch referenzielle Beziehungen verloren, und es liegen keine echten E-Mails, IBANs oder Adressen mehr auf Dev-Rechnern oder in CI-Volumes. Details und der DSGVO-Kontext stehen auf der Seite zur DSGVO-konformen Anonymisierung.

Was die generierten Daten können

FK-konsistent

Jeder Fremdschlüssel löst auf

Kind-Datensätze referenzieren existierende Eltern, auch über Self-References (parent_id) und 1:1-Beziehungen hinweg. Inserts in topologischer Reihenfolge.

realistisch

Verteilungen wie im echten Leben

Nicht jeder User hat exakt 5 Bestellungen: Long-Tail- und Normalverteilungen sorgen für realistische Streuung, dort zeigen sich Pagination- und Performance-Bugs.

aktuell

Datumswerte wandern mit

Timestamps werden relativ zu heute generiert. „Letzte 30 Tage“-Dashboards bleiben gefüllt, statt mit jedem Monat leerer zu werden.

erkannt

Spalten verstehen sich von selbst

email wird eine E-Mail, city eine Stadt, price ein plausibler Betrag, erkannt aus Spaltennamen, Typen und (optional) Beispieldaten.

config-as-code

Reproduzierbar in CI

Generierungs-Konfiguration als JSON exportieren, neben den Migrationen committen, in der Pipeline anwenden. CLI für Python, SDKs für Node und PHP.

DSGVO

Oder: echte Daten maskieren

Wenn es Produktionsdaten sein müssen: PII automatisch erkennen, formatwahrend und join-konsistent maskieren. Mehr zur DSGVO-konformen Anonymisierung →

Ehrlich gesagt: Für ein 5-Tabellen-Projekt mit zwei Fixtures reicht Faker oder factory_boy völlig. SeedBase lohnt sich, wenn Datenbanken voll und konsistent sein müssen, bei vielen Tabellen, in Teams, in CI oder wenn Nicht-Python-Services dieselbe Datenbank nutzen. Getestet an einem echten Django-Projekt mit 20 Apps und 226 Tabellen, genau der Fall, für den es gebaut ist.

Häufige Fragen zum Testdaten generieren

Wie generiere ich Testdaten aus meinem Datenbankschema?

Schema importieren (SQL-Dump, Django models.py, Prisma-Schema oder direkte Postgres/MySQL-Verbindung), Zeilenzahlen festlegen oder die Heuristik entscheiden lassen, generieren. SeedBase erzeugt Daten, bei denen jeder Fremdschlüssel auf einen existierenden Datensatz zeigt, als SQL, CSV oder JSON, oder direkt in die Ziel-Datenbank.

Welche Schema-Quellen kann ich importieren?

Vier Quellen: einen rohen SQL-Dump (CREATE TABLE aus PostgreSQL oder MySQL), eine Django models.py (per VS-Code- oder JetBrains-Plugin pushen), ein Prisma-Schema (schema.prisma) oder eine direkte Verbindung zu einer Live-Datenbank, die SeedBase per Introspektion ausliest. Aus jeder Quelle entsteht derselbe Generierungs-Bauplan mit Tabellen, Spalten und Beziehungen.

Wie exportiere ich die generierten Testdaten?

Als SQL (INSERT-Statements in Fremdschlüssel-sicherer Reihenfolge), als CSV (eine Datei pro Tabelle) oder als JSON. Alternativ schreibt SeedBase die Daten per direktem DB-Push in eine Postgres- oder MySQL-Datenbank. Per CLI und Node- oder PHP-SDK lässt sich der Export in eine Pipeline einbauen.

Was unterscheidet SeedBase von Faker oder Zufallsdaten?

Bibliotheken wie Faker erzeugen einzelne realistische Werte, aber keine konsistente Datenbank: Fremdschlüssel, Verteilungen und Abhängigkeiten zwischen Tabellen muss man selbst verdrahten. SeedBase liest das Schema und übernimmt genau das, inklusive realistischer Streuung (ein Kunde hat 2 Bestellungen, ein anderer 19) und zeitlich kohärenter Datumswerte.

Sind die generierten Testdaten DSGVO-konform?

Vollsynthetische Daten enthalten keine personenbezogenen Daten, hinter den generierten Werten stehen keine echten Personen, die DSGVO ist auf sie nicht anwendbar. Wer stattdessen echte Produktionsdaten nutzen muss, kann sie mit SeedBase formatwahrend und konsistent maskieren.

Kann ich die Generierung in CI/CD einbinden?

Ja. Die Generierung ist pro Seed deterministisch und damit reproduzierbar. Übergib einen Seed (zum Beispiel seed: 42), und dasselbe Schema liefert bei jedem Lauf dieselben Zeilen. Die Konfiguration lässt sich als JSON exportieren und neben den Migrationen versionieren; CLI (pip install seedbase) und SDKs für Node und PHP binden die Generierung in Pipelines ein, dazu ein pytest-Plugin.

Was kostet SeedBase?

Es gibt einen Free-Tier ohne Kreditkarte, inklusive Schema-Import und Generierung. Bezahlte Pläne starten bei 19 Euro pro Monat und heben Zeilen-Limits sowie Team-Funktionen an. Gehostet wird in der EU.

In zwei Minuten zur vollen Test-Datenbank

Registrieren, Schema einfügen, generieren. Kein Vertriebsgespräch, keine Kreditkarte, der Free-Tier reicht für den ersten echten Eindruck.

  • FK-konsistent
  • Realistische Verteilungen
  • SQL / CSV / JSON
  • EU-Hosting
Jetzt kostenlos starten

Für deinen Stack: Django · Prisma · SQL  ·  Vergleich: vs Mockaroo · vs Faker