ฟังก์ชันนอลดีเพนเดนซี (Functional dependencies)
ก่อนเริ่มการทำนอมอลไลเซชัน (Normalization) ต้องมาทำความเข้าใจกับคำว่าฟังก์ชันนอลดีเพนเดนซีก่อน โดยสิ่งนี้จะถูกใช้ในการบ่งบอกลักษณะของคอลัมน์รวมถึงใช้กำหนดลักษณะของนอมอลไลเซชัน
ฟังก์ชันนอลดีเพนเดนซีคืออะไร
ฟังก์ชันนอลดีเพนเดนซีในความหมายของฐานข้อมูล เป็นการแสดงความสัมพันธ์ระหว่างคอลัมน์ในเทเบิล (Table) โดยจะมีคอลัมน์หรือชุดคอลัมน์ซึ่งใช้เป็นตัวแทนข้อมูลของคอลัมน์อื่นที่เรียกว่าตัวตั้ง (Determinant) และเรียกคอลัมน์หรือชุดคอลัมน์ในเทเบิลที่สามารถใช้ตัวตั้งเป็นตัวแทนได้ว่าตัวตาม (Dependent) ลักษณะสำคัญคือเมื่อหยิบสมาชิกของตัวตั้งตัวใดก็ได้มาหนึ่งตัว จะต้องได้สมาชิกของตัวตามหนึ่งตัวเช่นเดียวกัน ถ้าให้ตัวตัั้งคือ X และตัวตามคือ Y จะเขียนสัญลักษณ์ได้ว่า X→Y ยกตัวอย่าง ข้อมูลประชากรไทย มีทั้งรหัสประจำตัวประชาชน ชื่อ นามกุล กรุ๊ปเลือด ศาสนา เมื่อหยิบรหัสประจำตัวประชาชนมาหนึ่งตัว ก็จะได้ หนึ่งชื่อ หนึ่งนามกุล หนึ่งกรุ๊ปเลือด หนึ่งศาสนา นั้นหมายความว่า รหัสประจำตัวประชาชน→{ชื่อ,นามสกุล, กรุ๊ปเลือด, ศาสนา} แต่ ชื่อ→นามสกุล จะใช้ไม่ได้หากหยิบชื่อใครมาสักคน ก็อาจจะมีนามสกุลมากกว่าหนึ่งคนที่โผล่ขึ้นมาก็เป็นได้
ประเภทของฟังก์ชันนอลดีเพนเดนซี
ฟังก์ชันนอลดีเพนเดนซีมีสองประเภทได้แก่
- ฟังก์ชันนอลดีเพนเดนซี ธรรมดา/ไม่ธรรมดา (Trivial/Non-trivial Functional Dependencies)
- ฟังก์ชันนอลดีเพนเดนซี บางส่วน/เต็มส่วน (Partial/Full Functional Dependencies)
ฟังก์ชันนอลดีเพนเดนซี ธรรมดา/ไม่ธรรมดา (Trivial/Non-trivial Functional Dependencies)
จากข้อมูลต่อไปนี้
| ชื่อจริง | นามสกุล | วันเกิด | เพศ |
|---|---|---|---|
| สมชาย | ใจดี | 2008-09-09 | ชาย |
| วิริยะ | จริงใจ | 2012-11-15 | ชาย |
| สมหญิง | ใจดี | 2008-09-09 | หญิง |
| พรพรรณ | วันดี | 2011-10-25 | หญิง |
| วิริยะ | แดดจ้า | 2000-07-17 | ชาย |
ฟัง์ชันนอลดีเพนเดนซีธรรมดา คือการที่ตัวตามเป็นส่วนหนึ่งของตัวตั้ง เช่นจากตัวอย่างนี้ เมื่อผู้ใช้หยิบข้อมูลชื่อจริงและนามสกุลของใครก็ได้ ก็จะได้นามสกุลของคนนั้นค่าเดียว อย่างเช่นหยิบ “สมชาย ใจดี” มา สิ่งที่ได้คือนามสกุล “ใจดี” ตัวเดียวเช่นกัน ซึ่งก็จะเขียนได้ว่า {ชื่อจริง, นามสกุล}→นามสกุล สังเกตว่าตัวตาม เป็นส่วนหนึ่งของตัวตั้งด้วย
ฟัง์ชันนอลดีเพนเดนซีไม่ธรรมดา คือการที่ตัวตามไม่ได้เป็นส่วนหนึ่งของตัวตั้ง เช่นจากตัวอย่างนี้ เมื่อผู้ใช้หยิบข้อมูลชื่อจริงและนามสกุลของใครก็ได้ จะได้เพศของคนนั้นค่าเดียว อย่างเชนหยิบ “สมชาย ใจดี” มา สิ่งที่ได้คือเพศ “ชาย” ตัวเดียวเช่นกัน ซึ่งก็จะเขียนได้ว่า {ชื่อจริง, นามสกุล}→เพศ สังเกตว่าตัวตาม ไม่ได้เป็นส่วนหนึ่งของตัวตั้ง
ฟังก์ชันนอลดีเพนเดนซี บางส่วน/เต็มส่วน (Partial/Full Functional Dependencies)
จากข้อมูลการลงทะเบียนเรียนของนักศึกษาตามเทเบิ้ลด้านล่าง
| รหัสนักศึกษา | รหัสวิชา | ชื่อวิชา | วันที่ลงทะเบียน |
|---|---|---|---|
| S001 | C001 | คณิตศาสตร์ | 2008-01-01 |
| S001 | C002 | วิทยาศาสตร์ | 2008-01-02 |
| S002 | C001 | คณิตศาสตร์ | 2008-01-03 |
| S002 | C002 | วิทยาศาสตร์ | 2008-01-01 |
| S003 | C001 | คณิตศาสตร์ | 2008-01-02 |
ฟังก์ชันนอลดีเพนเดนซีเป็นบางส่วนหรือเต็มส่วน เป็นความสัมพันธ์ของตัวตั้งซึ่งมักเป็นเคนดิเดทคีย์กับตัวตามซึ่งไม่ได้เป็นส่วนหนึ่งเคนดิเดทคีย์ ฉะนั้น ต้องหาเคนดิเดทคีย์จากข้อมูลตัวอย่างเสียก่อน ซึ่งก็สามารถเป็นไปได้หลายตัว เช่น {รหัสนักศึกษา, รหัสวิชา}, {รหัสนักศึกษา, ชื่อวิชา}, {รหัสนักศึกษา, วันที่ลงทะเบียน}, {รหัสวิชา, วันที่ลงทะเบียน} ซึ่งผู้เขียนขอสนใจเฉพาะ {รหัสนักศึกษา, รหัสวิชา}
โดยธรรมชาติของเคนดิเดทคีย์ มันเป็นฟังก์ชันนอลดีเพนเดนซีไม่ธรรมดาของตัวตาม กล่าวคือ {รหัสนักศึกษา, รหัสวิชา}→ชื่อวิชา และ {รหัสนักศึกษา, รหัสวิชา}→วันที่ลงทะเบียน แต่ถ้าตัวตามยังสามารถตาม”บางส่วน”ของตัวตั้งคือเคนดิเดทคีย์ได้ มันจะเป็นฟังก์ชันนอลดีเพนเดนซีบางส่วน อย่างในตัวอย่างนี้ ชื่อวิชา ไม่จำเป็นต้องตามเคนดิเดทคีย์{รหัสนักศึกษา, รหัสวิชา}เพียงอย่างเดียว แต่มันยังตาม รหัสวิชา ตัวเดียวก็ได้ กล่าวคือ {รหัสนักศึกษา, รหัสวิชา}→ชื่อวิชา และ รหัสวิชา→ชื่อวิชา (หยิบรหัสวิชา C001 ได้ชื่อวิชาคณิตศาสตร์ตัวเดียว หยิบ C002 ได้วิทยาศาสตร์ตัวเดียว) ด้วยเหตุที่ชื่อวิชา ตามได้ทั้งเคนดิเดทคีย์ ({รหัสนักศึกษา, รหัสวิชา}) และบางส่วนของเคนดิเดทคีย์ (ชื่อวิชา) ด้วยเหตุนี้ รหัสวิชา→ชื่อวิชา จึงเป็นฟังก์ชันนอลดีเพนเดนซีบางส่วน
ส่วนคอลัมน์อื่นใดที่ไม่มีเหตุการณ์แบบข้างต้น จะจัดว่าเป็นฟังก์ชันนอลดีเพนเดนซีเต็มส่วน เช่น วันที่ลงทะเบียนจะตามเคนดิเดทเพียงอย่างเดียว ฉะนั้น {รหัสนักศึกษา, รหัสวิชา}→วันที่ลงทะเบียน จึงเป็นฟังก์ชันนอลดีเพนเดนซีเต็มส่วน
