Dark mode
แนะนำให้ใช้ PostgreSQL ผ่าน ORM
แนะนำให้ใช้ PostgreSQL ผ่าน ORM เช่น drizzle เหตุผลเพราะว่า
- ORM จะ map database ให้อยู่ในรูปของ object ที่พร้อมใช้สำหรับ programming
- มี type-safe เวลาใช้มี autocomplete
- ใช้ง่ายกว่าสำหรับมือใหม่
- ถ้าเราไม่ใช้ platform อะไรที่มันยิ่งใหญ่ มี transaction มากมายมหาศาล ให้ Drizzle ก็เพียงพอ
เปรียบเทียบ PostgreSQL กับ ORM
ประเด็น | PostgreSQL โดยตรง | ใช้ผ่าน ORM |
---|---|---|
การเขียนโค้ด | เขียน SQL โดยตรง | เขียนในรูปแบบ Object ✓ |
Type Safety | ไม่มี type checking | มี type checking และ autocomplete ✓ |
Performance | ประสิทธิภาพสูงสุด แต่ต้องเขียน SQL เอง | อาจช้ากว่าเล็กน้อย แต่สะดวกกว่า ✓ |
Learning Curve | ต้องเรียนรู้ SQL เต็มรูปแบบ | เรียนรู้ API ของ ORM ✓ |
Flexibility | ควบคุมได้ทุกอย่าง ✓ | บางครั้งมีข้อจำกัดของ ORM |
การจัดการ Schema | ต้องเขียน migration เอง | หลาย ORM มีเครื่องมือจัดการ schema ให้ ✓ |
ความซับซ้อนของ Query | เขียน SQL ซับซ้อนได้เต็มที่ ✓ | บางครั้งต้องใช้ raw SQL สำหรับ query ซับซ้อน |
การบำรุงรักษา | ต้องจัดการ SQL string เอง | โค้ดอ่านง่ายและบำรุงรักษาง่ายกว่า ✓ |
Database Switching | ต้องเขียน SQL ใหม่ถ้าเปลี่ยน DB | บาง ORM รองรับหลาย DB โดยไม่ต้องเปลี่ยนโค้ด ✓ |
Transaction | ต้องจัดการ transaction เอง | ORM มักมี API สำหรับจัดการ transaction ✓ |
เขียน PostgreSQL โดยตรง
sql
-- สร้างตาราง
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
);
-- เพิ่มข้อมูล
INSERT INTO users (name, email) VALUES ('John', '[email protected]');
-- ค้นหาข้อมูล
SELECT * FROM users WHERE email = '[email protected]';
ใช้ผ่าน ORM (Drizzle)
typescript
// สร้างตาราง
const users = pgTable('users', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
email: text('email').unique()
});
// เพิ่มข้อมูล
await db.insert(users).values({ name: 'John', email: '[email protected]' });
// ค้นหาข้อมูล
const result = await db.select().from(users).where(eq(users.email, '[email protected]'));