SQLite
มันคืออะไร
ลองนึกภาพไฟล์เอกสารไฟล์เดียวที่คุณเปิดและแก้ไขได้โดยตรง โดยไม่ต้องมีโปรแกรมแยกต่างหากทำงานอยู่เบื้องหลังเพื่อคอยจัดการมัน SQLite ก็เป็นแบบนั้นสำหรับฐานข้อมูล มันคือฐานข้อมูลเชิงสัมพันธ์ (relational ) แบบ self-contained ที่ไม่ต้องมีเซิร์ฟเวอร์ และเก็บฐานข้อมูลทั้งหมดไว้ในไฟล์เดียว ไม่มีโปรเซสแยกให้ต้องรันหรือจัดการ แอปพลิเคชันของคุณจะเชื่อมโยง (link) ไลบรารีโดยตรง แล้วอ่านและเขียนไฟล์นั้น มันเป็นฐานข้อมูลที่ถูกใช้งานแพร่หลายที่สุดในโลก ฝังอยู่ในโทรศัพท์ เบราว์เซอร์ และแอปนับไม่ถ้วน
จุดแข็ง
- ไม่ต้องตั้งค่าใด ๆ และไม่ต้องมีเซิร์ฟเวอร์ให้ดูแล
- ฐานข้อมูลทั้งหมดเป็นไฟล์เดียวที่พกพาได้ ก็อปปี้หรือสำรองข้อมูลได้ง่าย
- อ่านข้อมูลในเครื่องได้เร็ว และรองรับปริมาณงานเขียนระดับปานกลางได้ดี
- รองรับ (Structured Query Language) แบบเต็มรูปแบบ พร้อมทรานแซกชัน (transaction) และคีย์นอก (foreign key)
- เหมาะมากสำหรับการทดสอบ การทำต้นแบบ (prototype) runtime และการฝังใช้งาน (embedded use)
ข้อแลกเปลี่ยน
- การเขียนพร้อมกันทำได้จำกัด เหมือนปากกาด้ามเดียวที่แชร์กันในกลุ่ม มีคนเขียนได้ทีละคนเท่านั้น แม้คนอื่นจะยังอ่านได้ (writer ทีละหนึ่งคน; WAL — write-ahead logging โหมดที่ช่วยให้การอ่านและการเขียนเกิดขึ้นพร้อมกันได้ — ช่วยบรรเทาปัญหานี้)
- ไม่ได้ถูกออกแบบมาสำหรับไคลเอนต์เครือข่ายจำนวนมาก หรือปริมาณงานเขียนที่สูงมาก
- มีชนิดข้อมูลขั้นสูงน้อยกว่า และไม่มีระบบผู้ใช้/สิทธิ์ (permission) ในตัว
- การขยายขนาดเกินกว่าโฮสต์เดียวต้องใช้ที่เก็บข้อมูลแบบอื่น หรือเลเยอร์เสริมอย่าง Turso/LiteFS
เมื่อไหร่ควรใช้
ใช้ SQLite สำหรับแอปแบบโลคัล เครื่องมือ (Command-Line Interface) ซอฟต์แวร์เดสก์ท็อปและมือถือ ชุดทดสอบ (test suite) และเว็บไซต์ขนาดเล็กถึงกลางที่เน้นการอ่านเป็นหลัก และยังใช้งานได้ดีขึ้นเรื่อย ๆ บน edge ผ่านตัวจำลอง (replica) ที่โฮสต์ไว้
เข้ากับ vibe coding แค่ไหน
เวลาสั่งงาน AI ให้ขอให้มันเปิดใช้ค่าเริ่มต้นที่ปลอดภัยก่อน คือเปิด PRAGMA foreign_keys = ON และ WAL journaling เพราะโดยค่าเริ่มต้น SQLite จะปิดคีย์นอกไว้ ให้ AI ใช้ parameterized statement และเก็บการย้ายสคีมา (schema migration) ไว้ในไฟล์ .sql ที่มีเวอร์ชันกำกับ เทคนิคที่มีประโยชน์คือบอก AI ว่าการเขียนถูกทำแบบเรียงลำดับ (serialized) ดังนั้นควรรวมการแทรกข้อมูล (insert) เป็นชุดในทรานแซกชันเดียว และหลีกเลี่ยงการล็อกการเขียนที่กินเวลานาน เนื่องจากฐานข้อมูลเป็นแค่ไฟล์ธรรมดา ให้ขอให้ AI ใส่ขั้นตอนสำรองข้อมูลง่าย ๆ (ก็อปปี้ไฟล์หรือใช้คำสั่ง .backup) ไว้ในเครื่องมือของคุณด้วย
PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
body TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Batch many inserts in one transaction for speed
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;