PlusMagi's Blog By Pitt Phunsanit Database ตกลงขอบเขต พารามิเตอร์ หรือกฎกติการ่วมกันให้ชัดเจนตั้งแต่แรก (Clear Expectations & Boundaries)

ตกลงขอบเขต พารามิเตอร์ หรือกฎกติการ่วมกันให้ชัดเจนตั้งแต่แรก (Clear Expectations & Boundaries)

SQL

-- ตัวอย่างการสร้างตารางที่มีขอบเขตที่ชัดเจน
CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price NUMERIC(10, 2) NOT NULL,
    stock_count INTEGER DEFAULT 0,
    -- กำหนดขอบเขตด้วย CHECK Constraint: ราคาต้องไม่ติดลบ
    CONSTRAINT check_price CHECK (price >= 0),
    -- กำหนดขอบเขตด้วย Foreign Key: ต้องอ้างอิงถึง category ที่มีอยู่จริง
    category_id INTEGER REFERENCES categories(category_id)
);

2. การกำหนดพารามิเตอร์ (Parameters) ใน Functions

“>

เมื่อเราสร้าง Stored Function หรือ Procedure เราต้องกำหนดพารามิเตอร์ที่ชัดเจน (Typed Parameters) เพื่อให้แน่ใจว่าฟังก์ชันจะได้รับอินพุตที่ถูกต้องตามประเภทข้อมูลที่คาดหวัง

SQL

-- ตัวอย่างฟังก์ชันที่รับพารามิเตอร์ 2 ตัว (ชื่อสินค้า และ จำนวน) 
CREATE OR REPLACE FUNCTION update_stock(
    p_product_name VARCHAR, 
    p_quantity INTEGER
) RETURNS BOOLEAN AS $$
BEGIN
    UPDATE products SET stock_count = stock_count + p_quantity
    WHERE product_name = p_product_name;
    RETURN FOUND;
END;$$
LANGUAGE plpgsql;
“>

การกำหนดพารามิเตอร์เช่นนี้ทำให้ระบบทราบทันทีว่าฟังก์ชันนี้ต้องการอะไร และจะไม่ยอมให้มีการเรียกใช้ด้วยข้อมูลที่ผิดประเภทหรือขาดหายไป

บทสรุป: การป้องกันที่ดีที่สุดคือการป้องกันตั้งแต่ต้น

“>

การกำหนดขอบเขต (Boundaries) และพารามิเตอร์ (Parameters) ใน PostgreSQL ไม่ใช่แค่การเพิ่มโค้ด แต่คือการยกระดับสถาปัตยกรรมให้มีความทนทาน (Resilient) และเชื่อถือได้ (Reliable) เสมอ การใช้ Constraints, CHECK, และการกำหนด Type ของ Function Arguments คือการสร้างเกราะป้องกันข้อมูลที่แข็งแกร่งที่สุด ทำให้ระบบของคุณสามารถทำงานได้อย่างถูกต้องแม้ในสถานการณ์ที่ผู้ใช้งานป้อนข้อมูลที่ไม่สมบูรณ์หรือผิดพลาด

“>

ในฐานะ System Architect การออกแบบระบบฐานข้อมูลที่แข็งแกร่งไม่ได้วัดกันที่ความสามารถในการเก็บข้อมูลจำนวนมหาศาลเท่านั้น แต่ยังวัดกันที่ความสามารถในการรักษาความสมบูรณ์ของข้อมูล (Data Integrity) ด้วย การทำงานที่อาศัยเพียงแค่ “ความคาดหวัง” ว่าข้อมูลจะถูกป้อนเข้ามาอย่างถูกต้องโดยผู้ใช้งานหรือระบบอื่น คือสูตรสำเร็จของข้อผิดพลาดร้ายแรง (Data Corruption) เสมอ

ขอบเขต (Boundaries) คือกรอบความปลอดภัยเชิงตรรกะ

“>

