ในโลกของการพัฒนาระบบที่ขับเคลื่อนด้วยข้อมูล (Data-Driven System) ความมั่นคงและความถูกต้องของโครงสร้างฐานข้อมูล (Schema) คือรากฐานที่สำคัญที่สุด การออกแบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database) ที่ดีต้องอาศัยการกำหนดตัวระบุ (Keys) อย่างแม่นยำ เพื่อป้องกันปัญหาความไม่สอดคล้องของข้อมูล (Data Inconsistency) และรักษาความสมบูรณ์ของข้อมูล (Data Integrity) บทความนี้จะเจาะลึกวิธีการกำหนด Primary Key (PK), Foreign Key (FK), และ Compound Keys โดยใช้ไวยากรณ์เฉพาะของ PostgreSQL
หลักการของ Keys ในฐานข้อมูลเชิงสัมพันธ์
หัวใจของการออกแบบฐานข้อมูลคือการสร้างความสัมพันธ์ที่เชื่อถือได้ระหว่างตารางต่างๆ องค์ประกอบหลักที่เราต้องทำความเข้าใจมีดังนี้:
1. Primary Key (PK)
PK คือคอลัมน์หรือชุดของคอลัมน์ที่รับประกันว่าข้อมูลในแถวนั้นๆ จะไม่ซ้ำกันและไม่เป็นค่าว่าง (NOT NULL) ใน PostgreSQL เราใช้คำสั่ง PRIMARY KEY เพื่อกำหนดให้คอลัมน์นั้นเป็นตัวระบุหลักของตาราง
2. Foreign Key (FK)
FK ทำหน้าที่เป็นตัวเชื่อมโยง (Link) โดยการอ้างอิงถึง Primary Key ของตารางอื่น (Parent Table) การใช้ FK ช่วยให้ระบบสามารถตรวจสอบได้ว่าข้อมูลที่ถูกป้อนในตารางลูก (Child Table) นั้น มีอยู่จริงในตารางแม่หรือไม่ ซึ่งเป็นหัวใจของการรักษา Referential Integrity
3. Compound Key
Compound Key คือการกำหนด Primary Key โดยใช้คอลัมน์ตั้งแต่สองคอลัมน์ขึ้นไปร่วมกัน เพื่อให้ชุดค่าของคอลัมน์เหล่านั้นมีความเป็นเอกลักษณ์ (Unique) ตัวอย่างเช่น การระบุว่า ‘รหัสสินค้า’ และ ‘รหัสสาขา’ รวมกันแล้วต้องไม่ซ้ำกัน
การกำหนด Schema ด้วย PostgreSQL Syntax
เราจะสาธิตการสร้างตารางที่เกี่ยวข้องกับข้อมูลการสั่งซื้อ โดยใช้ PostgreSQL เพื่อให้เห็นภาพการทำงานของ PK, FK, และ Compound Key อย่างชัดเจน
ตัวอย่างโค้ด: การสร้างตารางแม่และตารางลูก
สมมติว่าเรามีตาราง departments (ตารางแม่) และ employees (ตารางลูก)
SQL
-- 1. สร้างตารางแม่ (Departments) พร้อม Primary Key
CREATE TABLE departments (
dept_id SERIAL PRIMARY KEY, -- PK: ตัวระบุหลัก
dept_name VARCHAR(100) NOT NULL
);
-- 2. สร้างตารางลูก (Employees) พร้อม Foreign Key
CREATE TABLE employees (
emp_id SERIAL PRIMARY KEY, -- PK ของตารางนี้
emp_name VARCHAR(100) NOT NULL,
dept_id INT, -- คอลัมน์ที่ใช้เป็น FK
-- การกำหนด FK: เชื่อมโยง dept_id กับ departments.dept_id
CONSTRAINT fk_department
FOREIGN KEY (dept_id)
REFERENCES departments (dept_id)
ON DELETE CASCADE
);
-- 3. ตัวอย่าง Compound Key (สมมติเป็นตาราง enrollment)
CREATE TABLE enrollment (
student_id INT NOT NULL,
course_id INT NOT NULL,
enrollment_date DATE,
-- กำหนดให้ชุด (student_id, course_id) ต้องไม่ซ้ำกัน
PRIMARY KEY (student_id, course_id)
);
สรุปและแนวทางปฏิบัติที่ดีที่สุด
การกำหนด Keys ที่ถูกต้องไม่ได้เป็นเพียงแค่การเขียนโค้ด SQL แต่คือการออกแบบความมั่นคงของข้อมูลทั้งหมด การทำความเข้าใจว่าเมื่อใดควรใช้ PK, เมื่อใดควรใช้ FK, และเมื่อใดที่ต้องใช้ Compound Key จะช่วยให้ระบบของคุณมีโครงสร้างที่แข็งแกร่ง สามารถรองรับการขยายตัวของข้อมูล และที่สำคัญที่สุดคือการรับประกันว่าข้อมูลที่ถูกประมวลผลนั้นมีความน่าเชื่อถือสูง (High Data Integrity) เสมอ