การทำความเข้าใจ 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 ของคุณ