SQL vers Zod
Modélisation de schéma et sécurité des types

SQL CREATE TABLE DDL to Zod Schema Converter

Traduisez les schémas de tables SQL, types de données, contraintes et colonnes nullables en schémas d'objets Zod fortement typés pour TypeScript.

Préréglages :
Options du compilateur SQL vers Zod et règles de typage
postgres•nullable•camel
Entrée(4 tables)
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 champs typés
Zod Schemas14 validateurs déduits

Exécution Locale Zero-Knowledge

Tous les traitements, analyses et générations s'exécutent strictement dans la mémoire de votre navigateur. Zéro transmission vers un serveur externe.

Moteur Réactif Submilliseconde

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

Production Ready Export

Clean, optimized output formats ready for immediate deployment.

Référence technique et guide d'architecture

Guide du Développeur pour le Convertisseur SQL CREATE TABLE DDL vers Schéma Zod — Guide de référence

Traduisez les schémas de tables SQL, types de données, contraintes et colonnes nullables en schémas d'objets Zod fortement typés pour TypeScript.

Paramètres clés et contrôles

Dialecte SQLEnum (PostgreSQL | MySQL | SQLite | SQL Server | MariaDB)

Définit le dialecte SQL cible pour analyser précisément les types de données spécifiques (tels que SERIAL, VARCHAR, DATETIME2, JSONB), les règles de guillemets d'identifiants et les contraintes.

Par défaut : PostgreSQL
Stratégie de Gestion des Valeurs NullesEnum (strict-nullable | nullish | optional-defaults)

Détermine la transposition des clauses SQL NULL et DEFAULT en modificateurs Zod : .nullable() strict, .nullish() (autorise null et undefined), ou .optional() pour les colonnes dotées d'une valeur par défaut ou d'un identifiant auto-incrémenté.

Par défaut : strict-nullable
Mode de Coercition de TypesBoolean

Encapsule les validations primitives dans z.coerce (ex. z.coerce.number(), z.coerce.date(), z.coerce.boolean()) afin de convertir à l'exécution les chaînes provenant de formulaires ou de paramètres d'URL.

Par défaut : false
Format Cible des DatesEnum (Date Instance (z.date()) | ISO String (z.string().datetime()) | Coerced Date (z.coerce.date()))

Définit la méthode de validation des types SQL TIMESTAMP, DATE et DATETIME : instances natives Date en JavaScript, chaînes ISO 8601 ou dates avec conversion automatique.

Par défaut : Date Instance (z.date())
Générer les Types InférésBoolean

Ajoute automatiquement les déclarations de types TypeScript exportées via z.infer<typeof schema> pour les opérations de lecture (select) et de création (insert).

Par défaut : true

Conseils de pro et bonnes practices

Dans les bases de données

Dans les bases de données relationnelles, les clés primaires dotées de SERIAL ou AUTO_INCREMENT ainsi que les colonnes avec DEFAULT sont produites automatiquement. Définissez un schéma de base, puis dérivez un schéma d'insertion avec .omit({ id: true, createdAt: true }) ou en appliquant .optional() aux colonnes générées.

Le DDL SQL type généralement les

Le DDL SQL type généralement les données semi-structurées sous la forme générique JSON ou JSONB, ce qui produit par défaut z.record(z.any()) ou z.unknown(). Remplacez ces types par des sous-schémas Zod imbriqués pour garantir une sécurité de typage de bout en bout.

Le type Number standard de JavaScript

Le type Number standard de JavaScript tronque la précision au-delà de 2^53 - 1. Lors de la conversion de colonnes SQL BIGINT ou NUMERIC / DECIMAL, assignez les identifiants à z.bigint() ou z.string() et les valeurs financières à des chaînes validées par regex (ex. z.string().regex(/^\d+\.\d{2}$/)).

Si votre base de données utilise la

Si votre base de données utilise la convention snake_case et que votre projet TypeScript emploie le camelCase, utilisez les transformations Zod (.transform((data) => ({ ... }))) ou .pipe() pour normaliser les clés à l'exécution sans modifier la structure de vos tables.

Pièges courants et dépannage

ZodError: Expected date, received string lors de l'analyse de données JSON d'API

Les requêtes JSON transmettent les dates sous forme de chaînes au format ISO 8601, ce qui échoue avec z.date(). Configurez le Format Cible des Dates sur 'ISO String (z.string().datetime())' ou activez le Mode de Coercition de Types (z.coerce.date()) pour instancier automatiquement des objets Date.

