Learning AtlasIT Support → Cybersecurity
คลังบทอ่าน12.4 / ฐานข้อมูลและเอสคิวแอลบทถัดไป
สารบัญบทอ่าน / Databases and SQL / 12.4
04 · เขียนโค้ดและนำระบบไปใช้ · บท 12.4

Database Implementation

สร้างและดูแลฐานข้อมูล

การสร้างฐานข้อมูลต้องกำหนดโครงสร้าง ข้อบังคับ และสิทธิ์ก่อนให้แอปเขียนข้อมูล

4 หัวข้อคำอธิบายในหน้านี้ภาพอธิบายและกลไกทีละส่วน
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
SQL
ภาษาประมวลข้อมูลในฐานข้อมูล เช่นเลือก กรอง join และเปลี่ยนข้อมูล
จากหลักการไปถึงกลไก

เปลี่ยนข้อมูลอย่างไรให้คงกฎและตรวจย้อนกลับได้

Schema กำหนดโครงสร้างและชนิด Constraint บังคับกฎ เช่น key และความสัมพันธ์ CRUD เป็นการสร้างอ่านแก้ลบ Transaction รวมการเปลี่ยนที่ต้องสำเร็จร่วมกัน ส่วน index เป็นโครงสร้างช่วยหาแถวเร็วขึ้น ทั้งสองแก้ปัญหาคนละอย่าง ไม่ใช่ชื่อฟังก์ชันที่ใช้แทนกัน

ลำดับงาน · อ่านตามลูกศรเปลี่ยนข้อมูลอย่างไรให้คงกฎและตรวจย้อนกลับได้
  1. Validate

    ตรวจข้อมูลและสิทธิ์ก่อนส่งงาน กฎสำคัญต้องบังคับในชั้นที่เชื่อถือได้

  2. Parameterize

    ส่งค่าแยกจากโครงคำสั่ง SQL เพื่อไม่ให้ค่าจากผู้ใช้กลายเป็น syntax

  3. Transaction

    BEGIN ทำหลายงาน ถ้าครบจึง COMMIT หากผิดให้ ROLLBACK ตามข้อกำหนดฐานข้อมูล

  4. Index

    เก็บโครงสร้างค้นหาเพิ่มเติม เหมาะกับบางเงื่อนไข แต่ต้องรักษาเมื่อ INSERT UPDATE DELETE

  5. Recover

    สำรองให้สอดคล้อง ทดสอบคืน และแยกสิทธิ์งานแอปจากงานผู้ดูแล

สองการเปลี่ยน ต้อง commit เป็นชุดเดียว
สถานะABรวม
ก่อนเริ่ม10050150
เปลี่ยน A ภายใน transaction8050130
เพิ่ม B ภายใน transaction8070150
หลัง COMMIT8070150

ยอด A+B คง 150: ผลหลัง commit คือ A=80 B=70

เป็นภาพจำลอง transaction ไม่ได้เชื่อมฐานข้อมูลจริง Isolation และ durability ยังต้องอาศัยฐานข้อมูลและการตั้งที่รองรับ ไม่ดูยอดตรงครั้งเดียวแทนคุณสมบัติทั้งหมด

โอนยอด A ไป B ต้องไม่จบแค่หัก A โดยเพิ่ม B ไม่สำเร็จ Atomicity ช่วยให้ชุดงานสำเร็จทั้งหมดหรือไม่สำเร็จทั้งหมด Isolation จัดผลเมื่อหลาย transaction ทำพร้อมกันตามระดับที่เลือก Index อาจลดจำนวนแถวที่ต้องค้น แต่ไม่รับรองว่าทุก query เร็วขึ้น และไม่แทน backup หรือ authorization

01 / 04

โครงสร้างและข้อบังคับSchema and Constraints · 12.4.1

Schema กำหนดตารางและคอลัมน์ Constraints บังคับกติกา เช่น unique หรือ foreign key

Schema กำหนดตาราง คอลัมน์ ชนิด และความสัมพันธ์ Constraints เช่น NOT NULL, UNIQUE, CHECK และ foreign key ป้องกันข้อมูลที่ผิดกฎ DB แต่ยังต้องตรวจเงื่อนไขธุรกิจในแอป

เทียบหน้าที่เพื่อไม่สับสน
•Schema

รูปแบบข้อมูล

•Constraints

กฎความถูกต้องที่ DB บังคับ

•Migration

การเปลี่ยนโครงสร้างและข้อมูล

หมายเลขทะเบียนเครื่องต้องไม่ซ้ำใช้ UNIQUE และค่าจำนวนต้องไม่ติดลบใช้ CHECK หากเปลี่ยน schema ต้องมี migration และแผนรองรับข้อมูลเก่า ไม่แก้ตารางจริงโดยไม่ตรวจแอปที่พึ่งอยู่

