PlusMagi's Blog By Pitt Phunsanit Database PHP: DNF (Disjunctive Normal Form) Types

PHP: DNF (Disjunctive Normal Form) Types

ในฐานะ System Architect การจัดการกับเงื่อนไขทางธุรกิจที่ซับซ้อน (Complex Business Logic) เป็นหัวใจสำคัญของการออกแบบฐานข้อมูล และในเชิงตรรกศาสตร์ (Logic) นั้น DNF ย่อมาจาก Disjunctive Normal Form ซึ่งเป็นรูปแบบมาตรฐานในการแทนฟังก์ชันทางตรรกะ (Boolean Function) โดยการเขียนให้อยู่ในรูปผลรวมของผลคูณ (Sum of Products: SOP)

เมื่อเรานำแนวคิดนี้มาประยุกต์ใช้กับระบบฐานข้อมูลอย่าง PostgreSQL เราจะใช้ DNF เพื่อสร้างเงื่อนไขการกรองข้อมูล (Filtering) ที่มีความยืดหยุ่นสูง โดยการรวมเงื่อนไขย่อยๆ เข้าด้วยกันอย่างเป็นระบบ ทำให้ Query ของเราสามารถระบุชุดข้อมูลที่ตรงตามเกณฑ์ที่หลากหลายได้อย่างแม่นยำ


หลักการทำงานของ DNF ในบริบท PostgreSQL

การทำงานของ DNF ใน SQL คือการสร้างเงื่อนไขที่ต้องเป็นจริงอย่างน้อยหนึ่งชุดจากหลายชุด โดยมีองค์ประกอบหลัก 2 ส่วน:

  • Product Term (ผลคูณ): คือชุดของเงื่อนไขย่อยที่ต้องเป็นจริง ทั้งหมด พร้อมกัน (เทียบเท่ากับการใช้ตัวดำเนินการ AND) เช่น ต้องการหาผู้ใช้ที่ (status = 'active' AND region = 'APAC')
  • Sum of Products (ผลรวมของผลคูณ): คือการนำ Product Terms หลายๆ ชุดมาเชื่อมกันด้วย OR (เทียบเท่ากับการใช้ตัวดำเนินการ OR) หมายความว่า ข้อมูลแถว (Row) นั้นจะต้องเข้าเกณฑ์ชุดที่ 1 หรือ เข้าเกณฑ์ชุดที่ 2 ก็พอ

ตัวอย่างการใช้งาน DNF ใน PostgreSQL Query

สมมติว่าเรามีตาราง products และต้องการค้นหาสินค้าที่เข้าเงื่อนไขใดเงื่อนไขหนึ่งต่อไปนี้: (1) เป็นสินค้าประเภท ‘electronics’ และมีราคาน้อยกว่า 500 บาท หรือ (2) เป็นสินค้าประเภท ‘books’ และมีสต็อกมากกว่า 100 ชิ้น

SQL

SELECT * FROM products WHERE (product_type = 'electronics' AND price < 500) OR (product_type = 'books' AND stock_quantity > 100);

คำอธิบายทางสถาปัตยกรรม: ในโค้ดข้างต้น ส่วนที่อยู่ในวงเล็บ (…) คือ Product Terms (เงื่อนไขที่ต้องเป็นจริงทั้งหมดภายในวงเล็บ) และการใช้ OR ระหว่างวงเล็บทั้งสองคือ Sum of Products ทำให้ PostgreSQL สามารถประมวลผลเงื่อนไขที่ซับซ้อนนี้ได้อย่างมีประสิทธิภาพ

บทสรุป: ประโยชน์ของ DNF ในการออกแบบระบบ

การทำความเข้าใจและประยุกต์ใช้ DNF ในการเขียน SQL ไม่เพียงแต่ช่วยให้ Query ของเรามีความถูกต้องทางตรรกะเท่านั้น แต่ยังช่วยให้โค้ดมีความเป็นระเบียบ (Readability) และสามารถบำรุงรักษาได้ง่ายขึ้นในระดับ Senior Architect การใช้ DNF อย่างถูกต้องจะช่วยให้เราสามารถจัดการกับ Business Rules ที่ซับซ้อนที่สุด โดยยังคงรักษาประสิทธิภาพและความเร็วในการดึงข้อมูลจาก PostgreSQL ได้อย่างเต็มที่

Exit mobile version