erd.sketch

Prisma → SQL:由结构描述生成 DDL

结构不必以 SQL 形式送来。下面是真实的转换:左边是 Prisma 描述,右边是编辑器由它生成的结果。

输入schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique @db.VarChar(255)
  fullName  String?  @map("full_name")
  createdAt DateTime @default(now()) @map("created_at")
  orders    Order[]

  @@map("users")
}

model Order {
  id        Int      @id @default(autoincrement())
  userId    Int      @map("user_id")
  user      User     @relation(fields: [userId], references: [id], onDelete: Cascade)
  total     Decimal  @db.Decimal(12, 2)
  placedAt  DateTime @map("placed_at")

  @@index([userId])
  @@map("orders")
}
输出schema.sql
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email varchar(255) NOT NULL UNIQUE,
    full_name text,
    created_at timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    user_id integer NOT NULL,
    total decimal(12, 2) NOT NULL,
    placed_at timestamp(3) NOT NULL
);

ALTER TABLE orders ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE;

CREATE INDEX idx_orders_user_id ON orders (user_id);
打开编辑器

脚本留在浏览器里:解析和生成都在您的机器上进行,不会上传到服务器。

什么变成什么

源格式中在 SQL 里
@id @default(autoincrement())SERIAL PRIMARY KEY
String @db.VarChar(255)varchar(255)
@uniqueUNIQUE
@map("full_name")full_name
@default(now())DEFAULT CURRENT_TIMESTAMP
onDelete: CascadeREFERENCES users (id) ON DELETE CASCADE
@@map("users")CREATE TABLE users