Skip to content

บทที่ 9: Database

“บ้านต้องมีที่เก็บของ Database คือตู้เก็บเอกสารของเว็บไซต์”

The Blueprint (พิมพ์เขียว)

Section titled “The Blueprint (พิมพ์เขียว)”

ทุกแอปพลิเคชันต้อง “จำ” ข้อมูล:

  • รายชื่อผู้ใช้
  • สินค้าในระบบ
  • ประวัติการสั่งซื้อ

Database = ตู้เก็บเอกสารดิจิทัล ที่ค้นหาได้เร็ว เก็บได้เยอะ และปลอดภัย

The Construction Site (หน้างานก่อสร้าง)

Section titled “The Construction Site (หน้างานก่อสร้าง)”
FeatureSQLNoSQL
โครงสร้างตารางตายตัวยืดหยุ่น
ความสัมพันธ์RelationalDocument-based
ตัวอย่างPostgreSQL, MySQLMongoDB
เหมาะกับE-commerce, FinanceCMS, IoT

🐘 PostgreSQL — ตู้เก็บเอกสารมีระเบียบ

Section titled “🐘 PostgreSQL — ตู้เก็บเอกสารมีระเบียบ”
-- สร้างตาราง
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- ดึงข้อมูล
SELECT * FROM users WHERE email LIKE '%@gmail.com';
-- เชื่อมตาราง (JOIN)
SELECT orders.*, users.name
FROM orders
JOIN users ON orders.user_id = users.id;

🍃 MongoDB — กล่องใส่ของยืดหยุ่น

Section titled “🍃 MongoDB — กล่องใส่ของยืดหยุ่น”
// Document (เหมือน JSON)
{
"_id": "abc123",
"name": "สมชาย",
"email": "somchai@email.com",
"orders": [
{ "product": "iPhone", "price": 35000 },
{ "product": "Case", "price": 500 }
]
}

Material Selection (เลือกสเปกวัสดุ)

Section titled “Material Selection (เลือกสเปกวัสดุ)”
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(url, key);
// ดึงข้อมูล
const { data, error } = await supabase
.from('products')
.select('*')
.eq('category', 'electronics');
// เพิ่มข้อมูล
const { data, error } = await supabase
.from('products')
.insert({ name: 'iPhone 15', price: 35000 });
โปรเจกต์Database แนะนำ
E-commercePostgreSQL
Blog/CMSMongoDB หรือ PostgreSQL
Real-timeSupabase
AnalyticsClickHouse

Architect’s Note (บันทึกสถาปนิก)

Section titled “Architect’s Note (บันทึกสถาปนิก)”
  1. ใช้ Index — Query ที่ค้นหาบ่อยต้องมี Index
  2. Backup เป็นประจำ — Database หาย = ธุรกิจหาย
  3. อย่าเก็บ Password เป็น Plain Text — Hash ด้วย bcrypt
  1. ใช้ ORM (Prisma, Drizzle) แทน Raw SQL
  2. Normalize ข้อมูล (ลดการซ้ำซ้อน)
  3. ใช้ Transactions สำหรับ operations ที่ต้องสำเร็จพร้อมกัน