การสร้าง Foreign Key บน MySQL ด้วย phpmyadmin (How to create foreign
key on MySQL with phpmyadmin)โดย Foreign Key
ก็คือคีย์ร่วมที่ทำหน้าที่เชื่อมโยงความสัมพันธ์ระหว่างตารางนั่นเองหากคีย์นอกมีการเปลี่ยนแปลงก็จะส่งผลต่อการเชื่อมโยงข้อมูลระหว่างตารางตามเงื่อนไขที่เราได้กำหนดไว้
โดยข้อจำกัด ของความสัมพันธ์ระหว่างตารางที่เราสร้างเรามักจะเรียกว่า
Constraint โดยการกำหนดรูปแบบของความสัมพันธ์ของ Constraint
จะมีอยู่สองกรณี คือ on delete และ on update
และแต่ละกรณีสามารถกำหนดข้อจำกัดของความสัมพันธ์ได้โดยมี keyword
ซึ่งคำเหล่านี้จะนำไปเติมไว้ด้านหลังเงือนไข โดยมีความฟมายดังต่อไปนี้
1. Cascade คือเมื่อกำหนด keyword cascade
เข้าไปด้านหลัง เช่น on delete cascade
จะหมายความว่าให้ทำการลบโดยไม่ต้องสนใจความสัมพันธ์ระหว่างตาราง
2. Set null คือกำหนดให้เป็นค่าว่างใน field
นั้นๆที่มีข้อจำกัดความสัมพันธ์เช่น on delete set null
โดยเมื่อทำการลบข้อมูลใน field ที่อ้างอิงระหว่างตารางแล้วให้ระบบตั้งค่า
field นั้นให้เป็นค่าว่าง
3. No Action คือกำหนดให้ไม่ต้องทำอะไร เมื่อมีการ update
หรือ delete ข้อมูลใน field ที่มีความสัมพันธ์ระหว่างตาราง
ข้อมูลที่อยู่ใน field
ที่เชื่อมโยงก็จะอยู่เหมือนเดิมไม่มีการเปลี่ยนแปลงแต่อย่างใด
4. Restrict คือห้ามมีมิให้มีการเปลี่ยนแปลงใน field
ที่ถูกกำหนดความสัมพันธ์ทั้งแบบ on delete หรือ on update เรียกว่า lock
ไว้ไม่ให้ผู้ใช้สามารถลบหรือปรับปรุงค่าต่างๆได้เลย
บทความนี้จะยกตัวอย่างในการสร้างและแก้ไข Foreign Key ด้วย phpmyadmin
และแบบ mysql syntax โดยอันดับแรกจะขอยกตัวอย่างตั้งแต่การออกแบบ
ER-Diagram แบบ Chen Model โดยยกตัวอย่าง 3 Entity ได้แก่ Professor,
Class, Course )
จากนั้นจะทดลองสร้าง ตารางตาม ER-D ข้างบน จำนวน 3 ตาราง
และกำหนด Primary Key ของแต่ละตารางตามโดยกำหนดให้ Primary Key
คือตัวที่ขีดเส้นใต้ ตามหลักของการเขียน ER-D แบบ Chen
ที่เราออกแบบไว้พร้อมกำหนด Primary Key ให้เรียบร้อย
เมื่อกำหนดแล้วจะได้หน้าตาแบบนี้ เราก็กรอกข้อมูลรายละเอียดของ Foreign Key ให้ครบถ้วน
โดยผมจะลองยกตัวอย่างการสร้าง Foreign Key โดยกำหนดความสัมพันธ์แบบ no action เมื่อมีการ ลบหรือ เปลี่ยนแปลง ข้อมูลใน field prof_id ที่มีความสัมพันธ์กันระหว่างตาราง class กับ professor มันจะไม่เกิดอะไรขึ้น โดยจะลองทำให้ดูทีละแบบ และกำหนดความสัมพันธ์แบบ cascade เมื่อมีการลบ หรือเปลี่ยนแปลง ความสัมพันธ์ระหว่าง field crs_id ระหว่างตาราง class กับ course ซึ่งเมื่อมีการเปลี่ยนแปลงข้อมูลใน field ***หมายเหตุ***โดยในการตั้งค่า foreign key ควรทำตอนสร้างตารางไม่ควรทำตอนมีข้อมูลอยู่ในตาราง
MySQL Syntax ในการสร้าง Foreign Key (กรณีสร้างตารางไปแล้ว เราต้องใช้คำสั่งปรับปรุงแก้ไขตาราง นั้นก็คือคำสั่ง Alter Table จากตัวอย่างเป็นการสร้าง Constraint สองครังไม่ได้สร้างพร้อมกัน แต่ Constraint สามารถสร้างพร้อมกันได้ )เมื่อสร้างเสร็จแล้วจะได้ดังรูป
ALTER TABLE `class` ADD CONSTRAINT `abc` FOREIGN KEY (`prof_id`) REFERENCES `professor`(`prof_id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
———————————————————————————————–
ALTER TABLE `class` ADD CONSTRAINT `casecades` FOREIGN KEY (`crs_id`) REFERENCES `course`(`crs_id`) ON DELETE CASCADE ON UPDATE CASCADE;
จากนั้นเรามาทดลองเพิ่มข้อมูลลงไปใน ตาราง course, professor, class
เมื่อเรา insert ข้อมูลที่ ตาราง course และ professor เสร็จแล้ว เรามา insert ข้อมูลต่อที่ตาราง class ระบบก็จะทำการ query ข้อมูลให้เราในหน้า insert เลย โดยเราสามารถเลือกเพิ่มข้อมูลได้จาก drop down ตามรูป สี่เหลี่ยมสีแดง และสีนำเงิน (นี่คือประโยชน์ของฐานข้อมูลเชิงสัมพันธ์)
จากนั้นเราจะมาทดลองทำการลบข้อมูลดูโดยเข้าไปที่ตาราง course และเริ่มทำการลบข้อมูล รายวิชาไปหนึ่ง record โดยระบบจะสามารถลบข้อมูลใน record นั้นได้ (เพราะเราใช้เงื่อนไข on delete cascade) และการลบข้อมูลในตาราง course จะส่งกระทบไปยัง record ในตาราง class ด้วย เพราะถูกเชื่อมโยงกันด้วย foreign key ดังรูป
ในตาราง class จะไม่ปรากฏ record ของข้อมูลที่มีการเชื่อมโยงเลย ดังรูป
และหากทดลองลบข้อมูลในตาราง professor จะไม่สามารถลบข้อมูลได้เนื่องจาก foreign key ของ field prof_id ของตาราง professor เชื่อมโยงกับ field prof_id ของตาราง class อยู่ โดยมีความสัมพันธ์เป็น no action จึงทำให้ไม่สามารถลบข้อมูลได้ดังรูป
สรุปจากบทความนี้หวังว่าผู้อ่านคงจะได้ความรู้และวิธีการสร้าง foreign key และการตั้งค่าความสัมพันธ์ของ foreign key บ้างไม่มากก็น้อยนะครับ หากสงสัยสามารถโพสสอบถามได้นะครับ
0 ความคิดเห็น:
แสดงความคิดเห็น