Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL Server

Foreign Key (คีย์ต่างประเทศ) ใน SQL Server

Foreign Key คืออะไร?

Foreign Key (FK) ใช้บังคับความสมบูรณ์ของข้อมูลอ้างอิง (Referential Integrity) ค่าในคอลัมน์ FK ของตารางลูก (Child) ต้องมีอยู่ในคอลัมน์ PK ของตารางแม่ (Parent)

1. สร้าง FK พร้อม CREATE TABLE

CREATE TABLE child_table (
    col1 data_type [NULL | NOT NULL],
    col2 data_type [NULL | NOT NULL],
    ...
    CONSTRAINT fk_name FOREIGN KEY (child_col1, child_col2, ...)
        REFERENCES parent_table (parent_col1, parent_col2, ...)
        [ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }]
        [ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }]
);

ตัวเลือก ON DELETE / ON UPDATE

ตัวเลือก

พฤติกรรมเมื่อ Parent ถูกลบ/แก้ไข
NO ACTIONไม่ทำอะไร (default) - จะ error หากมี child อยู่
CASCADEลบ/แก้ไข Child ตามไปด้วย
SET NULLตั้งค่า FK ใน Child เป็น NULL (ต้องอนุญาต NULL)
SET DEFAULTตั้งค่า FK ใน Child เป็น DEFAULT value

ตัวอย่าง FK เดี่ยว

CREATE TABLE sanpham (
    id_sanpham INT PRIMARY KEY,
    ten_sanpham VARCHAR(50) NOT NULL,
    phan_loai VARCHAR(25)
);

CREATE TABLE hangtonkho (
    id_hangtonkho INT PRIMARY KEY,
    id_sanpham INT NOT NULL,
    soluong INT,
    luong_toithieu INT,
    luong_toida INT,
    CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham)
        REFERENCES sanpham (id_sanpham)
);

ตัวอย่าง Composite FK (หลายคอลัมน์)

CREATE TABLE sanpham (
    ten_sanpham VARCHAR(50) NOT NULL,
    diadiem VARCHAR(50) NOT NULL,
    phanloai VARCHAR(25),
    CONSTRAINT sanpham_pk PRIMARY KEY (ten_sanpham, diadiem)
);

CREATE TABLE hangtonkho (
    id_hangtonkho INT PRIMARY KEY,
    ten_sanpham VARCHAR(50) NOT NULL,
    diadiem VARCHAR(50) NOT NULL,
    soluong INT,
    luong_toithieu INT,
    luong_toida INT,
    CONSTRAINT fk_htk_sanpham FOREIGN KEY (ten_sanpham, diadiem)
        REFERENCES sanpham (ten_sanpham, diadiem)
);

2. เพิ่ม FK ด้วย ALTER TABLE

ALTER TABLE child_table
ADD CONSTRAINT fk_name FOREIGN KEY (child_col1, child_col2, ...)
    REFERENCES parent_table (parent_col1, parent_col2, ...);

ตัวอย่าง

ALTER TABLE hangtonkho
ADD CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham)
    REFERENCES sanpham (id_sanpham);

ALTER TABLE hangtonkho
ADD CONSTRAINT fk_htk_sanpham FOREIGN KEY (ten_sanpham, diadiem)
    REFERENCES sanpham (ten_sanpham, diadiem);

ข้อควรระวัง: คอลัมน์ FK ต้องมีชนิดข้อมูลตรงกับ PK ของ Parent ทุกคอลัมน์