ระบบฐานข้อมูล
1. ACID Properties: หัวใจของฐานข้อมูลที่น่าเชื่อถือ
กฎ 4 ข้อที่ Transaction ใน Database ต้องมี:
- Atomicity: ต้องทำสำเร็จ 'ทั้งหมด' หรือ 'ไม่ทำเลย' (All or Nothing)
- Consistency: ข้อมูลต้องความถูกต้องตามกฎเกณฑ์ (เช่น ยอดเงินห้ามติดลบ)
- Isolation: รายการที่ทำพร้อมกันต้องแยกจากกัน ไม่กวนกัน (Locking)
- Durability: เมื่อทำสำเร็จแล้ว ข้อมูลต้องอยู่ถาวรแม้ไฟดับ (Save to disk)
2. Normalization: การกำจัดความซ้ำซ้อนระดับสูง
| Level | ปัญหาที่กำจัด | คำอธิบายเชิงลึก |
|---|---|---|
| 1NF | Multi-valued attributes | ห้ามมีค่า 'คอมพิวเตอร์, ภาษาไทย' ในช่องเดียว ต้องแตกบรรทัด |
| 2NF | Partial Functional Dependencies | ถ้า PK มีสองตัว ทุกช่องต้องขึ้นกับทั้งคู่ ไม่ใช่ขึ้นกับแค่ตัวเดียว |
| 3NF | Transitive dependencies | ห้ามมี A -> B -> C (C ต้องไปสร้างตารางใหม่พร้อม B เป็น PK) |
| BCNF | Anomalies in overlapping keys | ความเข้มงวดที่มากกว่า 3NF ในกรณีที่คีย์มีหลายชุดซ้อนกัน |
3. SQL: Advanced Queries & Aggregate Functions
คำสั่ง SQL สำหรับการสรุปผลและจัดการความปลอดภัย:
- GROUP BY / HAVING: ใช้จัดกลุ่มข้อมูลเพื่อสรุปผล (HAVING ใช้แทน WHERE ในกรณีเช็คค่า Aggregate)
- COUNT, SUM, AVG, MIN, MAX: ฟังก์ชันรวมกลุ่มข้อมูล
- UNION vs UNION ALL: การรวมผลลัพธ์จาก 2 QUERY (UNION จะตัดตัวที่ซ้ำออก)
- INDEX: การสร้างดัชนีเพื่อช่วยค้นหาข้อมูลได้เร็วขึ้น (แลกกับพื้นที่เก็บข้อมูลเพิ่ม)
- VIEW: ตารางเสมือนที่สร้างจาก Query (ไม่เก็บข้อมูลจริง) ช่วยเรื่อง Security
4. Database Security & Backup
การป้องกันและสำรองข้อมูล:
- SQL Injection: การฉีดโค้ดทำลาย Query ผ่านช่อง Input
- Prevention: ใช้ Parameterized Query / Prepared Statement
- Backup Types: Full (หมด), Incremental (เทียบครั้งก่อน), Differential (เทียบ Full ครั้งก่อน)
5. E-R Diagram (Entity-Relationship)
การออกแบบความสัมพันธ์:
- One-to-One (1:1): พลเมือง 1 คน มีบัตรปชช. 1 ใบ
- One-to-Many (1:M): แม่ 1 คน มีลูกหลายคน (ใช้ FK แปะฝั่ง M)
- Many-to-Many (M:N): นักเรียนหลายคน ลงเรียนหลายวิชา (ต้องมีตารางกลาง Junction Table)
6. คำสั่ง SQL พื้นฐานสำคัญ - CRUD Operations
CRUD คือคำสั่งพื้นฐาน 4 ประเภทสำหรับจัดการข้อมูล: Create, Read, Update, Delete
| Operation | คำสั่ง SQL | รูปแบบการใช้งาน | ตัวอย่าง |
|---|---|---|---|
| Create | INSERT INTO | INSERT INTO table (col1, col2) VALUES (val1, val2) | INSERT INTO users (name, age) VALUES ('สมชาย', 25) |
| Read | SELECT | SELECT col1, col2 FROM table WHERE condition | SELECT * FROM users WHERE age > 20 |
| Update | UPDATE | UPDATE table SET col1 = val1 WHERE condition | UPDATE users SET age = 26 WHERE name = 'สมชาย' |
| Delete | DELETE | DELETE FROM table WHERE condition | DELETE FROM users WHERE id = 5 |
คำสั่ง DDL (Data Definition Language) - คำสั่งสร้าง/แก้ไขโครงสร้าง
- CREATE TABLE: สร้างตารางใหม่
- ALTER TABLE: แก้ไขโครงสร้างตาราง (เพิ่ม/ลบ Column)
- DROP TABLE: ลบตารางทิ้ง (ระวัง! ลบทั้งโครงสร้างและข้อมูล)
- TRUNCATE TABLE: ลบข้อมูลทั้งหมดในตาราง (เร็วกว่า DELETE)
คำสั่ง DCL (Data Control Language) - คำสั่งควบคุมสิทธิ์
- GRANT: ให้สิทธิ์ผู้ใช้ เช่น GRANT SELECT ON users TO user1
- REVOKE: เพิกถอนสิทธิ์ผู้ใช้ เช่น REVOKE DELETE ON users FROM user1
7. JOIN - การเชื่อมตาราง
JOIN ใช้เพื่อดึงข้อมูลจากหลายตารางที่มีความสัมพันธ์กันมารวมกัน เป็นหัวข้อที่ออกสอบบ่อยมาก
| ประเภท JOIN | ผลลัพธ์ | คำอธิบาย |
|---|---|---|
| INNER JOIN | เฉพาะที่ตรงกันทั้งสองฝั่ง | ถ้าไม่มีคู่ในอีกตาราง → ไม่แสดง |
| LEFT JOIN (LEFT OUTER) | ทั้งหมดจากซ้าย + ที่ตรงกันจากขวา | ถ้าไม่มีคู่ทางขวา → แสดง NULL |
| RIGHT JOIN (RIGHT OUTER) | ทั้งหมดจากขวา + ที่ตรงกันจากซ้าย | ถ้าไม่มีคู่ทางซ้าย → แสดง NULL |
| FULL OUTER JOIN | ทั้งหมดจากทั้งสองฝั่ง | ไม่มีคู่ฝั่งไหน → แสดง NULL ฝั่งนั้น |
| CROSS JOIN | ทุกแถวของตาราง A × ทุกแถวของตาราง B | Cartesian Product (ถ้า A มี 3 แถว, B มี 4 แถว = 12 แถว) |
| SELF JOIN | ตารางเดียวกัน JOIN กับตัวเอง | ใช้หาความสัมพันธ์ภายในตาราง เช่น หัวหน้า-ลูกน้อง |
ตัวอย่าง: ตาราง Employees (id, name, dept_id) และ Departments (id, dept_name)
- INNER JOIN: SELECT e.name, d.dept_name FROM Employees e INNER JOIN Departments d ON e.dept_id = d.id
- → แสดงเฉพาะพนักงานที่มีแผนกตรงกัน
- LEFT JOIN: SELECT e.name, d.dept_name FROM Employees e LEFT JOIN Departments d ON e.dept_id = d.id
- → แสดงพนักงานทุกคน (ถ้าไม่มีแผนก dept_name = NULL)
8. ชนิดข้อมูลใน SQL (Data Types)
การเลือกชนิดข้อมูลที่เหมาะสมมีผลต่อประสิทธิภาพและความถูกต้องของฐานข้อมูล
| หมวด | ชนิดข้อมูล | คำอธิบาย | ตัวอย่าง |
|---|---|---|---|
| ตัวเลข | INT / INTEGER | เลขจำนวนเต็ม (-2.1 พันล้าน ถึง 2.1 พันล้าน) | อายุ, จำนวนสินค้า |
| ตัวเลข | DECIMAL(p,s) / NUMERIC | เลขทศนิยมแม่นยำ (p=หลักทั้งหมด, s=ทศนิยม) | DECIMAL(10,2) สำหรับราคา |
| ตัวเลข | FLOAT / DOUBLE | เลขทศนิยมแบบประมาณ (เร็วแต่ไม่แม่นยำ 100%) | ค่าทางวิทยาศาสตร์ |
| ข้อความ | CHAR(n) | ความยาวคงที่ n ตัวอักษร (เติม Space ถ้าสั้นกว่า) | รหัสไปรษณีย์ CHAR(5) |
| ข้อความ | VARCHAR(n) | ความยาวไม่เกิน n ตัวอักษร (ประหยัดพื้นที่กว่า) | ชื่อ VARCHAR(100) |
| ข้อความ | TEXT | ข้อความยาวมากไม่จำกัด | รายละเอียดสินค้า, บทความ |
| วันเวลา | DATE | วันที่ (YYYY-MM-DD) | 2024-01-15 |
| วันเวลา | DATETIME / TIMESTAMP | วันที่และเวลา | 2024-01-15 14:30:00 |
| อื่นๆ | BOOLEAN | ค่าจริง/เท็จ (TRUE/FALSE หรือ 1/0) | สถานะ Active/Inactive |
| อื่นๆ | BLOB | ข้อมูล Binary ขนาดใหญ่ | รูปภาพ, ไฟล์ |
9. Stored Procedure, Function และ Trigger
เป็นโค้ดที่เก็บไว้ในฐานข้อมูลเพื่อให้เรียกใช้ซ้ำได้ ช่วยลดโค้ดและเพิ่มประสิทธิภาพ
| ประเภท | คำอธิบาย | การเรียกใช้ | ตัวอย่างการใช้งาน |
|---|---|---|---|
| Stored Procedure | ชุดคำสั่ง SQL ที่เก็บไว้ เรียกใช้ตอนไหนก็ได้ | CALL procedure_name() | รายงานยอดขายรายเดือน, การสร้างบัญชีใหม่ |
| Function | เหมือน Procedure แต่ต้อง RETURN ค่ากลับ | SELECT function_name() | คำนวณภาษี, หาอายุจากวันเกิด |
| Trigger | ทำงานอัตโนมัติเมื่อเกิด INSERT/UPDATE/DELETE | ทำงานเอง | บันทึก Log, อัพเดทยอดรวมอัตโนมัติ |
| View | ตารางเสมือนที่สร้างจาก SELECT | SELECT * FROM view_name | ซ่อนข้อมูลบางส่วน, Query ที่ใช้บ่อย |
- Trigger BEFORE: ทำงานก่อน INSERT/UPDATE/DELETE (ใช้ตรวจสอบข้อมูล)
- Trigger AFTER: ทำงานหลัง INSERT/UPDATE/DELETE (ใช้บันทึก Log)
- ข้อดี: ลดโค้ดซ้ำซ้อน, ประมวลผลในฐานข้อมูล (เร็วกว่าส่งข้อมูลไป-กลับ)
- ข้อเสีย: Debug ยาก, อาจลืมว่ามี Trigger ทำงานอยู่
10. SQL vs NoSQL - เปรียบเทียบฐานข้อมูล
ฐานข้อมูลมี 2 แนวทางหลัก แต่ละแบบเหมาะกับงานต่างกัน
| หัวข้อ | SQL (Relational) | NoSQL (Non-Relational) |
|---|---|---|
| โครงสร้างข้อมูล | ตารางตายตัว (Schema-based) | ยืดหยุ่น (Schema-less) |
| ความสัมพันธ์ | ใช้ JOIN เชื่อมตาราง | ฝังข้อมูล (Embedding) หรือ Reference |
| การ Scale | Vertical Scaling (เพิ่ม CPU/RAM) | Horizontal Scaling (เพิ่มเครื่อง) |
| Consistency | ACID (เชื่อถือได้สูง) | BASE (Eventually Consistent) |
| ภาษา Query | SQL | แตกต่างกันตาม DB (MongoDB ใช้ JSON-like) |
| ตัวอย่าง | MySQL, PostgreSQL, Oracle, SQL Server | MongoDB, Redis, Cassandra, DynamoDB |
| เหมาะกับ | ธุรกรรมการเงิน, ข้อมูลที่ต้องถูกต้อง 100% | Big Data, Real-time Apps, IoT |
- Document DB (MongoDB): เก็บเป็น JSON document ยืดหยุ่นสูง
- Key-Value (Redis): เก็บ key-value pairs เร็วมากใช้ทำ Cache
- Column Family (Cassandra): เก็บเป็น Column families ทน Scale มาก
- Graph DB (Neo4j): เก็บเป็น Node และ Edge เหมาะกับ Social Network
11. Transaction Isolation Levels (ระดับการแยกตัวของธุรกรรม)
ระดับความเข้มงวดในการจัดการข้อมูลที่ใช้ร่วมกัน (Concurrency Control):
| Level | ป้องกันอะไรได้บ้าง | Performance |
|---|---|---|
| Read Uncommitted | ไม่ป้องกันอะไรเลย (อ่านข้อมูลที่ยังไม่ Commit ได้เรียก Dirty Read) | เร็วสุด / เสี่ยงสุด |
| Read Committed | ป้องกัน Dirty Read (ค่า Default ของ DB ส่วนใหญ่) | สมดุล |
| Repeatable Read | ป้องกัน Dirty Read + Non-repeatable Read (อ่านซ้ำได้ค่าเดิมเสมอ) | ช้าลง |
| Serializable | ป้องกันได้ทุกอย่าง (เปรียบเสมือนทำทีละคน) | ช้าที่สุด / ปลอดภัยสุด |
12. Indexing Strategies (กลยุทธ์การทำดัชนี)
Index ช่วยให้เร็วแต่เปลืองที่และทำให้ Insert/Update ช้าลง ต้องเลือกใช้ให้ถูก:
- B-Tree Index: เหมาะกับการเปรียบเทียบ <, >, =, BETWEEN (ใช้บ่อยสุด)
- Hash Index: เหมาะกับการเปรียบเทียบ = เท่านั้น (เร็วมากแต่ Range Search ไม่ได้)
- Composite Index (Compound): Index หลายคอลัมน์รวมกัน (ลำดับสำคัญ! ต้องใช้ตัวซ้ายสุดก่อน)
- Unique Index: บังคับว่าค่าห้ามซ้ำ (ได้ความเร็ว + Constraint)
13. เจาะลึก NoSQL Database Types
| ประเภท | เก็บข้อมูลแบบ | ตัวอย่างยอดนิยม | เหมาะกับงาน |
|---|---|---|---|
| Document | JSON / BSON | MongoDB, CouchDB | Content Management, Catalog สินค้า |
| Key-Value | Key คู่กับ Value | Redis, Memcached | Caching, Session Store (เน้นเร็ว) |
| Column-Family | คอลัมน์ยืดหยุ่น | Cassandra, HBase | Log Data, Time-series, Big Data |
| Graph | Nodes และ Edges | Neo4j, Amazon Neptune | Social Network, Recommendation Engine |
CAP Theorem: ในระบบ Distributed System เลือกได้แค่ 2 ใน 3 อย่าง: Consistency (ข้อมูลตรงกัน), Availability (ระบบไม่ล่ม), Partition Tolerance (เครือข่ายขาดก็ทำงานต่อได้)
14. Stored Procedures & Triggers
การเขียนโปรแกรมฝังไว้ในฐานข้อมูล:
- Stored Procedure: ชุดคำสั่ง SQL ที่บันทึกไว้ เรียกใช้ได้เหมือน Function ช่วยลด Traffic เครือข่าย
- Trigger: ชุดคำสั่งที่จะทำงาน 'อัตโนมัติ' เมื่อมีเหตุการณ์เกิดขึ้น (Insert/Update/Delete) เช่น เก็บ Log อัตโนมัติเมื่อมีการลบข้อมูล
15. Data Warehousing & Business Intelligence (BI)
| คุณสมบัติ | OLTP (Database ปกติ) | OLAP (Data Warehouse) |
|---|---|---|
| วัตถุประสงค์ | บันทึกข้อมูลประจำวัน (Operational) | วิเคราะห์ข้อมูลเพื่อตัดสินใจ (Analytical) |
| ลักษณะข้อมูล | ข้อมูลล่าสุด ละเอียด ยิบย่อย | ข้อมูลย้อนหลัง สรุปผลมาแล้ว |
| การออกแบบ | Normalized (ลดความซ้ำซ้อน) | Denormalized (เน้นอ่านเร็ว Star Schema) |
| ผู้ใช้งาน | พนักงานปฏิบัติการ / ระบบอัตโนมัติ | ผู้บริหาร / นักวิเคราะห์ข้อมูล |
16. Big Data Concepts (3Vs)
คุณลักษณะของ Big Data (3Vs):
- 1. Volume: ปริมาณข้อมูลมหาศาล (ระดับ Terabyte/Petabyte)
- 2. Velocity: มาเร็วและเปลี่ยนแปลงตลอดเวลา (Real-time data)
- 3. Variety: หลากหลายรูปแบบ (Text, Image, Video, Log, Social Media)