Functional dependency (การอ้างอิงเชิงฟังก์ชัน) ในฐานข้อมูลบังคับชุดข้อจำกัด (constraints) ระหว่างแอตทริบิวต์ (attributes) เกิดขึ้นเมื่อแอตทริบิวต์หนึ่งใน relation (ความสัมพันธ์) กำหนดค่าแอตทริบิวต์อีกตัวหนึ่งได้อย่างเดียว (uniquely determines) สามารถเขียนได้เป็น A → B ซึ่งหมายถึง "B อ้างอิงเชิงฟังก์ชันต่อ A" เรียกอีกอย่างว่า database dependency
ในความสัมพันธ์นี้ A กำหนดค่าของ B ในขณะที่ B ขึ้นอยู่กับ A
ทำไม Functional Dependency จึงสำคัญในการออกแบบฐานข้อมูล
Functional dependency ช่วยให้มั่นใจได้ว่าข้อมูลถูกต้อง (validity) พิจารณาตาราง Employees ที่แสดงลักษณะต่างๆ รวมถึงหมายเลขประกันสังคม (SSN), ชื่อ, วันเกิด, ที่อยู่ และอื่นๆ
แอตทริบิวต์ SSN จะกำหนดค่าของชื่อ วันเกิด ที่อยู่ และอาจมีค่าอื่นๆ เนื่องจากหมายเลขประกันสังคมเป็นค่าเฉพาะตัว (unique) ในขณะที่ชื่อ วันเกิด หรือที่อยู่ อาจไม่เป็นค่าเฉพาะตัว เราสามารถเขียนได้ดังนี้:
SSN → name, date of birth, address
ดังนั้น ชื่อ วันเกิด และที่อยู่ อ้างอิงเชิงฟังก์ชันต่อ SSN อย่างไรก็ ข้อความย้อนกลับ (name → SSN) ไม่เป็นจริง เนื่องจากพนักงานมากกว่าหนึ่งคนอาจมีชื่อเหมือนกัน แต่จะไม่มี SSN เหมือนกันเลย กล่าวอีกอย่าง ถ้าเรารู้ค่าของแอตทริบิวต์ SSN เราสามารถหาค่าของ name, date of birth และ address ได้ แต่ถ้ารู้แค่ค่า name อย่างเดียว เราไม่สามารถระบุ SSN ได้
ด้านซ้ายของ functional dependency สามารถมีมากกว่าหนึ่งแอตทริบิวต์ได้ สมมติเรามีธุรกิจที่มีหลายสาขา เราอาจมีตาราง Employee ด้วยแอตทริบิวต์ employee, title, department, location และ manager
พนักงานกำหนดสถานที่ที่เขาทำงาน ดังนั้นจึงมีการอ้างอิง:
employee → location
แต่สถานที่หนึ่งอาจมีผู้จัดการมากกว่าหนึ่งคน ดังนั้น employee และ department ร่วมกันกำหนด manager:
employee, department → manager
Functional Dependency และ Normalization
Functional dependency มีส่วนช่วยให้เกิดสิ่งที่เรียกว่า database normalization (การปรับปกติฐานข้อมูล) ซึ่งรับรองความสมบูรณ์ของข้อมูล (data integrity) และลดความซ้ำซ้อนของข้อมูล (data redundancies) โดยไม่มี normalization ไม่มีการรับประกันว่าข้อมูลในฐานข้อมูลจะถูกต้องและน่าเชื่อถือได้