Functional Dependencies
ความหมาย
Functional dependency เป็นคุณสมบัติของความหมายหรือความหมายของแอตทริบิวต์ในความสัมพันธ์ (Relation) ความหมายจะเป็นตัวบ่งชี้ว่าแอตทริบิวต์เกี่ยวข้องกันอย่างไร และระบุ Function Dependency ระหว่างแอททริบิวต์
การที่ Functional dependency มีอยู่ การอ้างอิง (Dependency) จะเป็นข้อจำกัด (Constraint)ระหว่างแอตทริบิวต์
ตัวอย่าง
จากตัวอย่างในรูป ส่วนของ staffNo และ position ของ staff ของ SL21 เราจะเห็นได้ว่า position ของ staff เป็น Manager. อธิบายง่ายๆก็คือ staffNo จะเป็นตัวที่สามารถกำหนดหรือบอก position ได้
โดยสามารถอธิบายได้ดังรูปด้านล่าง
ในรูป (b) จะเห็นได้ว่าเมื่อนำ attribute มาสลับกัน จะไม่สามารถทำได้ เพราะว่า position จะไม่สามารถบ่งบอกได้ถึง staffNo
ความสัมพันธ์ระหว่าง staffNo และ position คือแบบ one-to-one (1:1) โดย staff number แต่ละเลขจะมีแค่ 1 position. กลับกัน ความสัมพันธ์ระหว่าง position และ staffNo คือ one-to-many (1:N)
โดยที่จะสามารถมี staff หลายคนใน position เดียวกันได้
สรุปได้ว่า staffNo จะเป็นตัว determinant ของ functional dependency
Update Anomalies
ความหมาย
เป็นความสัมพันธ์ที่มีข้อมูลที่มีลักษณะ Redundant หรือว่าซ้ำกัน ซึ่งอาจจะทำให้เกิดปัญหาได้โดยสามารถแบ่งประเภทได้เป็น 3 ประเภทคือ
- Insertion Anomalies
- Deletion Anomalies
- Modification Anomalies
ตัวอย่าง
Insertion Anomalies
การที่เราจะทำการ insert รายละเอียดของ staff คนใหม่ ไปยังความสัมพันธ์ StaffBranch เราจะต้องรวมรายละเอียดของ branch ที่ staff จะไปอยู่ด้วย. ยกตัวอย่างเช่น เราต้องการ insert รายละเอียดของ staff คนใหม่ที่ เลขที่ branch B007 นั้นหมายถึงเราจะต้องใส่ข้อมูลที่ถูกต้องของ branch นั้นๆ และข้อมูลนั้นจะต้องสอดคล้องกับค่าอื่นๆภายใน branch B007 ด้วย จะเห็นได้ว่าการ insert ครั้งนี้จะยังไม่มีผลกระทบซักเท่าไหร่ เนื่องจากข้อมูลของ B007 นั้นมีอยู่ในความสัมพันธ์ของ Branch
ในอีกกรณีหนึ่งของการ insert คือเมื่อทำการ insert ข้อมูลของ branch ใหม่ที่ไม่มี staff อยู่ในนั้นเลย ไปยัง StaffBranch จึงจำเป็นต้องใส่ null เข้าไปเป็น attribute ของ staff เช่น staffNo ยังไงก็ตาม staffNo นั้นเป็น Primary Key สำหรับความสัมพันธ์ StaffBranch ดังนั้นการที่เราจะเพิ่ม null เข้าไปยัง staffNo จะเป็นการกระทำที่ไม่ถูกต้อง
Deletion Anomalies
ถ้าเราต้องการที่จะลบข้อมูลออกจาก StaffBranch โดยข้อมูลที่ต้องการลบออกคือ สมาชิกคนสุดท้ายภายใน branch ข้อมูลของ branch นั้นๆก็จะหายไปด้วย เช่นถ้าเราจะลบข้อมูลของ staff SA9 (Mary Howe) จากใน StaffBranch ข้อมูลของ branch B007 ก็จะหายไปจากฐานข้อมูล โดยการออกแบบความสัมพันธ์จากรูปด้านบนจะแก้ปัญหานี้ได้ เนื่องจากมีการเก็บข้อมูลของ Branch แยกไว้ทำให้เมื่อลบข้อมูลออกจาก StaffBranch แล้วข้อมูลของ branch ก็ยังคงอยู่ในความสัมพันธ์ Branch
Modification Anomalies
หากเราต้องการที่จะแก้ไขข้อมูลจาก 1 ใน attribute ของ branch หนึ่งภายในความสัมพันธ์ StaffBranch ยกตัวอย่างเช่น ต้องการที่จะแก้ไข address ของ branch B003 เราจะต้อง update ข้อมูลทของ staff ทุกคนที่อยู่ใน branch นั้น โดยหากการแก้ไขครั้งนี้ไม่ได้แก้ไขข้อมูลทุกตัวที่เกี่ยวข้อง ก็จะทำให้เกิดความไม่สอดคล้องกันของฐานข้อมูล เช่น branch B003 อาจจะมีหลาย address ใน staff ที่ต่างกัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น