การสร้าง Schema ของ Database ใหม่

บทนี้จะแนะนำวิธีเพิ่ม/แก้ไข Database Schema ด้วย Prisma อย่างถูกต้อง


⚠️ กฎสำคัญ

ใช้ npx prisma migrate dev สำหรับทุกการเปลี่ยนแปลง schema

ห้ามใช้ npx prisma db push เพราะอาจทำให้ข้อมูลหาย และไม่มี migration history


ขั้นตอนการสร้าง Schema ใหม่

1. แก้ไข schema.prisma

เปิดไฟล์ prisma/schema.prisma แล้วเพิ่ม model ใหม่:

// prisma/schema.prisma
model Post {
id String @id @default(cuid())
title String
content String?
published Boolean @default(false)
authorId String
author User @relation(fields: [authorId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

2. รัน migrate dev

npx prisma migrate dev --name add_post_model

สิ่งที่เกิดขึ้น:

  1. Prisma เปรียบเทียบ schema กับ database
  2. สร้างไฟล์ SQL ใน prisma/migrations/
  3. รัน SQL เพื่ออัพเดท database
  4. สร้าง Prisma Client ใหม่ (TypeScript types)

3. ตรวจสอบ Migration File

หลังจากรัน คุณจะเห็นไฟล์ใหม่:

prisma/migrations/
└── 20260123_add_post_model/
└── migration.sql

ตัวอย่างเนื้อหา migration.sql:

-- CreateTable
CREATE TABLE "Post" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Post_pkey" PRIMARY KEY ("id")
);

-- AddForeignKey
ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey"
FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

ข้อดีของ migrate dev

db pushmigrate dev
❌ ไม่มี history✅ มี migration files (git-trackable)
❌ อาจลบ column ทิ้ง✅ ตรวจสอบ SQL ก่อน commit ได้
❌ ไม่ sync กับ production✅ production ได้ SQL เดียวกัน 100%

สรุป

ขั้นตอนCommand
1. แก้ไข schemaEdit prisma/schema.prisma
2. สร้าง migrationnpx prisma migrate dev --name <name>
3. ตรวจสอบ SQLดูไฟล์ใน prisma/migrations/