ในการออกแบบฐานข้อมูล สิ่งที่สำคัญมากคือการกำหนดข้อจำกัด (Constraints) เพื่อควบคุมความถูกต้องของข้อมูล (Data Integrity) ซึ่งคำสั่ง SQL ที่ใช้บ่อย ได้แก่ PRIMARY KEY, FOREIGN KEY, UNIQUE และ CHECK บทความนี้จะพาคุณเข้าใจการใช้งานแต่ละตัวอย่างละเอียด พร้อมตัวอย่างจริง

PRIMARY KEY
PRIMARY KEY ใช้กำหนดคอลัมน์ที่ไม่ซ้ำกันและไม่เป็นค่า NULL โดยแต่ละตารางสามารถมี PRIMARY KEY ได้เพียง 1 ค่าเท่านั้น
ตัวอย่าง:
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), department VARCHAR(50) );
FOREIGN KEY
FOREIGN KEY ใช้เชื่อมโยงตารางหนึ่งกับอีกตารางหนึ่ง เพื่อสร้างความสัมพันธ์ระหว่างข้อมูล เช่น ตาราง employees กับ ตาราง departments
ตัวอย่าง:
CREATE TABLE departments ( dept_id SERIAL PRIMARY KEY, dept_name VARCHAR(100) ); CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );
UNIQUE
UNIQUE ใช้บังคับไม่ให้ค่าซ้ำในคอลัมน์ เช่น email ของผู้ใช้งานต้องไม่ซ้ำกัน
ตัวอย่าง:
CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE, email VARCHAR(100) UNIQUE );
CHECK
CHECK ใช้บังคับเงื่อนไขของข้อมูล เช่น เงินเดือนต้องมากกว่า 0 หรืออายุผู้ใช้ต้องมากกว่า 18 ปี
ตัวอย่าง:
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), age INT CHECK (age >= 18), salary DECIMAL(10,2) CHECK (salary > 0) );
รวมตัวอย่างการใช้งานทั้งหมด
มาดูตัวอย่างจริงที่รวม PRIMARY KEY, FOREIGN KEY, UNIQUE และ CHECK เข้าด้วยกัน
CREATE TABLE departments ( dept_id SERIAL PRIMARY KEY, dept_name VARCHAR(100) UNIQUE ); CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE, age INT CHECK (age >= 18), salary DECIMAL(10,2) CHECK (salary > 0), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );
การใช้งานจริงในระบบ
สมมติว่าเรามีระบบบริษัท เราอาจมี:
- PRIMARY KEY: ใช้กับตาราง employees (id)
- FOREIGN KEY: ใช้เชื่อม employees กับ departments
- UNIQUE: ใช้บังคับไม่ให้ email ซ้ำ
- CHECK: ใช้ตรวจสอบอายุและเงินเดือน
Query ตัวอย่าง:
-- เพิ่มแผนก INSERT INTO departments (dept_name) VALUES ('HR'); -- เพิ่มพนักงาน INSERT INTO employees (name, email, age, salary, dept_id) VALUES ('Alice', '[email protected]', 25, 35000, 1); -- ลองเพิ่มพนักงานอายุไม่ถึง 18 จะ error INSERT INTO employees (name, email, age, salary, dept_id) VALUES ('Bob', '[email protected]', 15, 20000, 1);
ตารางเปรียบเทียบ
Constraint | ความหมาย | ตัวอย่างการใช้งาน |
---|---|---|
PRIMARY KEY | ระบุแถวไม่ซ้ำ | id SERIAL PRIMARY KEY |
FOREIGN KEY | เชื่อมความสัมพันธ์ข้ามตาราง | FOREIGN KEY (dept_id) REFERENCES departments(dept_id) |
UNIQUE | ไม่ให้ค่าซ้ำ | email VARCHAR(100) UNIQUE |
CHECK | ตรวจสอบตามเงื่อนไข | CHECK (age >= 18) |
สรุป
PRIMARY KEY, FOREIGN KEY, UNIQUE และ CHECK เป็นเครื่องมือสำคัญในการควบคุมความถูกต้องของข้อมูล การเข้าใจและใช้งาน Constraints อย่างถูกต้อง จะช่วยให้ระบบฐานข้อมูลมีความน่าเชื่อถือ และลดปัญหาความผิดพลาดของข้อมูลในอนาคต
SEO Keywords
SQL PRIMARY KEY,SQL FOREIGN KEY,SQL UNIQUE,SQL CHECK,สอน SQL,SQL Constraints,การใช้ PRIMARY KEY,การใช้ FOREIGN KEY,การใช้ UNIQUE,การใช้ CHECK