การทำความเข้าใจ Foreign Keys ใน SQL Server

เมื่อออกแบบฐานข้อมูลเชิงสัมพันธ์ สิ่งสำคัญคือการสร้างความสัมพันธ์ระหว่างตารางเพื่อรักษาความถูกต้องของข้อมูล หนึ่งในวิธีการทำเช่นนี้คือการใช้ foreign keys Foreign key ใน SQL Server คือ ฟิลด์ (หรือกลุ่มฟิลด์) ในตารางหนึ่งที่ระบุแถวในอีกตารางหนึ่งอย่างไม่ซ้ำกัน หากคุณมาจากระบบฐานข้อมูลอื่น เช่น PostgreSQL คุณอาจพบความแตกต่างในทางไวยากรณ์และการนำไปใช้ใน SQL Server ซึ่งอาจทำให้เกิดความสับสน

ปัญหา: การสร้าง Foreign Key

ในสถานการณ์ที่กำหนด มีการพยายามสร้างสามตาราง: exams, question_bank และ answer_bank เป้าหมายคือการสร้าง foreign key ใน question_bank ที่อ้างอิงถึงตาราง exams อย่างไรก็ตาม ข้อผิดพลาดเกิดขึ้นเมื่อรันโค้ด SQL ข้อความสำคัญจากข้อผิดพลาดคือ:

Msg 8139, Level 16, State 0, Line 9 จำนวนของคอลัมน์ที่อ้างอิงใน foreign key แตกต่างจากจำนวนของคอลัมน์ที่ถูกอ้างอิงในตาราง ‘question_bank’

สิ่งนี้บ่งชี้ว่ามีความไม่ตรงกันในนิยาม foreign key

วิธีแก้ไข: การนิยาม Foreign Key อย่างถูกต้อง

ขั้นตอนที่ 1: ตรวจสอบการนิยามตาราง

มาดูรายละเอียดว่าจะแก้ไข foreign key ในตาราง question_bank ได้อย่างไร

การตั้งค่าตารางปัจจุบัน

SQL ดั้งเดิมสร้างตาราง question_bank ดังนี้:

create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint question_exam_id foreign key references exams(exam_id)
);

Foreign key ตั้งใจจะอ้างอิงถึง exam_id จากตาราง exams แต่ขาดไวยากรณ์และโครงสร้างที่เหมาะสม

ขั้นตอนที่ 2: ปรับปรุงการนิยาม Foreign Key

เพื่อให้นิยามความสัมพันธ์ของ foreign key ถูกต้อง ให้ระบุวิธีที่คอลัมน์ foreign key (question_exam_id) สัมพันธ์กับ primary key ของตารางที่ถูกอ้างอิง (exam_id):

create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);

การเปลี่ยนแปลงหลัก:

  • ระบุชื่อ foreign key: การตั้งชื่อข้อจำกัด foreign key (เช่น fk_questionbank_exams) เป็นการปฏิบัติที่ดีเพื่อความชัดเจน
  • อ้างอิงคอลัมน์ foreign key อย่างถูกต้อง: ตรวจสอบให้แน่ใจว่า foreign key อ้างอิงถึงคอลัมน์ที่ถูกต้องในตารางที่ถูกอ้างอิง

ขั้นตอนที่ 3: นำการเปลี่ยนแปลงไปใช้

ตอนนี้คุณสามารถลบตาราง question_bank ที่มีอยู่ (ถ้ามีอยู่) และสร้างใหม่ด้วยการนิยาม foreign key ที่แก้ไขแล้วโดยใช้:

drop table if exists question_bank;

create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);

บทสรุป

การตั้งค่า foreign keys ใน SQL Server เป็นขั้นตอนสำคัญในการรักษาความถูกต้องของข้อมูลและการสร้างความสัมพันธ์ระหว่างตาราง โดยการนิยามข้อจำกัด foreign key อย่างรอบคอบและแก้ไขปัญหาทางไวยากรณ์ใด ๆ คุณสามารถสร้างการออกแบบฐานข้อมูลที่แข็งแกร่งและมีประสิทธิภาพ

หากคุณพบข้อผิดพลาดใด ๆ ให้ตรวจสอบนิยาม foreign key เสมอเพื่อให้แน่ใจว่าคอลัมน์ที่อ้างอิงสอดคล้องกับคอลัมน์ที่ถูกอ้างอิงอย่างถูกต้อง ด้วยคำแนะนำนี้ คุณควรพร้อมที่จะนำ foreign keys ไปใช้อย่างประสบผลสำเร็จในฐานข้อมูล SQL Server ของคุณ