คำศัพท์เกี่ยวกับ Relational Database สำหรับ MS Access ตอนที่ 1 - Enforce Referential Integrity

ในแต่ละ Class ที่ผ่านมาของ MS Access ที่ 9Expert เปิดอบรมอยู่นั้น ผู้ที่เข้าอบรมมาจากหลากหลายกลุ่มหน้าที่การงาน เช่น กลุ่มงานบัญชี , กลุ่มงานบุคคล , กลุ่มงานวิศวกร น้อยมากที่จะทำงานด้าน IT โดยตรง
ดังนั้น การเรียนการสอนจึงเริ่มตั้งแต่การออกแบบฐานข้อมูล ซึ่งจะมีคำศัพท์หลาย ๆ คำที่ผู้เข้าอบรมไม่เคยได้ยินมาก่อน
หรือบางท่านที่เคยทดลองใช้งาน MS Access มาก่อน ก็ไม่เข้าใจถึงความจำเป็นในการกำหนดค่าต่าง ๆ เช่น
ดังนั้น การเรียนการสอนจึงเริ่มตั้งแต่การออกแบบฐานข้อมูล ซึ่งจะมีคำศัพท์หลาย ๆ คำที่ผู้เข้าอบรมไม่เคยได้ยินมาก่อน
หรือบางท่านที่เคยทดลองใช้งาน MS Access มาก่อน ก็ไม่เข้าใจถึงความจำเป็นในการกำหนดค่าต่าง ๆ เช่น
- การกำหนดให้ฟิลด์ใดฟิลด์หนึ่ง หรือมากกว่า 1 ฟิลด์ เป็น Primary Key
- การกำหนด Enforce Referential Integrity ให้กับเส้น Relationships
- การกำหนด Property Field
ความแตกต่างระหว่างกำหนด Enforce Referential Integrity และ ไม่กำหนด
1. จากรูป 1.1 ข้างบน เมื่อกำหนด Enforce Referential Integrity ระหว่าง Table Employees กับ Table Orders จะเห็นว่า สามารถระบุประเภทความสัมพันธ์ระหว่าง Table ได้ ซึ่ง ความสัมพันธ์เป็นแบบ one to many เชื่อมด้วยฟิลด์ EmployeeID โดยที่ Employees เป็นข้อมูลจากตารางฝั่ง One มี EmployeeID ส่วน Orders เป็นข้อมูลฝั่ง Many เนื่องจาก พนักงานหนึ่งคนสามารถออกใบสั่งซื้อได้หลายใบ
จากรูปฝั่งขวามือ หากไม่กำหนด Enforce Referential Integrity ระหว่าง Table
จะพบว่า เป็นเส้นระหว่าง Table ไม่ระบุความสัมพันธ์
1. จากรูป 1.1 ข้างบน เมื่อกำหนด Enforce Referential Integrity ระหว่าง Table Employees กับ Table Orders จะเห็นว่า สามารถระบุประเภทความสัมพันธ์ระหว่าง Table ได้ ซึ่ง ความสัมพันธ์เป็นแบบ one to many เชื่อมด้วยฟิลด์ EmployeeID โดยที่ Employees เป็นข้อมูลจากตารางฝั่ง One มี EmployeeID ส่วน Orders เป็นข้อมูลฝั่ง Many เนื่องจาก พนักงานหนึ่งคนสามารถออกใบสั่งซื้อได้หลายใบ
จากรูปฝั่งขวามือ หากไม่กำหนด Enforce Referential Integrity ระหว่าง Table
จะพบว่า เป็นเส้นระหว่าง Table ไม่ระบุความสัมพันธ์
2. เนื่องจากข้อมูลใน ตาราง Employees มีข้อมูลแต่ 1 ถึง 8 ดังรูป 2.3 เป็นดังนี้
จากรูป 2.1 เมื่อป้อนข้อมูล EmployeeID เป็น 10 จะพบว่ามีการแจ้งเตือนว่า You cannot add or change a record because a related record is required in table "Employees"
การแจ้งเตือนดังกล่าว เนื่องจาก ไม่มี EmployeeID 10 ใน Table Employees
แต่ จากรูป 2.2 สามารถป้อนได้โดยไม่มีการแจ้งเตือนใด ๆ
นั่นหมายถึงว่า มีการตรวจสอบความถูกต้องของข้อมูลในตารางที่มีความสัมพันธ์อยู่ ซึ่ง การตรวจสอบความถูกต้องของข้อมูลดังกล่าว จะตรวจสอบว่า ข้อมูลที่ป้อนใส่ Field ที่ใช้เชื่อมความสัมพันธ์ (Foreign key) จาก Table ฝั่ง many นั้นมีอยู่ใน Field ที่ถูกอ้างอิง (Primary key) ของตารางฝั่ง One หรือไม่
จากตัวอย่างสามารถแปลความหมายข้อมูลได้ว่า “ ไม่มีพนักงานหมายเลข 10 อยู่ในระบบงาน ดังนั้นพนักงานหมายเลข 10 จึงไม่สามารถออกใบสั่งซื้อได้ ” ซึ่งการกำหนดค่า Enforce Referential Integrity จะช่วยดูในเรื่องนี้ให้กับ DBMS ของเราอัตโนมัติ
การแจ้งเตือนดังกล่าว เนื่องจาก ไม่มี EmployeeID 10 ใน Table Employees
แต่ จากรูป 2.2 สามารถป้อนได้โดยไม่มีการแจ้งเตือนใด ๆ
นั่นหมายถึงว่า มีการตรวจสอบความถูกต้องของข้อมูลในตารางที่มีความสัมพันธ์อยู่ ซึ่ง การตรวจสอบความถูกต้องของข้อมูลดังกล่าว จะตรวจสอบว่า ข้อมูลที่ป้อนใส่ Field ที่ใช้เชื่อมความสัมพันธ์ (Foreign key) จาก Table ฝั่ง many นั้นมีอยู่ใน Field ที่ถูกอ้างอิง (Primary key) ของตารางฝั่ง One หรือไม่
จากตัวอย่างสามารถแปลความหมายข้อมูลได้ว่า “ ไม่มีพนักงานหมายเลข 10 อยู่ในระบบงาน ดังนั้นพนักงานหมายเลข 10 จึงไม่สามารถออกใบสั่งซื้อได้ ” ซึ่งการกำหนดค่า Enforce Referential Integrity จะช่วยดูในเรื่องนี้ให้กับ DBMS ของเราอัตโนมัติ
3. จากรูป 2.1 จะเห็นว่า มี EmployeeID หมายเลข 1 อยู่ใน Table Orders (พนักงานหมายเลข 1 เปิดใบสั่งซื้อไปแล้ว) หากลบข้อมูล EmployeeID หมายเลข 1 จาก Table Employees จะพบว่าไม่สามารถลบออกได้ ดังรูป 3.1 ทั้งนี้เนื่องจากมีการกำหนด Enforce Referential Integrity ที่เส้นความสัมพันธ์นั่นเอง
4. จากรูป 4.1 จะเห็นว่า ไม่สามารถแก้ไขข้อมูล EmployeeID หมายเลข 1 ให้เป็นหมายเลข 10 ได้ และ ข้อความที่แจ้งเตือนเป็นข้อความเดียวกับรูป 3.1 ทั้งนี้เนื่องจากมีการกำหนด Enforce Referential Integrity ที่เส้นความสัมพันธ์นั่นเอง
จากที่ได้อ่านกันไป แต่ละท่านเข้าใจ Enforce Referential Integrity กันว่าอย่างไรบ้างครับ
หากเราจะเข้าใจว่าการกำหนด Enforce Referential Integrity เป็นการกำหนดให้ตรวจสอบความถูกต้องของข้อมูลให้เป็นไปตามกฎที่ MS Access ตั้งไว้ ก็น่าจะได้ใช่มั้ยครับ
สำหรับบทความนี้ ตั้งใจขยายความจากบทความทั่วไป ที่ได้อธิบาย Enforce Referential Integrity อย่างเป็นหลักการ
อย่างไร ลองอ่านเพิ่มเติมได้ที่ https://support.microsoft.com/th-th/kb/304473 นะครับ
ในบทความถัดไป เราจะยังอยู่กันที่ Enforce Referential Integrity กันต่อ
ซึ่งจะว่าด้วยเรื่อง มีสาเหตุอะไรบ้าง ที่เราไม่สามารถกำหนด Enforce Referential Integrity ให้กับความสัมพันธ์ได้
นอกเหนือจากนี้ ยังมีคำศัพท์คำอื่นที่ต้องขยายความอีก ที่ท่านอาจได้เห็นในบทความนี้ เช่น Primary Key , Foreign key ไปแล้ว ทั้งนี้จะอยู่ในบทความถัดไปเช่นกัน
จากที่ได้อ่านกันไป แต่ละท่านเข้าใจ Enforce Referential Integrity กันว่าอย่างไรบ้างครับ
หากเราจะเข้าใจว่าการกำหนด Enforce Referential Integrity เป็นการกำหนดให้ตรวจสอบความถูกต้องของข้อมูลให้เป็นไปตามกฎที่ MS Access ตั้งไว้ ก็น่าจะได้ใช่มั้ยครับ
สำหรับบทความนี้ ตั้งใจขยายความจากบทความทั่วไป ที่ได้อธิบาย Enforce Referential Integrity อย่างเป็นหลักการ
อย่างไร ลองอ่านเพิ่มเติมได้ที่ https://support.microsoft.com/th-th/kb/304473 นะครับ
ในบทความถัดไป เราจะยังอยู่กันที่ Enforce Referential Integrity กันต่อ
ซึ่งจะว่าด้วยเรื่อง มีสาเหตุอะไรบ้าง ที่เราไม่สามารถกำหนด Enforce Referential Integrity ให้กับความสัมพันธ์ได้
นอกเหนือจากนี้ ยังมีคำศัพท์คำอื่นที่ต้องขยายความอีก ที่ท่านอาจได้เห็นในบทความนี้ เช่น Primary Key , Foreign key ไปแล้ว ทั้งนี้จะอยู่ในบทความถัดไปเช่นกัน