ในโลกของการพัฒนาซอฟต์แวร์และฐานข้อมูล ข้อมูลที่ดูสมบูรณ์มักซ่อนข้อสันนิษฐาน (Assumptions) และข้อขัดแย้งทางตรรกะ (Logical Contradictions) เอาไว้ การเขียนโค้ดที่ดีจึงไม่ใช่แค่การทำให้ระบบทำงานได้ แต่คือการตั้งคำถามอย่างต่อเนื่องว่า ‘ทำไมข้อมูลถึงเป็นแบบนี้?’ ‘เงื่อนไขนี้ครอบคลุมทุกกรณีหรือไม่?’
หลักการนี้คือแก่นแท้ของ Socratic Questioning—การใช้คำถามเพื่อกระตุ้นให้ผู้ใช้หรือนักพัฒนาต้องขุดคุ้ยเหตุผลและข้อสันนิษฐานของตนเองจนกระทั่งพบจุดบกพร่องหรือความไม่สอดคล้องกัน (Aporia) ในความคิดหรือโค้ด
💡 Socratic Questioning กับการพัฒนา PostgreSQL
เมื่อนำหลักการนี้มาประยุกต์ใช้กับ PostgreSQL เราไม่ได้ตั้งคำถามกับคน แต่เราตั้งคำถามกับ ข้อมูล (Data) และ ตรรกะ (Logic) ของ Query ของเราเอง การใช้คำสั่ง SQL ขั้นสูงจึงทำหน้าที่เป็น ‘คำถาม’ ที่บังคับให้เราต้องพิจารณาขอบเขตของข้อมูลที่อาจถูกมองข้ามไป
🛠️ การใช้ Query เป็นเครื่องมือตั้งคำถาม
แทนที่จะเขียน Query ที่ตอบคำถามเดียว เราจะเขียน Query ที่ ‘ตั้งคำถาม’ ถึงความสมบูรณ์ของข้อมูล โดยเฉพาะการตรวจสอบความขัดแย้งระหว่างตาราง (Schema) หรือการระบุข้อมูลที่ ‘ควรจะ’ อยู่ที่นี่แต่กลับไม่เป็นไปตามเงื่อนไขที่คาดหวัง
ตัวอย่าง: การตรวจสอบความไม่สอดคล้องของข้อมูล (Data Inconsistency Check)
สมมติว่าเรามีตาราง `orders` และ `customers` และเราต้องการตรวจสอบว่ามีคำสั่งซื้อใดที่ถูกบันทึกโดยลูกค้าที่ถูกระบุว่า ‘ไม่ใช้งาน’ (inactive) หรือไม่ นี่คือการตั้งคำถามเชิงตรรกะว่า: ‘ทำไมคำสั่งซื้อนี้ถึงเกิดขึ้น ถ้าลูกค้าคนนี้ไม่มีสิทธิ์ใช้งานแล้ว?’
SQL
SQL
-- Query นี้ไม่ได้แค่ดึงข้อมูล แต่ตั้งคำถามถึงความถูกต้องของความสัมพันธ์ระหว่างตาราง: </code>
SELECT
o.order_id,
o.order_date,
c.customer_name
FROM
orders o
LEFT JOIN
customers c ON o.customer_id = c.customer_id
WHERE
c.is_active IS NULL OR c.is_active = FALSE;
การวิเคราะห์เชิงตรรกะ (The Socratic Moment):
- คำถามที่ Query ถาม: มีรายการใดที่ `c.is_active` เป็น FALSE หรือ NULL หรือไม่?
- สิ่งที่ Query เผย: หาก Query นี้คืนค่ามา แสดงว่ามีข้อขัดแย้งทางตรรกะ (Logical Contradiction) ระหว่าง `orders` กับ `customers`
- การแก้ไข (การเรียนรู้): นักพัฒนาถูกบังคับให้ต้องกลับไปตั้งคำถามกับกระบวนการทางธุรกิจ (Business Process) ว่า: ‘ทำไมคำสั่งซื้อนี้ถึงถูกสร้างขึ้นถ้าลูกค้าถูกปิดใช้งานแล้ว?’ ซึ่งนำไปสู่การปรับปรุง Business Logic หรือการเพิ่ม Trigger/Constraint ในระดับ Schema
✨ สรุป: การคิดเชิงวิพากษ์ในระดับฐานข้อมูล
การใช้ Socratic Questioning ในการพัฒนา PostgreSQL คือการเปลี่ยนจากการ ‘เขียนโค้ดเพื่อหาคำตอบ’ เป็นการ ‘เขียนโค้ดเพื่อตั้งคำถาม’ มันช่วยให้เราก้าวข้ามการเชื่อมั่นในข้อมูลที่เห็นเพียงผิวเผิน และบังคับให้เราต้องตรวจสอบสมมติฐานทุกอย่าง ตั้งแต่ความสัมพันธ์ของ Foreign Key ไปจนถึงขอบเขตของ NULL และ Edge Cases
การฝึกฝนการคิดเช่นนี้จะยกระดับการพัฒนาให้เป็นระดับ Senior Architect อย่างแท้จริง เพราะเราไม่ได้แค่จัดการข้อมูล แต่เรากำลังจัดการ ‘ความจริง’ ของข้อมูลเหล่านั้น