ที่มาของหัวข้อนี้ · คำอธิบายต่อยอด

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เป็นส่วนต่อยอดที่เขียนเพื่อเชื่อมความเข้าใจ ไม่มีชื่อ Video/Reading เฉพาะที่ยืนยันจาก inventory เดิม

02 / 04

เพิ่มอ่านแก้ลบและคำสั่งมีพารามิเตอร์CRUD and Parameterized Queries · 12.4.2

CRUD คือสร้าง อ่าน แก้ ลบ Parameterized query ส่งค่าข้อมูลแยกจากโครงคำสั่ง

CRUD คือ create read update delete ผ่านคำสั่งเช่น INSERT SELECT UPDATE DELETE Parameterized query แยกโครงสร้าง จากค่าที่ผู้ใช้ส่ง เพื่อลด SQL injection ต้องตรวจสิทธิ์และกฎธุรกิจเพิ่มเติม

เทียบหน้าที่เพื่อไม่สับสน
•Operation

สิ่งที่จะทำกับข้อมูล

•Parameter

ค่าแยกจากโครงสร้าง query

•Authorization

สิทธิ์ทำกับรายการนั้น

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 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

03 / 04

ธุรกรรมและดัชนีTransactions and Indexes · 12.4.3

Transaction รวมการเปลี่ยนเป็นหน่วยงาน Index ช่วยค้นเร็วขึ้นแต่มีต้นทุนตอนเขียน

Transaction รวมการเปลี่ยนที่ต้องสำเร็จร่วมกัน COMMIT ยืนยัน ROLLBACK ยกเลิกตามเงื่อนไขของ DB Isolation ควบคุมสิ่งที่งานพร้อมกันเห็น Index เป็นโครงสร้างช่วยค้นหรือเรียงเร็วขึ้นแต่ใช้พื้นที่และเพิ่มต้นทุนเขียน

ไม่ให้ยอดถูกเปลี่ยนเพียงครึ่งงาน
transaction ก่อน ระหว่าง และหลังงานBefore: A=500 B=200Pending: A=400 B=300Commit: A=400 B=300If an error: ROLLBACKCommitted state is kept consistent by the transaction rules

ยอดก่อนรวม 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 และภาระอ่านเขียน

ACID and Index Cost (ความถูกต้องของชุดงานกับต้นทุนค้น)
สิ่งที่ต้องการกลไกที่เกี่ยวสิ่งที่ต้องตรวจ
ชุดงานไม่ค้างครึ่งเดียว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 เดิม

เอกสารหลักที่ใช้ตรวจแนวคิดเพิ่มเติม

04 / 04

สำรองและจัดสิทธิ์Backup and Access Management · 12.4.4

Backup ต้องกู้ได้ Access management จำกัดสิทธิ์ตามงานและตรวจการใช้

Database backup ต้องสอดคล้องกับ engine และความต้องการ point-in-time recovery การคัดไฟล์ฐานข้อมูลที่กำลังเขียนอาจได้ชุดไม่สอดคล้อง Access control จำกัดบัญชีและเครือข่ายที่เข้าถึงข้อมูลและสำเนา

เทียบหน้าที่เพื่อไม่สับสน
•Consistent backup

สำเนาที่คืนได้ตาม engine

•Restricted access

ผู้ใช้และที่เก็บที่เหมาะ

•Restore test

ตรวจข้อมูลและแอปหลังคืน

บัญชี backup อาจอ่านข้อมูลจำนวนมากจึงต้องดูแลเหมือนข้อมูลจริง ทดสอบ restore ในที่แยกและตรวจทั้ง schema data และ key ที่ต้องใช้ อย่าถือว่ามีไฟล์ dump แล้วกู้ระบบครบ

ที่มาของหัวข้อนี้ · 2 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เชื่อมความเข้าใจ

นำศัพท์มาเชื่อมกับงาน

ตัวอย่างให้เห็นภาพ

โอนเงินต้องอัปเดตสองบัญชีให้สอดคล้องกัน จึงต้องพิจารณา transaction ไม่แก้แถวแยกอย่างไม่มีขอบเขต

สิ่งที่บทนี้เชื่อมไว้

การสร้างฐานข้อมูลต้องกำหนดโครงสร้าง ข้อบังคับ และสิทธิ์ก่อนให้แอปเขียนข้อมูล

ใช้ภาพกับตัวอย่างด้านบนเชื่อมหน้าที่ของแต่ละส่วน แล้วตรวจความเข้าใจด้วยการอธิบายเหตุผลของผลที่เห็น ก่อนเปิดบทถัดไป

บันทึกในเบราว์เซอร์นี้
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน

คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้