Migration คือการจัดการการเปลี่ยนแปลง Schema อย่างเป็นลำดับและตรวจสอบย้อนหลังได้ ส่วน Seeding คือการใส่ข้อมูลตัวอย่างหรือข้อมูลเริ่มต้นเพื่อใช้ใน Development, Test หรือ Demo
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart LR
subgraph Era1["ยุคแก้ DB Manual / Manual Change"]
A["ALTER TABLE ด้วยมือ
จำไม่ได้ว่าเปลี่ยนอะไร"]
end
subgraph Era2["ยุค Versioned Schema / Migration"]
B["Migration Files
เปลี่ยน schema เป็นลำดับ"]
C["Commit to Git
ทีมใช้ร่วมกัน"]
end
subgraph Era3["ยุค Reproducible Dev DB"]
D["Seed Data
ข้อมูลตัวอย่าง"]
E["Reset + Seed
สร้าง DB ใหม่ได้ซ้ำ"]
end
A --> B --> C --> D --> E
npx prisma migrate dev --name add_users_tablenpx prisma migrate resetprisma/seed.ts สามารถใช้ prisma.user.createMany({ data: [...] })npx prisma db seed ใช้รัน seed script| หัวข้อ | Migration | Seeding |
|---|---|---|
| หน้าที่ | เปลี่ยน schema | ใส่ข้อมูลเริ่มต้น |
| ตัวอย่าง | add users table | เพิ่ม admin user |
| รันเมื่อ | เปลี่ยนโครงสร้าง DB | เตรียม dev/test data |
| ควร commit | ใช่ | ใช่ ถ้าเป็น seed script ไม่ใช่ secret |
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart TD
A["แก้ schema.prisma
Update schema"] --> B["migrate dev
สร้าง migration"]
B --> C["Database Updated
DB เปลี่ยนตาม schema"]
C --> D["Commit Migration
เก็บใน Git"]
D --> E["Team Pull
ทีมดึงไปใช้"]
E --> F["db seed
ใส่ข้อมูลตัวอย่าง"]
# สร้าง migration หลังแก้ schema.prisma
npx prisma migrate dev --name add_users_table
# reset database และรัน migration ใหม่
npx prisma migrate reset
# รัน seed script
npx prisma db seed
// prisma/seed.ts
// Seed ข้อมูลตัวอย่างสำหรับ development
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
await prisma.user.createMany({
data: [
{ name: 'Ana', email: 'ana@example.com' },
{ name: 'Bob', email: 'bob@example.com' }
],
skipDuplicates: true
});
}
main()
.catch(error => {
console.error(error);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
// ตัวอย่างการใช้งาน:
// เพิ่ม config seed ใน package.json แล้วรัน npx prisma db seed
{
"prisma": {
"seed": "ts-node prisma/seed.ts"
}
}
User ใน schema.prismaadd_users_table