SQL CREATE TABLE DDL zu Zod-Schema Konverter
Schema-Modellierung & Typsicherheit

SQL CREATE TABLE DDL to Zod Schema Converter

Konvertieren Sie SQL-Tabellenschemata, Datentypen, Constraints und Nullable-Spalten in typsichere TypeScript Zod-Objektschemata.

Voreinstellungen:
SQL-zu-Zod-Compiler-Optionen & Typregeln
postgres•nullable•camel
Eingabe(4 Tabellen)
import { z } from 'zod';

// ============================================================================
// Enums
// ============================================================================

userRoleSchema = z.enum(['SUPERADMIN', 'ORG_ADMIN', 'MEMBER', 'BILLING', 'GUEST']);
UserRole = z.infer<typeof userRoleSchema>;

subscriptionStatusSchema = z.enum(['TRIALING', 'ACTIVE', 'PAST_DUE', 'CANCELED']);
SubscriptionStatus = z.infer<typeof subscriptionStatusSchema>;

// ============================================================================
// Table: organizations
// ============================================================================
organizationsSchema = z.object({
  id: z.string().uuid(),
  slug: z.string().max(64),
  name: z.string().max(255),
  billingEmail: z.string().email().max(255),
  status: subscriptionStatusSchema,
  settings: z.record(z.string(), z.unknown()).nullable(),
  isActive: z.boolean(),
  createdAt: z.coerce.date(),
  updatedAt: z.coerce.date(),
});

Organization = z.infer<typeof organizationsSchema>;

// ============================================================================
// Table: users
// ============================================================================
usersSchema = z.object({
  id: z.string().uuid(),
  organizationId: z.string().uuid(),
  email: z.string().email().max(255),
  fullName: z.string().max(120).nullable(),
  avatarUrl: z.string().url().max(500).nullable(),
  role: userRoleSchema,
  phoneNumber: z.string().max(32).nullable(),
  isVerified: z.boolean(),
  lastLoginAt: z.coerce.date().nullable(),
  createdAt: z.coerce.date(),
});

User = z.infer<typeof usersSchema>;

// ============================================================================
// Table: api_keys
// ============================================================================
apiKeysSchema = z.object({
  id: z.coerce.number().int().positive(),
  organizationId: z.string().uuid(),
  userId: z.string().uuid().nullable(),
  keyPrefix: z.string().max(12),
  hashedSecret: z.string().max(128),
  scopes: z.record(z.string(), z.unknown()),
  expiresAt: z.coerce.date().nullable(),
  revokedAt: z.coerce.date().nullable(),
  createdAt: z.coerce.date(),
});

ApiKey = z.infer<typeof apiKeysSchema>;

// ============================================================================
// Table: audit_logs
// ============================================================================
auditLogsSchema = z.object({
  id: z.coerce.number().int().positive(),
  organizationId: z.string().uuid(),
  actorId: z.string().uuid().nullable(),
  eventName: z.string().max(100),
  ipAddress: z.string().ip().nullable(),
  userAgent: z.string().max(500).nullable(),
  payload: z.record(z.string(), z.unknown()).nullable(),
  createdAt: z.coerce.date(),
});

AuditLog = z.infer<typeof auditLogsSchema>;
Parsed Tables4 schemas ready
Columns Mapped36 Felder typisiert
Zod Schemas14 Validatoren abgeleitet

Zero-Knowledge Lokale Ausführung

Alle Datenverarbeitungen, Parsen und Generierungen laufen streng im lokalen Browserspeicher ab. Keine externen Server-Uploads.

Sub-Millisekunden AST-Engine

All data payloads remain strictly local with zero external server communication.

Production Ready Export

Clean, optimized output formats ready for immediate deployment.

Technische Referenz & Architektur-Leitfaden

SQL CREATE TABLE DDL zu Zod-Schema Konverter — Referenz-Leitfaden

Konvertieren Sie SQL-Tabellenschemata, Datentypen, Constraints und Nullable-Spalten in typsichere TypeScript Zod-Objektschemata.

Wichtige Parameter & Steuerelemente

SQL-DialektEnum (PostgreSQL | MySQL | SQLite | SQL Server | MariaDB)

Legt den Ziel-SQL-Parser-Dialekt fest, um typspezifische Datentypen (wie SERIAL, VARCHAR, DATETIME2, JSONB), Bezeichner-Quoting und Constraint-Klauseln präzise zu interpretieren.

Standard: PostgreSQL
Nullability-StrategieEnum (strict-nullable | nullish | optional-defaults)

Bestimmt, wie SQL-NULL- und DEFAULT-Klauseln in Zod-Modifikatoren übersetzt werden: striktes .nullable(), .nullish() (null oder undefined) oder .optional() für Felder mit Spalten-Defaults oder Autoincrement-Schlüsseln.

Standard: strict-nullable
Typ-KoerzisionsmodusBoolean

Ummantelt primitive Validierungen mit z.coerce (z. B. z.coerce.number(), z.coerce.date(), z.coerce.boolean()), um eingehende Zeichenketten aus Formulardaten und URL-Parametern zur Laufzeit automatisch zu konvertieren.

Standard: false
DatumszielformatEnum (Date Instance (z.date()) | ISO String (z.string().datetime()) | Coerced Date (z.coerce.date()))

Definiert, wie SQL-Datentypen wie TIMESTAMP, DATE und DATETIME validiert werden: als native JavaScript-Date-Instanzen, ISO-8601-Strings oder automatisch konvertierte Datumswerte.

