Prisma Schema zu SQL DDL Migrationsgenerator

Prisma Schema zu SQL DDL Migrationsgenerator

Konvertieren Sie Prisma-Schemadefinitionen in produktionsbereite SQL-DDL-Migrationsskripte für PostgreSQL, MySQL und SQLite.

Voreinstellungen:
Ziel-Dialekt:
Prisma Schemadefinition(4 Modelle, 2 Enums)
-- ============================================================================
-- ToolsAA Prisma to SQL DDL Generator
-- Target Dialect: POSTGRESQL
-- Generated via ToolsAA Prisma-to-SQL Engine
-- 100% Pure Client-Side Browser Compilation
-- ============================================================================

-- ----------------------------------------------------------------------------
-- Drop Existing Tables
-- ----------------------------------------------------------------------------
DROP TABLE IF EXISTS "user_sessions" CASCADE;
DROP TABLE IF EXISTS "memberships" CASCADE;
DROP TABLE IF EXISTS "users" CASCADE;
DROP TABLE IF EXISTS "organizations" CASCADE;

-- ----------------------------------------------------------------------------
-- Custom Enum Types
-- ----------------------------------------------------------------------------
DROP TYPE IF EXISTS "Role";
CREATE TYPE "Role" AS ENUM ('SUPERADMIN', 'ADMIN', 'MEMBER', 'VIEWER');
DROP TYPE IF EXISTS "MemberStatus";
CREATE TYPE "MemberStatus" AS ENUM ('INVITED', 'ACTIVE', 'SUSPENDED');

-- ----------------------------------------------------------------------------
-- Table Definitions
-- ----------------------------------------------------------------------------
CREATE TABLE "organizations" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "name" VARCHAR(128) NOT NULL,
  "slug" VARCHAR(64) NOT NULL UNIQUE,
  "domain" VARCHAR(128),
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  "updatedAt" TIMESTAMPTZ NOT NULL,
  PRIMARY KEY ("id")
);

CREATE TABLE "users" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "email" VARCHAR(255) NOT NULL UNIQUE,
  "fullName" VARCHAR(128) NOT NULL,
  "avatarUrl" VARCHAR(512),
  "emailVerified" TIMESTAMPTZ,
  "isActive" BOOLEAN NOT NULL DEFAULT true,
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  "updatedAt" TIMESTAMPTZ NOT NULL,
  PRIMARY KEY ("id")
);

CREATE TABLE "memberships" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "organizationId" UUID NOT NULL,
  "userId" UUID NOT NULL,
  "role" "Role" NOT NULL DEFAULT 'MEMBER',
  "status" "MemberStatus" NOT NULL DEFAULT 'ACTIVE',
  "joinedAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  PRIMARY KEY ("id"),
  UNIQUE ("organizationId", "userId")
);

CREATE TABLE "user_sessions" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "sessionToken" VARCHAR(255) NOT NULL UNIQUE,
  "userId" UUID NOT NULL,
  "ipAddress" VARCHAR(45),
  "userAgent" VARCHAR(512),
  "expiresAt" TIMESTAMPTZ NOT NULL,
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  PRIMARY KEY ("id")
);

-- ----------------------------------------------------------------------------
-- Foreign Key Constraints
-- ----------------------------------------------------------------------------
ALTER TABLE "memberships" ADD CONSTRAINT fk_memberships_organizationId FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE CASCADE;
ALTER TABLE "memberships" ADD CONSTRAINT fk_memberships_userId FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE;
ALTER TABLE "user_sessions" ADD CONSTRAINT fk_user_sessions_userId FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE;

-- ----------------------------------------------------------------------------
-- Secondary Indexes
-- ----------------------------------------------------------------------------
CREATE INDEX "idx_memberships_userId" ON "memberships" ("userId");
CREATE INDEX "idx_user_sessions_userId_expiresAt" ON "user_sessions" ("userId", "expiresAt");
4
Analysierte Modelle
27
Spalten & Attribute
100%
Ausführbares SQL bereit

Blitzschnelle Schema-Kompilierung

Parst Prisma-Modelle, Relationen, zusammengesetzte Primärschlüssel und native Typen direkt im Browser.

100% Privatsphäre & Datensicherheit

Ihre Datenbankschemata und Geschäftsdaten verlassen niemals Ihren Browser. Keine Cloud-Übertragung.

Multi-Dialekt SQL-Unterstützung

Optimierte DDL-Generierung für PostgreSQL, MySQL, SQLite und SQL Server mit dialektspezifischen Typen.

Technische Referenz & Architektur-Leitfaden

Prisma To Sql — Referenz-Leitfaden

Konvertieren Sie Prisma-Schemadefinitionen in produktionsbereite SQL-DDL-Migrationsskripte für PostgreSQL, MySQL und SQLite.

Wichtige Parameter & Steuerelemente

dialectSqlDialect (postgresql | mysql | sqlite | sqlserver)

Ziel-SQL-Dialekt zur Steuerung von Datentypprüfungen, Bezeichner-Anführungszeichen und Enum-Generierungsstrategien.

