Referential integrity

SQL เบื้องต้น: ฐานข้อมูลเชิงสัมพันธ์

Timo Grossenbacher

Data Journalist

Referential integrity

  • เรคคอร์ดที่อ้างอิงตารางอื่นต้องอ้างอิงเรคคอร์ดที่มีอยู่จริงในตารางนั้น
  • ระบุระหว่างสองตาราง
  • บังคับใช้ผ่าน foreign keys
SQL เบื้องต้น: ฐานข้อมูลเชิงสัมพันธ์

การละเมิด Referential integrity

Referential integrity จากตาราง A ไปตาราง B ถูกละเมิดเมื่อ...

  • ...เรคคอร์ดในตาราง B ที่ถูกอ้างอิงจากตาราง A ถูกลบออก
  • ...มีการแทรกเรคคอร์ดในตาราง A ที่อ้างอิงเรคคอร์ดซึ่งไม่มีอยู่ในตาราง B
  • Foreign keys ช่วยป้องกันการละเมิด!
SQL เบื้องต้น: ฐานข้อมูลเชิงสัมพันธ์

การจัดการกับการละเมิด

CREATE TABLE a (
 id integer PRIMARY KEY,
 column_a varchar(64), 
 ...,
 b_id integer REFERENCES b (id) ON DELETE NO ACTION
);
CREATE TABLE a (
 id integer PRIMARY KEY,
 column_a varchar(64), 
 ...,
 b_id integer REFERENCES b (id) ON DELETE CASCADE
);
SQL เบื้องต้น: ฐานข้อมูลเชิงสัมพันธ์

การจัดการกับการละเมิด (ต่อ)

ON DELETE...

  • ...NO ACTION: แสดงข้อผิดพลาด
  • ...CASCADE: ลบเรคคอร์ดที่อ้างอิงทั้งหมด
  • ...RESTRICT: แสดงข้อผิดพลาด
  • ...SET NULL: กำหนดคอลัมน์ที่อ้างอิงเป็น NULL
  • ...SET DEFAULT: กำหนดคอลัมน์ที่อ้างอิงเป็นค่าดีฟอลต์
SQL เบื้องต้น: ฐานข้อมูลเชิงสัมพันธ์

มาดูตัวอย่างกัน!

SQL เบื้องต้น: ฐานข้อมูลเชิงสัมพันธ์

Preparing Video For Download...