วัน: 2 มีนาคม 2005

Oracle 10g Sequence & Deployment: การจัดการ Auto Increment, Sequence และ Script Order บน OracleOracle 10g Sequence & Deployment: การจัดการ Auto Increment, Sequence และ Script Order บน Oracle

ในโลกของการพัฒนาระบบฐานข้อมูล การรับประกันความสมบูรณ์และความเป็นเอกลักษณ์ของข้อมูลหลัก (Primary Key) ถือเป็นเสาหลักที่ขาดไม่ได้ ไม่ว่าระบบจะมีการขยายตัวหรือถูกย้ายไปยังสภาพแวดล้อมใหม่ ความท้าทายในการสร้างลำดับหมายเลขที่ไม่ซ้ำกันอย่างต่อเนื่องและเชื่อถือได้จึงเป็นสิ่งที่สถาปนิกฐานข้อมูลต้องให้ความสำคัญสูงสุด การจัดการอัตโนมัติของค่า ID เหล่านี้ หากผิดพลาดเพียงเล็กน้อย อาจส่งผลกระทบต่อความสมบูรณ์ของข้อมูลในระดับองค์กร


หลักการจัดการ Auto Increment ใน PostgreSQL

สำหรับ PostgreSQL ซึ่งเป็นระบบฐานข้อมูลที่ทันสมัย การจัดการค่า Auto Increment นั้นถูกออกแบบมาให้มีประสิทธิภาพและเชื่อถือได้กว่าการจัดการแบบ Manual ในระบบเก่าๆ เราไม่ได้พึ่งพาเพียงแค่การสร้าง `CREATE SEQUENCE` อย่างเดียว แต่เราใช้ฟีเจอร์ที่เรียกว่า SERIAL หรือ GENERATED AS IDENTITY ซึ่งเป็นวิธีที่แนะนำและเป็นมาตรฐานของ PostgreSQL

SERIAL เป็นวิธีที่ง่ายที่สุดในการสร้างคอลัมน์ Primary Key ที่เพิ่มค่าอัตโนมัติให้โดยอัตโนมัติ แต่ในระดับ Senior Architect เราควรใช้ GENERATED ALWAYS AS IDENTITY เพราะมันช่วยให้เราสามารถควบคุมพฤติกรรมของ Sequence ได้อย่างชัดเจน และป้องกันไม่ให้ผู้ใช้แทรกค่า ID ที่ขัดแย้งกับลำดับที่กำหนดไว้

การจัดการ Sequence และ Script Order ที่ถูกต้อง

ประเด็นที่ซับซ้อนยิ่งกว่าคือเรื่องของ Script Order ในกระบวนการ Deployment เมื่อเราต้องรันสคริปต์จำนวนมากเพื่อติดตั้งฟีเจอร์ใหม่ การกำหนดลำดับการสร้างอ็อบเจกต์ (Object Dependency) เป็นสิ่งสำคัญสูงสุด ลำดับที่ถูกต้องคือ: 1. สร้าง Sequence หรือคอลัมน์ Identity ก่อน 2. สร้างตารางที่ผูกกับคอลัมน์นั้น 3. รันสคริปต์ที่ใช้ค่า ID นั้นๆ

หากเราพยายามเรียกใช้ค่า ID หรือสร้าง Foreign Key ที่อ้างอิงถึง Sequence ก่อนที่ Sequence นั้นจะถูกสร้างขึ้น หรือหากสคริปต์เกิดความผิดพลาดระหว่างทาง การทำธุรกรรม (Transaction) ทั้งหมดจะล้มเหลว ทำให้ระบบไม่สามารถกู้คืนสถานะของตัวนับหมายเลขได้

ตัวอย่าง PostgreSQL Syntax ที่แนะนำ

นี่คือตัวอย่างการสร้างตารางที่ใช้ Identity Column อย่างถูกต้องตามหลักการที่ดีที่สุด:

SQL

-- 1. สร้างตารางโดยใช้ Identity Column (วิธีที่แนะนำที่สุด) -- 2. ตารางจะจัดการ Sequence ให้โดยอัตโนมัติ CREATE TABLE products ( product_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, product_name VARCHAR(100) NOT NULL, price NUMERIC ); -- 3. การแทรกข้อมูล (INSERT) ไม่ต้องระบุ ID เลย SELECT * FROM products; -- 4. หากต้องการดู Sequence ที่ถูกสร้างขึ้นมาจริงๆ (สำหรับตรวจสอบ) SELECT last_value FROM product_id_seq;

บทสรุป: ความน่าเชื่อถือของ PostgreSQL

การใช้ฟีเจอร์ GENERATED ALWAYS AS IDENTITY ใน PostgreSQL ไม่เพียงแต่ช่วยให้เราสร้าง Primary Key ที่เชื่อถือได้เท่านั้น แต่ยังช่วยให้เราสามารถจัดการความสัมพันธ์ของข้อมูล (Referential Integrity) และควบคุมลำดับการทำงานของสคริปต์ได้อย่างแม่นยำ การเข้าใจถึงความสัมพันธ์ของ Object Dependency และการรันสคริปต์ภายใต้ Transactional Block ที่เหมาะสม คือกุญแจสำคัญในการรักษาความสมบูรณ์ของข้อมูลในระดับ Enterprise Architecture