ในมุมมองของ PostgreSQL การกำหนดขอบเขตและพารามิเตอร์ที่ชัดเจนตั้งแต่เริ่มต้น คือการสร้าง “สัญญาทางตรรกะ” ระหว่างส่วนประกอบต่างๆ ของระบบ (Components) ขอบเขตเหล่านี้จะบังคับให้ข้อมูลต้องอยู่ในรูปแบบที่กำหนด (Data Types), ต้องมีค่าที่จำเป็น (Constraints), และการเรียกใช้ฟังก์ชันต้องส่งค่าที่ถูกต้องตามที่คาดหวัง (Parameters) การทำเช่นนี้ช่วยลดภาระในการตีความ (Cognitive Load) ของระบบและทำให้การบำรุงรักษาในระยะยาวง่ายขึ้นอย่างมาก

การบังคับใช้ขอบเขตใน PostgreSQL

“>

PostgreSQL มีคุณสมบัติระดับสูงที่ช่วยให้เราสามารถกำหนดขอบเขตเหล่านี้ได้อย่างเข้มงวด โดยเฉพาะการใช้ Constraints และการออกแบบ Functions ที่รับพารามิเตอร์ที่ชัดเจน

1. การกำหนดขอบเขตข้อมูล (Constraints)

“>

Constraints คือหัวใจของการกำหนดขอบเขตข้อมูล เราใช้มันเพื่อรับประกันว่าข้อมูลที่ถูกบันทึกจะไม่ขัดแย้งกับกฎที่ตั้งไว้ เช่น การห้ามค่าว่าง (NOT NULL), การรับประกันความไม่ซ้ำกัน (UNIQUE), หรือการกำหนดความสัมพันธ์ระหว่างตาราง (FOREIGN KEY)

SQL

-- ตัวอย่างการสร้างตารางที่มีขอบเขตที่ชัดเจน
CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price NUMERIC(10, 2) NOT NULL,
    stock_count INTEGER DEFAULT 0,
    -- กำหนดขอบเขตด้วย CHECK Constraint: ราคาต้องไม่ติดลบ
    CONSTRAINT check_price CHECK (price >= 0),
    -- กำหนดขอบเขตด้วย Foreign Key: ต้องอ้างอิงถึง category ที่มีอยู่จริง
    category_id INTEGER REFERENCES categories(category_id)
);

2. การกำหนดพารามิเตอร์ (Parameters) ใน Functions

“>

เมื่อเราสร้าง Stored Function หรือ Procedure เราต้องกำหนดพารามิเตอร์ที่ชัดเจน (Typed Parameters) เพื่อให้แน่ใจว่าฟังก์ชันจะได้รับอินพุตที่ถูกต้องตามประเภทข้อมูลที่คาดหวัง

SQL

-- ตัวอย่างฟังก์ชันที่รับพารามิเตอร์ 2 ตัว (ชื่อสินค้า และ จำนวน) 
CREATE OR REPLACE FUNCTION update_stock(
    p_product_name VARCHAR, 
    p_quantity INTEGER
) RETURNS BOOLEAN AS $$
BEGIN
    UPDATE products SET stock_count = stock_count + p_quantity
    WHERE product_name = p_product_name;
    RETURN FOUND;
END;$$
LANGUAGE plpgsql;
“>

การกำหนดพารามิเตอร์เช่นนี้ทำให้ระบบทราบทันทีว่าฟังก์ชันนี้ต้องการอะไร และจะไม่ยอมให้มีการเรียกใช้ด้วยข้อมูลที่ผิดประเภทหรือขาดหายไป

บทสรุป: การป้องกันที่ดีที่สุดคือการป้องกันตั้งแต่ต้น

“>

การกำหนดขอบเขต (Boundaries) และพารามิเตอร์ (Parameters) ใน PostgreSQL ไม่ใช่แค่การเพิ่มโค้ด แต่คือการยกระดับสถาปัตยกรรมให้มีความทนทาน (Resilient) และเชื่อถือได้ (Reliable) เสมอ การใช้ Constraints, CHECK, และการกำหนด Type ของ Function Arguments คือการสร้างเกราะป้องกันข้อมูลที่แข็งแกร่งที่สุด ทำให้ระบบของคุณสามารถทำงานได้อย่างถูกต้องแม้ในสถานการณ์ที่ผู้ใช้งานป้อนข้อมูลที่ไม่สมบูรณ์หรือผิดพลาด

Exit mobile version