Database Implementation
สร้างและดูแลฐานข้อมูล
การสร้างฐานข้อมูลต้องกำหนดโครงสร้าง ข้อบังคับ และสิทธิ์ก่อนให้แอปเขียนข้อมูล
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
- SQL
- ภาษาประมวลข้อมูลในฐานข้อมูล เช่นเลือก กรอง join และเปลี่ยนข้อมูล
เปลี่ยนข้อมูลอย่างไรให้คงกฎและตรวจย้อนกลับได้
Schema กำหนดโครงสร้างและชนิด Constraint บังคับกฎ เช่น key และความสัมพันธ์ CRUD เป็นการสร้างอ่านแก้ลบ Transaction รวมการเปลี่ยนที่ต้องสำเร็จร่วมกัน ส่วน index เป็นโครงสร้างช่วยหาแถวเร็วขึ้น ทั้งสองแก้ปัญหาคนละอย่าง ไม่ใช่ชื่อฟังก์ชันที่ใช้แทนกัน
- Validate
ตรวจข้อมูลและสิทธิ์ก่อนส่งงาน กฎสำคัญต้องบังคับในชั้นที่เชื่อถือได้
- Parameterize
ส่งค่าแยกจากโครงคำสั่ง SQL เพื่อไม่ให้ค่าจากผู้ใช้กลายเป็น syntax
- Transaction
BEGIN ทำหลายงาน ถ้าครบจึง COMMIT หากผิดให้ ROLLBACK ตามข้อกำหนดฐานข้อมูล
- Index
เก็บโครงสร้างค้นหาเพิ่มเติม เหมาะกับบางเงื่อนไข แต่ต้องรักษาเมื่อ INSERT UPDATE DELETE
- Recover
สำรองให้สอดคล้อง ทดสอบคืน และแยกสิทธิ์งานแอปจากงานผู้ดูแล
| สถานะ | A | B | รวม |
|---|---|---|---|
| ก่อนเริ่ม | 100 | 50 | 150 |
| เปลี่ยน A ภายใน transaction | 80 | 50 | 130 |
| เพิ่ม B ภายใน transaction | 80 | 70 | 150 |
| หลัง COMMIT | 80 | 70 | 150 |
ยอด A+B คง 150: ผลหลัง commit คือ A=80 B=70
เป็นภาพจำลอง transaction ไม่ได้เชื่อมฐานข้อมูลจริง Isolation และ durability ยังต้องอาศัยฐานข้อมูลและการตั้งที่รองรับ ไม่ดูยอดตรงครั้งเดียวแทนคุณสมบัติทั้งหมด
โอนยอด A ไป B ต้องไม่จบแค่หัก A โดยเพิ่ม B ไม่สำเร็จ Atomicity ช่วยให้ชุดงานสำเร็จทั้งหมดหรือไม่สำเร็จทั้งหมด Isolation จัดผลเมื่อหลาย transaction ทำพร้อมกันตามระดับที่เลือก Index อาจลดจำนวนแถวที่ต้องค้น แต่ไม่รับรองว่าทุก query เร็วขึ้น และไม่แทน backup หรือ authorization
โครงสร้างและข้อบังคับSchema and Constraints · 12.4.1
Schema กำหนดตารางและคอลัมน์ Constraints บังคับกติกา เช่น unique หรือ foreign key
Schema กำหนดตาราง คอลัมน์ ชนิด และความสัมพันธ์ Constraints เช่น NOT NULL, UNIQUE, CHECK และ foreign key ป้องกันข้อมูลที่ผิดกฎ DB แต่ยังต้องตรวจเงื่อนไขธุรกิจในแอป
รูปแบบข้อมูล
กฎความถูกต้องที่ DB บังคับ
การเปลี่ยนโครงสร้างและข้อมูล
หมายเลขทะเบียนเครื่องต้องไม่ซ้ำใช้ UNIQUE และค่าจำนวนต้องไม่ติดลบใช้ CHECK หากเปลี่ยน schema ต้องมี migration และแผนรองรับข้อมูลเก่า ไม่แก้ตารางจริงโดยไม่ตรวจแอปที่พึ่งอยู่
ที่มาของหัวข้อนี้ · คำอธิบายต่อยอด
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
เป็นส่วนต่อยอดที่เขียนเพื่อเชื่อมความเข้าใจ ไม่มีชื่อ Video/Reading เฉพาะที่ยืนยันจาก inventory เดิม
เพิ่มอ่านแก้ลบและคำสั่งมีพารามิเตอร์CRUD and Parameterized Queries · 12.4.2
CRUD คือสร้าง อ่าน แก้ ลบ Parameterized query ส่งค่าข้อมูลแยกจากโครงคำสั่ง
CRUD คือ create read update delete ผ่านคำสั่งเช่น INSERT SELECT UPDATE DELETE Parameterized query แยกโครงสร้าง จากค่าที่ผู้ใช้ส่ง เพื่อลด SQL injection ต้องตรวจสิทธิ์และกฎธุรกิจเพิ่มเติม
สิ่งที่จะทำกับข้อมูล
ค่าแยกจากโครงสร้าง query
สิทธิ์ทำกับรายการนั้น
WHERE username = ? ส่งค่าผ่าน parameter ของ driver แทนต่อ string หากใช้ UPDATE โดยไม่มี WHERE อาจเปลี่ยนทุกแถว ก่อนเปลี่ยนข้อมูลดู scope และ transaction ที่เหมาะ
cursor.execute(
"SELECT id FROM users WHERE email = ?",
(email,)
)ตัวอย่าง Python sqlite3 ใช้ placeholder ? แยกค่ากับ (email,) คือ tuple หนึ่งรายการ Driver ฐานข้อมูลอื่นอาจใช้ placeholder ต่างกัน อย่านำค่ามาต่อใน string query
ที่มาของหัวข้อนี้ · 1 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- Tools of the Trade: Linux and SQL · Module 4: Databases and SQLVideo: Query databases with SQLCY4.M4.V3
ธุรกรรมและดัชนีTransactions and Indexes · 12.4.3
Transaction รวมการเปลี่ยนเป็นหน่วยงาน Index ช่วยค้นเร็วขึ้นแต่มีต้นทุนตอนเขียน
Transaction รวมการเปลี่ยนที่ต้องสำเร็จร่วมกัน COMMIT ยืนยัน ROLLBACK ยกเลิกตามเงื่อนไขของ DB Isolation ควบคุมสิ่งที่งานพร้อมกันเห็น Index เป็นโครงสร้างช่วยค้นหรือเรียงเร็วขึ้นแต่ใช้พื้นที่และเพิ่มต้นทุนเขียน
ยอดก่อนรวม 700 หลังโอน 100 ยังรวม 700 Transaction ให้ยืนยันหรือยกเลิกการเปลี่ยนตาม engine ที่รองรับ ต้องมี business validation และ concurrency control เพื่อไม่ให้สองการโอนที่พร้อมกันอ่านยอดผิด ไม่ใช่เพียงครอบ BEGIN แล้วทุกกฎถูกเอง
โอนเงินต้องลดบัญชีหนึ่งและเพิ่มอีกบัญชีใน transaction เดียว Index บน email ช่วยค้นผู้ใช้ แต่ไม่ทำให้ทุก query เร็ว เช่น pattern ที่ไม่ใช้ index ตามแผนของ engine ตรวจ execution plan กับข้อมูลจริง
ACID and Index Cost (ความถูกต้องของชุดงานกับต้นทุนค้น)
Atomicity ให้ชุดเปลี่ยนสำเร็จทั้งหมดหรือไม่คงผลบางส่วน Consistency เกี่ยวกับกฎความถูกต้องที่ระบบและงานบังคับ Isolation กำหนดการเห็นและผลเมื่อ transaction ทำร่วมกัน Durability เกี่ยวกับผลที่ commit แล้วคงอยู่ภายใต้สัญญาของระบบ ไม่ควรใช้ผลทดสอบครั้งเดียวรับรองคุณสมบัติทั้งหมด
Index เก็บโครงสร้างค้นเพิ่ม เช่นจัด key ให้หาแถวเหมาะกับเงื่อนไขโดยไม่อ่านทุกแถวเสมอ แต่ INSERT UPDATE DELETE ต้องรักษา index และใช้พื้นที่ เพิ่ม index ทุกคอลัมน์จึงไม่ใช่ทางเพิ่มความเร็วทุกงาน ต้องดู query plan ชนิดข้อมูล distribution และภาระอ่านเขียน
| สิ่งที่ต้องการ | กลไกที่เกี่ยว | สิ่งที่ต้องตรวจ |
|---|---|---|
| ชุดงานไม่ค้างครึ่งเดียว | Transaction atomicity | ทาง error และ rollback |
| หลายงานทำร่วมไม่ผิดเจตนา | Isolation + กฎแอป | concurrent behavior ตามระดับ |
| ค้นตามเงื่อนไขเร็วขึ้น | Index + query plan | ผลและต้นทุนเขียน |
| คืนเมื่อข้อมูลเสีย | Backup + restore | ชุดและผลกู้จริง |
BEGIN;
-- ตรวจยอดและกฎธุรกิจก่อนเปลี่ยน
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;ตัวอย่างแสดงขอบเขต transaction ไม่ใช่ระบบโอนเงินพร้อมใช้ งานจริงต้องตรวจยอด จำนวนแถว currency concurrency และ error หากขั้นใดผิดให้ rollback ตามวิธี driver กับ engine ไม่ commit ครึ่งงาน
ที่มาของหัวข้อนี้ · คำอธิบายต่อยอด
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
เป็นส่วนต่อยอดที่เขียนเพื่อเชื่อมความเข้าใจ ไม่มีชื่อ Video/Reading เฉพาะที่ยืนยันจาก inventory เดิม
เอกสารหลักที่ใช้ตรวจแนวคิดเพิ่มเติม
สำรองและจัดสิทธิ์Backup and Access Management · 12.4.4
Backup ต้องกู้ได้ Access management จำกัดสิทธิ์ตามงานและตรวจการใช้
Database backup ต้องสอดคล้องกับ engine และความต้องการ point-in-time recovery การคัดไฟล์ฐานข้อมูลที่กำลังเขียนอาจได้ชุดไม่สอดคล้อง Access control จำกัดบัญชีและเครือข่ายที่เข้าถึงข้อมูลและสำเนา
สำเนาที่คืนได้ตาม engine
ผู้ใช้และที่เก็บที่เหมาะ
ตรวจข้อมูลและแอปหลังคืน
บัญชี backup อาจอ่านข้อมูลจำนวนมากจึงต้องดูแลเหมือนข้อมูลจริง ทดสอบ restore ในที่แยกและตรวจทั้ง schema data และ key ที่ต้องใช้ อย่าถือว่ามีไฟล์ dump แล้วกู้ระบบครบ
ที่มาของหัวข้อนี้ · 2 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- System Administration and IT Infrastructure Services · Module 3: Software and Platform ServicesVideo: What is a database server?IT4.M3.V12
- System Administration and IT Infrastructure Services · Module 3: Software and Platform ServicesReading: Supplemental Reading for Database Admin JobsIT4.M3.R12
นำศัพท์มาเชื่อมกับงาน
โอนเงินต้องอัปเดตสองบัญชีให้สอดคล้องกัน จึงต้องพิจารณา transaction ไม่แก้แถวแยกอย่างไม่มีขอบเขต
สิ่งที่บทนี้เชื่อมไว้
การสร้างฐานข้อมูลต้องกำหนดโครงสร้าง ข้อบังคับ และสิทธิ์ก่อนให้แอปเขียนข้อมูล
ใช้ภาพกับตัวอย่างด้านบนเชื่อมหน้าที่ของแต่ละส่วน แล้วตรวจความเข้าใจด้วยการอธิบายเหตุผลของผลที่เห็น ก่อนเปิดบทถัดไป
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน
คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้