Les types ENUM PostgreSQL ou domaines personnalisés déclenchent des erreurs d'analyse

Assurez-vous que les instructions préalables CREATE TYPE ou les contraintes CHECK de colonnes sont incluses dans le DDL soumis. Le convertisseur traduira les enums PostgreSQL et les clauses CHECK (col IN (...)) sous forme de déclarations z.enum([...]).

Les clés primaires auto-incrémentées échouent lors de la validation d'une insertion

Les colonnes SERIAL ou IDENTITY sont marquées NOT NULL en base de données mais sont absentes lors de la création d'un enregistrement côté client. Réglez la Stratégie de Nulabilité sur 'optional-defaults' ou créez un schéma d'insertion dérivé avec .omit({ id: true }).

Foire aux questions (FAQ)

Comment le convertisseur traduit-il les colonnes nullables et NOT NULL en Zod ?▼

Les colonnes sans contrainte NOT NULL sont nullables en SQL et reçoivent le modificateur .nullable() en Zod. Les colonnes comportant une clause DEFAULT ou un auto-incrément peuvent être configurées en .optional() ou .nullish() (acceptant null et undefined) pour refléter fidèlement les charges utiles d'insertion.

Quelle est la différence entre z.date(), z.coerce.date() et z.string().datetime() ?▼

z.date() exige que la valeur fournie soit déjà une instance de l'objet Date JavaScript (courant avec les ORM comme Drizzle ou Prisma). z.string().datetime() valide la conformité d'une chaîne ISO 8601 sans la modifier. z.coerce.date() accepte les chaînes, timestamps et objets Date en exécutant automatiquement new Date(val).

Les schémas Zod générés sont-ils compatibles avec des ORM tels que Drizzle, Prisma ou Kysely ?▼

Oui, parfaitement. Les schémas Zod générés sont idéaux pour valider à l'exécution les entrées des routes d'API, Server Actions ou contrôleurs avant que les données typées ne soient transmises aux méthodes d'insertion ou de mise à jour de votre ORM.

Mon schéma SQL DDL est-il transmis à un serveur distant ou un service cloud ?▼

Non. L'analyse syntaxique du SQL, l'arbre syntaxique abstrait (AST) et la génération du code TypeScript s'effectuent à 100 % localement dans votre navigateur via des Web Workers. Aucune donnée de schéma ne transite sur le réseau.

Comment les contraintes CHECK et les clés étrangères SQL sont-elles prises en compte ?▼

Les contraintes CHECK avec liste de valeurs (ex. CHECK (status IN ('active', 'inactive'))) sont converties en z.enum(). Les restrictions d'intervalles numériques deviennent des raffinements tels que .min() ou .max(). Les clés étrangères conservent leur type scalaire de base (ex. z.string().uuid() ou z.number().int()).

Outils et utilitaires connexes

Tous les outils →
Convertisseur Docker Compose vers Manifestes Kubernetes (Compose vers K8s) - Guide DéveloppeurDéveloppement

Convertissez les services, variables d'environnement, ports et montages de volumes docker-compose.yml en manifestes YAML Kubernetes Deployment et Service.

Ouvrir l'outil→
Guide du Développeur : Convertisseur JSON en Variables d'Environnement .env (Aplatir & Exporter)Développement

Aplatissez les charges utiles JSON imbriquées en configurations .env en SNAKE_CASE majuscule avec délimiteurs et préfixes personnalisables.

Ouvrir l'outil→
Générateur de Schémas SQL DDL vers Drizzle ORM (PostgreSQL, MySQL, SQLite) - Guide DéveloppeurDéveloppement

Convertissez vos instructions SQL CREATE TABLE en schémas Drizzle ORM fortement typés avec des définitions pgTable, mysqlTable et sqliteTable.

Ouvrir l'outil→
Guide Développeur : Générateur de Schémas Valibot depuis JSON (Validation TypeScript Modulaire)Développement

Transformez vos données JSON en définitions de schémas Valibot légères et compatibles tree-shaking avec v.object, v.string, v.number et des validateurs de tableaux.

Ouvrir l'outil→
Générateur de Schémas JSON vers TypeBox - Guide DéveloppeurDéveloppement

Convertissez des structures JSON en définitions TypeBox Type.Object haute performance pour Fastify, Ajv et la validation TypeScript à l'exécution.

Ouvrir l'outil→
Générateur de Migration Prisma Schema vers SQL DDLDéveloppement

Guide technique pour convertir des schémas Prisma en scripts SQL DDL compatibles PostgreSQL, MySQL et SQLite.

Ouvrir l'outil→