ORM (Object-Relational Mapping) คือแนวคิดการเชื่อมระหว่าง Object ในภาษาโปรแกรมกับ Table ในฐานข้อมูล ทำให้นักพัฒนาเรียกข้อมูลผ่าน method แทนการเขียน SQL ทุกครั้ง
%%{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["ยุค Raw SQL / Manual Query"]
A["เขียน SQL เอง
ควบคุมสูง"]
end
subgraph Era2["ยุค ORM / Model API"]
B["Sequelize
Model-based ORM"]
C["Prisma
Schema + Type Safety"]
end
subgraph Era3["ยุค Type-safe Backend"]
D["Generated Client
autocomplete"]
E["Migration
schema เป็นระบบ"]
end
A --> B --> C --> D --> E
npx prisma init และกำหนด schema ใน schema.prismamodel User { id Int @id @default(autoincrement()) }findMany(), findUnique(), create(), update(), delete()npx prisma migrate devModel.findAll(), Model.create(), where, include| หัวข้อ | Prisma | Sequelize |
|---|---|---|
| แนวทาง | Schema-first | Model-first |
| Type Safety | เด่นมาก | ต้องเสริม TypeScript เอง |
| Migration | Prisma Migrate | Sequelize CLI |
| Query API | Generated Client | Model Methods |
| เหมาะกับ | TypeScript project | โปรเจกต์ Node.js แบบยืดหยุ่น |
%%{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
A["User Object
ข้อมูลในโค้ด"] --> B["ORM Client
Prisma/Sequelize"]
B --> C["SQL Query
คำสั่งฐานข้อมูล"]
C --> D["users Table
ตารางใน DB"]
D --> B --> A
// prisma/schema.prisma
// กำหนดโครงสร้างฐานข้อมูลด้วย Prisma Model
model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
userId Int
user User @relation(fields: [userId], references: [id])
}
// prisma-demo.mjs
// ใช้ Prisma Client จัดการข้อมูล
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
const user = await prisma.user.create({
data: {
name: 'Ana',
email: 'ana@example.com',
posts: {
create: [{ title: 'First post' }]
}
}
});
const users = await prisma.user.findMany({
include: { posts: true }
});
console.log(user, users);
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
// ตัวอย่างการใช้งาน:
// npx prisma init
// npx prisma migrate dev --name init
// node prisma-demo.mjs
User และ CoursefindMany() และ create()