PlusMagi's Blog By Pitt Phunsanit Database SQL: tri state 3 สเต็ป

SQL: tri state 3 สเต็ป

ในโลกของการพัฒนาซอฟต์แวร์สมัยใหม่ การออกแบบ User Interface (UI) มักมีการใช้องค์ประกอบที่เรียกว่า Tri-State Button ซึ่งเป็นปุ่มที่มีสถานะถึง 3 ระดับ (เช่น ไม่ใช้งาน, อยู่ระหว่างการเปลี่ยนสถานะ, และใช้งานอยู่) การจัดการสถานะข้อมูลที่ซับซ้อนเช่นนี้ย่อมส่งผลต่อการออกแบบฐานข้อมูลและการเขียนคำสั่ง SQL อย่างหลีกเลี่ยงไม่ได้

คำถามที่นักพัฒนาหลายคนสงสัยคือ: เราจะเขียนคำสั่ง WHERE ใน SQL อย่างไร เพื่อดึงข้อมูลที่อยู่ในสถานะทั้งสามนี้ออกมาได้อย่างถูกต้อง? คำตอบคือ แม้จะดูซับซ้อน แต่การใช้หลักการของ NULL และ Logical Operator อย่างเหมาะสม จะทำให้งานนี้ง่ายกว่าที่คิด โดยเฉพาะอย่างยิ่งเมื่อเราใช้ PostgreSQL ซึ่งเป็นระบบจัดการฐานข้อมูลที่ทรงพลัง

💡 หลักการจัดการ Tri-State ในฐานข้อมูล PostgreSQL

ในการจำลองสถานะ 3 ระดับ (Tri-State) ลงในคอลัมน์เดียว (เช่น status) เราสามารถกำหนดค่าได้ดังนี้:

  • สถานะซ้าย (Inactive): กำหนดค่าเป็นสตริงเฉพาะ เช่น 'I'
  • สถานะขวา (Active): กำหนดค่าเป็นสตริงเฉพาะ เช่น 'A'
  • สถานะกลาง (Indeterminate/Active): สถานะนี้มักจะไม่มีค่าที่ชัดเจน หรือเป็นสถานะที่รอการกำหนดค่า จึงเหมาะสมที่สุดที่จะใช้ค่า NULL ในทางฐานข้อมูล

ดังนั้น หากเราต้องการดึงข้อมูลทั้งหมดที่อยู่ในสถานะใดสถานะหนึ่งจาก 3 สถานะนี้ เราจะต้องรวมเงื่อนไขการตรวจสอบค่าที่เป็นสตริง ('I' และ 'A') เข้ากับการตรวจสอบค่า NULL โดยใช้ตัวดำเนินการ OR

🛠️ ตัวอย่างการเขียน SQL Query ใน PostgreSQL

สมมติว่าเรามีตารางชื่อ pitt_post ที่มีคอลัมน์ status และเราต้องการดึงแถวข้อมูลทั้งหมดที่อยู่ในสถานะใดสถานะหนึ่ง (ไม่ว่าจะเป็น ‘I’, ‘A’, หรือ NULL) เราจะต้องเขียนคำสั่งดังนี้:

SQL

SELECT * <code>
FROM pitt_post <code>
WHERE status = 'I' <code>
OR status = 'A' <code>
OR status IS NULL;

คำอธิบายโค้ด:

  1. status = 'I': ตรวจสอบแถวที่มีสถานะ Inactive (ซ้าย)
  2. status = 'A': ตรวจสอบแถวที่มีสถานะ Active (ขวา)
  3. status IS NULL: ส่วนนี้คือหัวใจสำคัญของการจัดการ Tri-State เพราะเราต้องตรวจสอบว่าค่า NULL นั้นมีอยู่หรือไม่ ซึ่งไม่สามารถใช้ status = NULL ได้

การใช้ OR เชื่อมเงื่อนไขทั้งสามเข้าด้วยกัน ทำให้ PostgreSQL สามารถกรองข้อมูลที่ตรงตามสถานะใดสถานะหนึ่งได้อย่างสมบูรณ์แบบ

✅ สรุปและแนวคิดเชิงสถาปัตยกรรม

การจัดการ Tri-State ในฐานข้อมูลด้วย PostgreSQL นั้น ไม่ได้เป็นเรื่องของไวยากรณ์ที่ซับซ้อน แต่เป็นเรื่องของการเข้าใจประเภทข้อมูล (Data Type) และการใช้เงื่อนไข NULL อย่างถูกต้อง

ในมุมมองของ Senior Architect การออกแบบนี้แสดงให้เห็นถึงความสำคัญของการเลือกใช้ NULL เพื่อแทนสถานะที่ ‘ไม่ทราบค่า’ หรือ ‘อยู่ระหว่างการดำเนินการ’ ซึ่งเป็น Best Practice ที่ทำให้โค้ดมีความชัดเจนและยืดหยุ่นต่อการเปลี่ยนแปลงในอนาคต การใช้ OR ในการรวมเงื่อนไขจึงเป็นทางออกที่ตรงประเด็นและมีประสิทธิภาพสูงสุดในการ Query ข้อมูล 3 สถานะนี้

Exit mobile version