SQL การใช้งาน FOREIGN KEY Constraint

FOREIGN KEY คือคอนสเตรนต์ (Constraint) ที่ใช้กำหนดความสัมพันธ์ระหว่างสองตาราง โดยการเชื่อมโยงระหว่างคอลัมน์ในตารางหนึ่งไปยังคอลัมน์ในอีกตารางหนึ่ง โดยคอลัมน์ที่เชื่อมโยงกันจะต้องเป็นค่าที่มีอยู่ในตารางเป้าหมาย (หรือมีค่า NULL) โดยทั่วไปแล้วคอนสเตรนต์นี้ใช้เพื่อรักษาความถูกต้องของข้อมูล (Data Integrity) ในฐานข้อมูล

รูปแบบการใช้งาน FOREIGN KEY

  1. การสร้าง FOREIGN KEY ขณะสร้างตาราง
  2. การเพิ่ม FOREIGN KEY ไปยังตารางที่มีอยู่แล้ว

การสร้าง FOREIGN KEY ขณะสร้างตาราง

สมมติว่าเรามีระบบจัดการคำสั่งซื้อสินค้า (Order Management System) ที่ประกอบด้วยสองตาราง ดังนี้

  • ตาราง Customers: เก็บข้อมูลลูกค้า
  • ตาราง Orders: เก็บข้อมูลคำสั่งซื้อ

เราสามารถสร้าง FOREIGN KEY ในตาราง Orders โดยเชื่อมโยง CustomerID กับตาราง Customers ดังนี้

SQL
-- สร้างตาราง Customers
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,  -- คอลัมน์นี้จะเป็น PRIMARY KEY
    CustomerName VARCHAR(100),
    ContactNumber VARCHAR(20)
);

-- สร้างตาราง Orders โดยมี FOREIGN KEY
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,  -- คอลัมน์นี้จะเป็น PRIMARY KEY
    OrderDate DATE,
    CustomerID INT,  -- คอลัมน์ที่ใช้เป็น FOREIGN KEY
    Amount DECIMAL(10, 2),
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)  -- เชื่อมกับ Customers
);
  • Customers มี CustomerID เป็น PRIMARY KEY ซึ่งเป็นคีย์หลักของตาราง
  • Orders มี CustomerID ที่เชื่อมโยงกับ CustomerID ใน Customers ด้วยการใช้ FOREIGN KEY

โครงสร้างของตาราง Customers

โครงสร้างของตาราง Orders

แทรกข้อมูลตัวอย่างในตาราง

SQL
-- แทรกข้อมูลตัวอย่างในตาราง Customers
INSERT INTO Customers (CustomerID, CustomerName, ContactNumber)
VALUES 
(1, 'John Doe', '1234567890'),
(2, 'Jane Smith', '0987654321');

-- แทรกข้อมูลตัวอย่างในตาราง Orders
INSERT INTO Orders (OrderID, OrderDate, CustomerID, Amount)
VALUES 
(101, '2024-10-12', 1, 500.00),
(102, '2024-10-13', 2, 250.00);

ข้อมูลในตาราง Customers

ข้อมูลในตาราง Orders

เราจะไม่สามารถเพิ่ม CustomerID ใน Orders ที่ไม่มีอยู่ใน Customers ได้ หากเราลองใส่ค่าที่ไม่สอดคล้องกับข้อมูลใน Customers จะเกิดข้อผิดพลาด

การเพิ่ม FOREIGN KEY ไปยังตารางที่มีอยู่แล้ว

หากเรามีตารางที่สร้างไว้แล้ว แต่ต้องการเพิ่ม FOREIGN KEY หลังจากการสร้างตาราง เราสามารถใช้คำสั่ง ALTER TABLE ดังนี้

SQL
-- เพิ่ม FOREIGN KEY ในตาราง Orders หลังจากสร้างเสร็จ
ALTER TABLE Orders
ADD CONSTRAINT FK_CustomerOrder
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);

การใช้งานเพิ่มเติม

การลบข้อมูลที่เกี่ยวข้อง (ON DELETE CASCADE): หากเราต้องการให้ลบคำสั่งซื้อที่เกี่ยวข้องออกเมื่อมีการลบลูกค้าออกจากตาราง Customers เราสามารถใช้ ON DELETE CASCADE ได้

SQL
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderDate DATE,
    CustomerID INT,
    Amount DECIMAL(10, 2),
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
    ON DELETE CASCADE  -- ลบข้อมูลคำสั่งซื้อหากมีการลบลูกค้าที่เชื่อมโยง
);

การอัปเดตข้อมูลที่เกี่ยวข้อง (ON UPDATE CASCADE): ในกรณีที่เราต้องการให้ข้อมูลใน Orders อัปเดตตามเมื่อมีการแก้ไขค่าใน Customers เราสามารถใช้ ON UPDATE CASCADE

SQL
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderDate DATE,
    CustomerID INT,
    Amount DECIMAL(10, 2),
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
    ON UPDATE CASCADE  -- อัปเดตข้อมูลคำสั่งซื้อเมื่อแก้ไขค่า CustomerID
);

สรุป

FOREIGN KEY Constraint เป็นวิธีที่ช่วยให้ข้อมูลในฐานข้อมูลมีความสอดคล้องและสามารถเชื่อมโยงกันระหว่างตาราง

  • ในตัวอย่างการสร้างตาราง Orders เราใช้ FOREIGN KEY (CustomerID) เพื่อกำหนดให้ CustomerID ในตาราง Orders จะต้องมีค่าเดียวกับ CustomerID ในตาราง Customers
  • ฟีเจอร์เสริมอย่าง ON DELETE CASCADE และ ON UPDATE CASCADE ช่วยให้ข้อมูลในตารางที่เชื่อมโยงกันถูกลบหรือแก้ไขตามอย่างอัตโนมัติ ทำให้การจัดการข้อมูลทำได้ง่ายและสะดวก
แชร์เรื่องนี้