PlusMagi's Blog By Pitt Phunsanit Database รูปแบบโปรโมชัน (Promotion Type: ลดราคา, แถมสินค้า, ซื้อ 1 แถม 1, ส่งฟรี, แจกคูปอง หรือสะสมแต้ม)

รูปแบบโปรโมชัน (Promotion Type: ลดราคา, แถมสินค้า, ซื้อ 1 แถม 1, ส่งฟรี, แจกคูปอง หรือสะสมแต้ม)

ในโลกของระบบ E-commerce ที่มีการแข่งขันสูง การจัดการโปรโมชัน (Promotion) ไม่ใช่แค่การแสดงส่วนลด แต่คือการบังคับใช้ชุดกฎทางธุรกิจ (Business Rules) ที่ซับซ้อนและต้องมีความแม่นยำสูง การนำ PostgreSQL มาใช้ในการจัดการโปรโมชันจึงเป็นทางเลือกที่เหมาะสม เนื่องจากคุณสมบัติ ACID Compliance และความสามารถในการจัดการ Query ที่ซับซ้อน ทำให้มั่นใจได้ว่าการคำนวณส่วนลดหรือการให้คะแนนสะสมจะเป็นไปอย่างถูกต้องและเชื่อถือได้

หลักการใช้ PostgreSQL ในการคำนวณกลไกโปรโมชัน

แทนที่จะใช้โค้ดที่ซับซ้อนในระดับแอปพลิเคชัน การกำหนดตรรกะโปรโมชันในระดับฐานข้อมูลด้วย SQL โดยเฉพาะการใช้ฟังก์ชัน CASE หรือ JOIN จะช่วยให้ระบบมีความยืดหยุ่นและง่ายต่อการบำรุงรักษา (Maintainability) เราจะมาดูตัวอย่างการจำลองโปรโมชันหลัก ๆ 3 รูปแบบที่ต้องใช้การคำนวณเชิงตรรกะของฐานข้อมูล

1. การลดราคาและคูปองส่วนลด (Discount & Coupon)

การลดราคาหรือการใช้คูปองมักต้องอาศัยการตรวจสอบเงื่อนไข (Condition) ของยอดรวมสินค้า (Total Price) ซึ่งสามารถทำได้ด้วย CASE statement เพื่อกำหนดราคาที่ต้องจ่ายจริง

SQL

SELECT
    product_id, 
    price,
    CASE
        WHEN price >= 1000 THEN price * 0.90 -- ส่วนลด 10% สำหรับราคาสูง
        WHEN price >= 500 THEN price * 0.95 -- ส่วนลด 5% สำหรับราคากลาง
        ELSE price
    END AS final_price
FROM products;

2. ซื้อ 1 แถม 1 (Buy 1 Get 1) และส่งฟรี (Free Shipping)

โปรโมชันแบบกลุ่ม (Bundle) หรือการส่งฟรีตามเงื่อนไขยอดรวม ต้องอาศัยการคำนวณเชิงกลุ่ม (Grouping) หรือการตรวจสอบเงื่อนไขยอดรวม (Aggregate Function) ซึ่งสามารถจำลองได้โดยการ JOIN ตารางรายการสินค้ากับตารางโปรโมชัน

SQL

-- สมมติว่ามีตาราง orders และ products
SELECT
    o.order_id,
    SUM(p.price) AS total_price,
    CASE
        WHEN SUM(p.price) >= 2000 THEN 'Free Shipping Applied'
        ELSE 'Shipping Fee Applied'
    END AS shipping_status
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.product_id
GROUP BY o.order_id;

3. ระบบสะสมแต้ม (Loyalty Points)

การสะสมแต้มคือการบันทึกข้อมูล (Data Logging) ที่ต้องมั่นใจว่าการเพิ่มแต้มนั้นเกิดขึ้นอย่างถูกต้องหลังการทำรายการเสร็จสิ้น เราใช้ INSERT INTO เพื่อบันทึกคะแนนที่ลูกค้าได้รับ

SQL

INSERT INTO loyalty_points (user_id, points_earned, transaction_date)
VALUES (101, 50, CURRENT_DATE);

บทสรุป: ความแข็งแกร่งของ PostgreSQL ในการจัดการโปรโมชัน

การใช้ PostgreSQL ในการจัดการตรรกะโปรโมชันช่วยให้ระบบมีความน่าเชื่อถือสูง เพราะทุกการคำนวณ (ไม่ว่าจะเป็นส่วนลด, การนับคะแนน, หรือการตรวจสอบเงื่อนไข) จะถูกดำเนินการภายใต้ Transaction เดียวกัน ซึ่งรับประกันความสมบูรณ์ของข้อมูล (Data Integrity) การทำความเข้าใจกลไกเหล่านี้และออกแบบ Query ที่เหมาะสม จะช่วยให้ธุรกิจของคุณสามารถสร้างระบบ E-commerce ที่ไม่เพียงแค่ขายของได้ แต่ยังสามารถจัดการกลยุทธ์ทางการตลาดที่ซับซ้อนได้อย่างมีประสิทธิภาพและเป็นระบบ