PlusMagi's Blog By Pitt Phunsanit Database Challenging Assumptions (การตั้งคำถามและตั้งข้อสงสัยต่อความเชื่อเดิมๆ)

Challenging Assumptions (การตั้งคำถามและตั้งข้อสงสัยต่อความเชื่อเดิมๆ)

ในโลกของการพัฒนาซอฟต์แวร์และระบบฐานข้อมูล ข้อมูล (Data) คือสินทรัพย์ที่มีค่าที่สุด แต่เรามักจะทำงานภายใต้ ‘สมมติฐาน’ (Assumptions) เสมอ ไม่ว่าจะเป็นสมมติฐานว่าข้อมูลที่เข้ามานั้นถูกต้อง, สมมติฐานว่าความสัมพันธ์ระหว่างตารางนั้นสมบูรณ์, หรือสมมติฐานว่า Query ที่เราเขียนขึ้นจะให้ผลลัพธ์ที่สมบูรณ์

การตั้งคำถามและตั้งข้อสงสัยต่อสมมติฐานเหล่านี้ ไม่ได้หมายถึงการปฏิเสธข้อมูล แต่คือกระบวนการทางสถาปัตยกรรมที่เรียกว่า Data Validation หรือ Data Integrity Check ซึ่งเป็นหัวใจสำคัญของการเป็น Senior Architect ที่ต้องมั่นใจว่าระบบทำงานบนรากฐานที่แข็งแกร่งและเชื่อถือได้

การตั้งคำถามต่อข้อมูล: แนวคิดเชิงสถาปัตยกรรม

เมื่อเราพูดถึงการ ‘Challenging Assumptions’ ในบริบทของ PostgreSQL เรากำลังพูดถึงการเขียน Query ที่ไม่เพียงแต่ดึงข้อมูลออกมาเท่านั้น แต่ยังต้องตรวจสอบความถูกต้องของข้อมูลเหล่านั้นด้วย เราต้องแยกแยะระหว่าง ข้อเท็จจริง (Fact) ที่ถูกบันทึกไว้ กับ ความสมบูรณ์ของข้อเท็จจริง (Data Integrity) ที่เราคาดหวังให้เป็นไปตามกฎทางธุรกิจ (Business Rules) เสมอ

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

PostgreSQL: เครื่องมือในการตรวจสอบสมมติฐาน

PostgreSQL มีคุณสมบัติขั้นสูงที่ช่วยให้เราสามารถ ‘ตั้งคำถาม’ ต่อข้อมูลได้ก่อนที่จะนำไปใช้งานจริง เทคนิคที่ทรงพลังที่สุดคือการใช้ Common Table Expressions (CTEs) ร่วมกับ CASE Statements เพื่อจำลองกระบวนการตรวจสอบความถูกต้องของข้อมูลเป็นขั้นตอน

ในตัวอย่างนี้ เราจะสมมติว่าเรามีตาราง orders และต้องการตรวจสอบว่ารายการสั่งซื้อใดที่อาจมีสถานะที่ไม่สมบูรณ์ หรือมีราคาสินค้าที่ผิดปกติ (เช่น ราคาเป็นค่าลบ) โดยการใช้ CTE เพื่อจำกัดขอบเขตการตรวจสอบ:

SQL

WITH raw_orders AS ( -- ขั้นตอนที่ 1: ดึงข้อมูลดิบ (Raw Data) ที่เราต้องตั้งคำถามถึง -- SELECT order_id, product_id, quantity, price FROM orders WHERE order_date > '2023-01-01' ) SELECT order_id, product_id, quantity, price, CASE WHEN price < 0 THEN 'INVALID_PRICE' WHEN quantity <= 0 THEN 'INVALID_QTY' ELSE 'OK' END AS validation_status FROM raw_orders WHERE validation_status != 'OK';

การวิเคราะห์โค้ด:
raw_orders ทำหน้าที่เป็นพื้นที่จำลองของ ‘สมมติฐาน’ ข้อมูลที่เข้ามา จากนั้นเราใช้ CASE statement เพื่อ ‘ตั้งคำถาม’ กับแต่ละคอลัมน์ (price และ quantity) ว่ามันเป็นไปตามกฎทางธุรกิจหรือไม่ หากสถานะไม่ใช่ ‘OK’ หมายความว่าสมมติฐานของเราถูกท้าทาย และจำเป็นต้องมีการแก้ไขหรือแจ้งเตือน

บทสรุป: ความสำคัญของ Critical Querying

การเขียน Query ที่ดีไม่ได้เป็นเพียงการดึงข้อมูล แต่คือการแสดงออกถึง Critical Thinking ในระดับระบบ เมื่อเราสามารถออกแบบ Query ที่สามารถตรวจสอบความสมบูรณ์ของข้อมูลและท้าทายสมมติฐานที่อาจผิดพลาดได้ เราก็ยกระดับระบบของเราให้มีความทนทาน (Resilience) และความน่าเชื่อถือ (Reliability) ในระดับ Senior Architect อย่างแท้จริง

Exit mobile version