Standard: Date Instance (z.date())
Integrierte Typinferenz generierenBoolean

Erzeugt automatisch exportierte TypeScript-Typdefinitionen über z.infer<typeof schema> für Lese- und Schreiboperationen (Select und Insert).

Standard: true

Profi-Tipps & Best Practices

In relationalen Datenbanken werden

In relationalen Datenbanken werden Primärschlüssel mit AUTO_INCREMENT oder SERIAL sowie Spalten mit DEFAULT-Werten beim Einfügen automatisch generiert. Definieren Sie ein Basisschema und leiten Sie ein Insert-Schema mittels .omit({ id: true, createdAt: true }) oder .optional() für generierte Spalten ab.

SQL-DDL definiert semistrukturierte

SQL-DDL definiert semistrukturierte Felder meist pauschal als JSON oder JSONB, was standardmäßig zu z.record(z.any()) oder z.unknown() führt. Ersetzen Sie diese durch typisierte Zod-Sub-Schemata, um eine durchgängige Typsicherheit zwischen Datenbank und Anwendung sicherzustellen.

Standard-JavaScript-Zahlenwerte

Standard-JavaScript-Zahlenwerte verlieren oberhalb von 2^53 - 1 ihre Präzision. Ordnen Sie SQL-BIGINT-Spalten z.bigint() oder z.string() zu und validieren Sie hochpräzise Finanz-Dezimalzahlen mittels z.string().regex(/^\d+\.\d{2}$/), um Rundungsfehler zu eliminieren.

Wenn Ihre Datenbank Konventionen in

Wenn Ihre Datenbank Konventionen in snake_case nutzt, Ihre TypeScript-Codebasis jedoch camelCase erfordert, können Sie mit Zod-Transformationen (.transform((data) => ({ ... }))) oder .pipe() Schlüsselnamen zur Laufzeit normalisieren, ohne das Datenbankschema anzupassen.

Häufige Fallstricke & Fehlerbehebung

ZodError: Expected date, received string bei der Validierung von JSON-Payloads

JSON überträgt Datumsangaben als ISO-8601-Zeichenketten, wodurch eine direkte Validierung mit z.date() fehlschlägt. Ändern Sie das Datumszielformat auf 'ISO String (z.string().datetime())' oder aktivieren Sie den Typ-Koerzisionsmodus (z.coerce.date()), um Zeichenketten automatisch in Date-Objekte umzuwandeln.

PostgreSQL-ENUM-Typen oder benutzerdefinierte Typen erzeugen Parserfehler

Stellen Sie sicher, dass zugehörige CREATE TYPE-Anweisungen oder Inline-CHECK-Constraints im DDL-Eingabetext enthalten sind. Der Konverter übersetzt PostgreSQL-Enums und CHECK (spalte IN (...))-Klauseln automatisch in z.enum([...]).

Autoincrement-Primärschlüssel schlagen bei der Insert-Validierung fehl

Spalten mit SERIAL oder IDENTITY sind in der Datenbank als NOT NULL deklariert, fehlen jedoch bei Insert-Aufrufen von Clients. Setzen Sie die Nullability-Strategie auf 'optional-defaults' oder leiten Sie ein Insert-Schema mittels .omit({ id: true }) ab.

Häufig gestellte Fragen (FAQ)

Wie bildet der Konverter SQL-Nullable-Spalten in Zod ab?▼

Spalten ohne NOT NULL-Constraint sind in SQL nullable und erhalten im Zod-Schema den Modifikator .nullable(). Spalten mit DEFAULT-Klauseln oder Autoincrement können als .optional() oder .nullish() (akzeptiert null und undefined) konfiguriert werden, um dem Verhalten bei Datensatz-Einfügungen zu entsprechen.

Was ist der Unterschied zwischen z.date(), z.coerce.date() und z.string().datetime()?▼

z.date() erfordert, dass der Eingabewert bereits eine JavaScript-Date-Instanz ist (z. B. bei ORM-Abfragen). z.string().datetime() validiert eingehende ISO-8601-Strings ohne Modifikation. z.coerce.date() akzeptiert Strings, Unix-Timestamps oder Date-Objekte und ruft bei der Validierung intern new Date(val) auf.

Können die generierten Zod-Schemata mit ORMs wie Drizzle, Prisma oder Kysely verwendet werden?▼

Ja, uneingeschränkt. Die Schemata eignen sich hervorragend zur Laufzeitvalidierung in API-Routen, Server Actions oder Controllern, bevor validierte und typisierte Daten an Drizzle-, Prisma- oder Kysely-Operationen übergeben werden.

Werden meine SQL-DDL-Anweisungen an externe Server übertragen?▼

Nein. Das Parsing von SQL, die Erstellung des abstrakten Syntaxbaums (AST) sowie die Generierung des TypeScript-Codes erfolgen zu 100 % lokal im Browser über clientseitige Web Worker. Es werden keinerlei Tabellenschemata über das Netzwerk übertragen.

Wie werden SQL-CHECK-Constraints und Fremdschlüssel übersetzt?▼

CHECK-Constraints mit festen Wertelisten (z. B. CHECK (status IN ('active', 'inactive'))) werden in z.enum() transformiert. Numerische Wertegrenzen werden auf .min() oder .max() abgebildet. Fremdschlüsselspalten behalten ihren zugrunde liegenden Skalartyp wie z.string().uuid() oder z.number().int() bei.

Verwandte Werkzeuge & Dienstprogramme

Alle Werkzeuge →