PlusMagi's Blog By Pitt Phunsanit Backend,Database TypeScript: สแตติกเมมเบอร์

TypeScript: สแตติกเมมเบอร์

ในฐานะสถาปนิกระบบ (System Architect) การออกแบบฐานข้อมูลที่แข็งแกร่งไม่ได้หมายถึงเพียงแค่การสร้างตาราง (Schema) ที่ถูกต้องเท่านั้น แต่ยังรวมถึงการจัดการกับตรรกะ (Business Logic) ที่ต้องถูกเรียกใช้ซ้ำ ๆ และเป็นสากล (Global) ด้วย ในโลกของการพัฒนาซอฟต์แวร์ การทำความเข้าใจแนวคิดของ ‘Static Members’ ใน OOP นั้นเทียบได้กับการสร้างฟังก์ชันหรือกระบวนการที่ทำงานโดยไม่ผูกติดกับข้อมูลของแถว (Row) หรืออินสแทนซ์ (Instance) ใด ๆ โดยเฉพาะ

PostgreSQL Global Logic: ฟังก์ชันและ Procedures คืออะไร?

ในบริบทของ PostgreSQL, องค์ประกอบที่ทำหน้าที่คล้ายกับ Static Members คือ Functions และ Stored Procedures พวกมันคือชุดคำสั่ง SQL ที่ถูกนิยามและจัดเก็บไว้ในฐานข้อมูลโดยตรง ทำให้เราสามารถเรียกใช้ตรรกะทางธุรกิจที่ซับซ้อนได้จากหลายจุดในระบบ ไม่ว่าจะเป็นการเรียกใช้จากแอปพลิเคชันภายนอก หรือการเรียกใช้จากคำสั่ง SQL อื่น ๆ ภายในฐานข้อมูลเอง

ความแตกต่างระหว่าง Instance Logic และ Global Logic

หัวใจสำคัญของการทำความเข้าใจคือขอบเขต (Scope) ของการทำงาน:

  • Instance Logic (Data-Specific): คือการดึงหรือแก้ไขข้อมูลที่เกี่ยวข้องกับแถว (Row) หรือเอนทิตี (Entity) ที่ระบุเจาะจง เช่น การอัปเดตอายุของ User คนใดคนหนึ่ง หรือการดึงยอดรวมคำสั่งซื้อของ Order ID ที่กำหนด นี่คือการทำงานที่ผูกติดกับข้อมูลเฉพาะ (Instance-bound)
  • Global Logic (Static/Utility): คือตรรกะที่ทำงานโดยไม่สนใจว่าข้อมูลที่กำลังถูกประมวลผลคืออะไร แต่สนใจแค่ ‘วิธีการ’ ประมวลผล เช่น ฟังก์ชันคำนวณภาษีมูลค่าเพิ่ม (VAT) ที่ใช้ได้กับทุกผลิตภัณฑ์, หรือฟังก์ชันจัดรูปแบบวันที่ (Date Formatting) ที่ใช้ได้กับทุกตาราง นี่คือสิ่งที่เทียบเท่ากับ Static Methods

ตัวอย่างการใช้งาน Global Function ใน PostgreSQL

สมมติว่าเรามีตรรกะทางธุรกิจที่ต้องการคำนวณราคาหลังหักส่วนลด 10% เสมอ ไม่ว่าสินค้าจะมาจากตารางใดก็ตาม เราควรสร้างเป็น Function เพื่อให้เกิดความสม่ำเสมอ (Consistency) และนำกลับมาใช้ใหม่ได้ (Reusability) เสมอ

SQL

-- 1. สร้าง Function สำหรับคำนวณส่วนลด (Global Logic) --
CREATE OR REPLACE FUNCTION calculate_discounted_price(original_price NUMERIC, discount_rate NUMERIC) --
RETURNS NUMERIC AS $$
BEGIN
    RETURN original_price * (1 - discount_rate);
END;$$ LANGUAGE plpgsql;

-- 2. การเรียกใช้ Function นี้จาก Query ใดก็ได้ (ไม่ผูกติดกับตารางใดตารางหนึ่ง) --
SELECT 
    product_name, 
    price, 
    calculate_discounted_price(price, 0.10) AS discounted_price
FROM 
    products
WHERE 
    product_id = 1;

จากตัวอย่างข้างต้น calculate_discounted_price คือ Global Logic ที่สามารถถูกเรียกใช้จาก Query ใดก็ได้ ทำให้โค้ดของเรามีความสะอาด (Clean) และง่ายต่อการบำรุงรักษา (Maintainable) อย่างยิ่ง

บทสรุป: การออกแบบเชิงสถาปัตยกรรม

การใช้ Functions และ Procedures ใน PostgreSQL อย่างถูกหลักการ ไม่ใช่แค่การเขียนโค้ด แต่คือการออกแบบสถาปัตยกรรมที่ทำให้ตรรกะทางธุรกิจถูกแยกออกจากชั้นการเข้าถึงข้อมูล (Data Access Layer) อย่างชัดเจน การทำเช่นนี้ช่วยให้ระบบของเรามีความยืดหยุ่น (Flexible) และสามารถขยายตัว (Scalable) ได้อย่างมีประสิทธิภาพสูงสุด ทำให้มั่นใจได้ว่าทุกส่วนของระบบจะใช้กฎเกณฑ์เดียวกันเสมอ

Exit mobile version