ความหมายของ CASCADE นั้นคือ เป็นกฎของ Constraints ในการทำตอน DELETE หรือ UPDATE คือเมื่อมีการ Modify ใด ๆ ในตาราง หลัก ตารางอ้างอิงจะเปลี่ยนตาม FK ที่อ้างอิงกับตารางหลักอยู่ คือเปลี่ยนค่า PK ของตารางหลัก ฟิวส์ที่เป็น FK กับตารางหลักอยู่ จะเปลี่ยนไปตามที่ตารางหลักเปลี่ยนไปคือ
- แก้ไขที่ตารางหลัก ตารางอ้างอิงจะเปลี่ยนไปตามที่ตารางหลักเปลี่ยนแปลง ไป
- ลบที่ตารางหลัก ตารางอ้างอิงจะถูกลบไปด้วย ตามรหัสที่อ้างอิงอยู่
--------------------------------------------------------------------------------------
ในการออกแบบฐานข้อมูลถือว่ามีความสำคัญมาก เพราะจากประสบการณ์ของอันน้อยนิดของผมนั้นคิดว่าในอนาคตต้องมีการแก้ไข หรือปรับเปลี่ยนเป็นเรื่องธรมมดา แต่ถ้าหาก Database นั้นถูกออกแบบให้อยู่ในมาตรฐาน การปรับเปลี่ยนก็เป็นเรื่องง่่าย ๆ แต่ถ้าระหว่างตาราง relationship ไม่มีความสัมพันธ์กันดีพออาจจะเกิดปัญหาตามก็เป็นได้ จากเรื่องง่ายก็กลายเป็นงานเข้าก็เป็นได้ ดังนั้นผมจึงมี Trip เล็กๆ น้อยๆมาฝากกัน
ขอยกตัวอย่างแค่ 2 ตารางนะครับ
- CustomerID = PK (ตาราง Customer)
- CustomerID = PK (ตาราง Customer)
- CustomerID = FK (ตาราง Audit )
-------------------------------------------------------------------------------
CREATE TABLE `customer` (
`CustomerID` varchar(4) NOT NULL,
`Name` varchar(50) NOT NULL,
`Email` varchar(50) NOT NULL,
`CountryCode` varchar(2) NOT NULL,
`Budget` double NOT NULL,
`Used` double NOT NULL,
PRIMARY KEY (`CustomerID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
----------------------------------------------------------------------------------------
ตอนสร้างตาราง Audit ให้ไปเพิ่มคำสั่งตามภาพนะครับ
จากภาพจะสังเกตุว่าเราเขียนคำสั่งฝั่งตาราง Audit ที่เป็น FK นะครับเพื่อให้ตัวข้อมูลในตารางตัวมัเองเกิดการเปลี่ยนตามตาราท่ี่เป็น PK
ก็เห็นน้อๆงหลายคนถามเข้ามานะครับ ว่าลองเขียนแล้วข้อมูลตารางรอง ไม่ยอมเปลี่ยนตามตารางหลักเลย ...อืม..ลีมไปมีอีกหนึ่งวิธีนะครับง่ายเหมือนกัน ใช้โปรแกรม Navicat for MySQL
ลองทดสอบทำตามภาพนะครับ
1. ก่อนอื่นสร้างตารางขึ้นมาก่อน 2 ตารางคุณสมบัติตามภาพด้านบน
2. คลิีกขวาที่ตาราง Audit เลือก Design Table
3. กำหนด Index
4. กำหนด Foreign Keys
จากนั้นมาทดสอบกันครับ
------------------------------------------------------------------------------------------------------------
***** ไม่มีปุ่ม Save กด Ctrl+s นะครับ
ลองๆ ทำดูนะครับผิดพลาดก็ขออภัยครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น