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