Standard: postgresql
dropTableIfExistsboolean

Stellt DROP TABLE IF EXISTS (und DROP TYPE unter PostgreSQL) voran, um idempotente, wiederholbare Migrationsskripte zu erzeugen.

Standard: true
includeForeignKeysboolean

Generiert FOREIGN KEY-Constraints aus Prisma @relation-Feldern inklusive der referentiellen Aktionen onDelete und onUpdate.

Standard: true
separateAlterFkboolean

Fügt Fremdschlüssel-Constraints als nachgestellte ALTER TABLE-Befehle statt inline ein, um zirkuläre Abhängigkeitsfehler zu vermeiden.

Standard: true
includeIndexesboolean

Erzeugt explizite CREATE INDEX- und CREATE UNIQUE INDEX-Anweisungen für Prisma @@index- und mehrspaltige @@unique-Attribute.

Standard: true
quoteIdentifiersboolean

Umschließt Tabellen-, Spalten- und Constraint-Namen mit datenbankspezifischen Anführungszeichen zur Vermeidung von Schlüsselwortkollisionen.

Standard: true

Profi-Tipps & Best Practices

ALTER TABLE für Fremdschlüssel

Aktivieren Sie separateAlterFk bei Modellen mit zyklischen Abhängigkeiten. Das Anlegen von Constraints nach allen CREATE TABLE-Befehlen verhindert Deadlocks bei der Ausführung von Schemamigrationen.

Client-seitige IDs in SQL abbilden

Funktionen wie @default(cuid()) oder @default(nanoid()) laufen in der JavaScript-Laufzeitumgebung ohne natives SQL-Äquivalent. Nutzen Sie VARCHAR(30) in Kombination mit @default(uuid()) für native DB-Generierung.

Spaltentypen mit @db präzisieren

Standard-String- und DateTime-Felder mappen auf generische Typen wie TEXT oder TIMESTAMP. Fügen Sie @db.VarChar(255), @db.Timestamptz oder @db.Decimal(12, 2) hinzu, um speicheroptimierte DDL zu erhalten.

PostgreSQL UpdatedAt per Trigger

Während MySQL @updatedAt über ON UPDATE CURRENT_TIMESTAMP auflöst, erfordert PostgreSQL einen prozeduralen Trigger. Ergänzen Sie die DDL mit einer PL/pgSQL-BEFORE-UPDATE-Triggerfunktion zur Aktualisierung.

Häufige Fallstricke & Fehlerbehebung

Fremdschlüsselerstellung schlägt mit relation does not exist fehl

Dies geschieht, wenn Inline-Fremdschlüssel auf eine Tabelle verweisen, die erst später im Skript angelegt wird. Aktivieren Sie separateAlterFk, um Tabellenerstellung von Beziehungsdefinitionen zu trennen.

PostgreSQL-Migration scheitert bei Wiederholung mit type already exists

Aktivieren Sie dropTableIfExists, um DROP TYPE IF EXISTS einzubinden, oder kapseln Sie Enums in DO $$ BEGIN ... EXCEPTION WHEN duplicate_object THEN null; END $$ Blöcken.

SQLite verweigert die Syntax ALTER TABLE ADD CONSTRAINT FOREIGN KEY

SQLite unterstützt kein nachträgliches Hinzufügen von Foreign Keys via ALTER TABLE. Definieren Sie Constraints für SQLite inline in CREATE TABLE oder verwenden Sie Staging-Tabellen für die Migration.

Häufig gestellte Fragen (FAQ)

Kann die erzeugte SQL-DDL direkt in produktiven CI/CD-Pipelines ohne Prisma CLI ausgeführt werden?▼

Ja. Das generierte SQL besteht aus standardkonformen, eigenständigen DDL-Anweisungen, die mit Flyway, Liquibase, golang-migrate sowie direkten psql- und mysql-Clients kompatibel sind.

Welche SQL-Strukturen repräsentieren implizite Many-to-Many-Beziehungen von Prisma?▼

Wenn zwei Modelle Listenbeziehungen ohne explizite Zwischentabelle definieren, generiert der Compiler eine normierte _ModelAToModelB-Verbindungstabelle mit zusammengesetzten Primär- und Fremdschlüsseln samt Kaskadierungsregeln.

Werden vertrauliche Schemadaten oder Zugangsdaten an externe Server übertragen?▼

Nein. Das Parsen des ASTs, das Auflösen des Beziehungsnetzwerks und das Emittieren des SQLs erfolgen zu 100% lokal im Browserspeicher mittels JavaScript. Es verlassen keinerlei Daten Ihre Arbeitsstation.

Welche DDL-Konstrukte bilden zusammengesetzte Unique-Constraints und Primärschlüssel ab?▼

Mehrspaltige @@id-Definitionen werden in PRIMARY KEY (spalte1, spalte2) übersetzt, während @@unique-Attribute je nach gewähltem SQL-Dialekt als CREATE UNIQUE INDEX oder Tabellen-Constraint gerendert werden.

Verwandte Werkzeuge & Dienstprogramme

Alle Werkzeuge →