FOREIGN KEY คือคอนสเตรนต์ (Constraint) ที่ใช้กำหนดความสัมพันธ์ระหว่างสองตาราง โดยการเชื่อมโยงระหว่างคอลัมน์ในตารางหนึ่งไปยังคอลัมน์ในอีกตารางหนึ่ง โดยคอลัมน์ที่เชื่อมโยงกันจะต้องเป็นค่าที่มีอยู่ในตารางเป้าหมาย (หรือมีค่า NULL) โดยทั่วไปแล้วคอนสเตรนต์นี้ใช้เพื่อรักษาความถูกต้องของข้อมูล (Data Integrity) ในฐานข้อมูล
รูปแบบการใช้งาน FOREIGN KEY
- การสร้าง
FOREIGN KEYขณะสร้างตาราง - การเพิ่ม
FOREIGN KEYไปยังตารางที่มีอยู่แล้ว
การสร้าง FOREIGN KEY ขณะสร้างตาราง
สมมติว่าเรามีระบบจัดการคำสั่งซื้อสินค้า (Order Management System) ที่ประกอบด้วยสองตาราง ดังนี้
- ตาราง
Customers: เก็บข้อมูลลูกค้า - ตาราง
Orders: เก็บข้อมูลคำสั่งซื้อ
เราสามารถสร้าง FOREIGN KEY ในตาราง Orders โดยเชื่อมโยง CustomerID กับตาราง Customers ดังนี้
-- สร้างตาราง 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

แทรกข้อมูลตัวอย่างในตาราง
-- แทรกข้อมูลตัวอย่างในตาราง 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 ดังนี้
-- เพิ่ม FOREIGN KEY ในตาราง Orders หลังจากสร้างเสร็จ
ALTER TABLE Orders
ADD CONSTRAINT FK_CustomerOrder
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);การใช้งานเพิ่มเติม
การลบข้อมูลที่เกี่ยวข้อง (ON DELETE CASCADE): หากเราต้องการให้ลบคำสั่งซื้อที่เกี่ยวข้องออกเมื่อมีการลบลูกค้าออกจากตาราง Customers เราสามารถใช้ ON DELETE CASCADE ได้
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
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ช่วยให้ข้อมูลในตารางที่เชื่อมโยงกันถูกลบหรือแก้ไขตามอย่างอัตโนมัติ ทำให้การจัดการข้อมูลทำได้ง่ายและสะดวก
