במסד נתונים יחסי, תלות מתרחשת כאשר המידע המאוחסן באותה טבלת מסד נתונים קובע באופן ייחודי מידע אחר המאוחסן באותה טבלה. תלות רבת ערכים מתרחשת כאשר נוכחות של שורה אחת או יותר בטבלה מרמזת על נוכחות של שורה אחת או יותר באותה טבלה. במילים אחרות, שתי תכונות (או עמודות) בטבלה אינן תלויות זו בזו, אך שתיהן תלויות בתכונה שלישית.
תלות מרובה ערכים מונעת את הצורה הרגילה הרביעית של הנורמליזציה. מסדי נתונים יחסיים עוקבים אחר חמש צורות רגילות המייצגות קווים מנחים לעיצוב רשומות.הם מונעים חריגות עדכון וחוסר עקביות בנתונים. הצורה הרגילה הרביעית עוסקת ביחסי רבים-לאחד במסד נתונים.
תלות פונקציונלית לעומת תלות מרובה ערכים
כדי להבין תלות רבת ערכים, כדאי לבדוק שוב מהי תלות פונקציונלית.
אם תכונה X קובעת באופן ייחודי תכונה Y, אז Y תלוי פונקציונלית ב-X. זה כתוב כ-X -> Y. לדוגמה, בטבלת התלמידים למטה, Student_Name קובע את העיקר:
Student_Name | Major |
---|---|
Ravi | היסטוריית אמנות |
Beth | Chemistry |
ניתן לכתוב את התלות הפונקציונלית הזו: Student_Name -> Major. כל Student_Name קובע בדיוק רב סרן אחד ולא יותר.
אם אתה רוצה שמסד הנתונים יעקוב גם אחר הספורט שהתלמידים האלה עוסקים, אולי תחשוב שהדרך הקלה ביותר לעשות זאת היא פשוט להוסיף עמודה נוספת שכותרתה ספורט:
Student_Name | Major | Sport |
---|---|---|
Ravi | היסטוריית אמנות | כדורגל |
Ravi | היסטוריית אמנות | כדורעף |
Ravi | היסטוריית אמנות | טניס |
Beth | Chemistry | טניס |
Beth | Chemistry | כדורגל |
הבעיה כאן היא שגם ראווי וגם בת' משחקים בכמה ענפי ספורט. יש צורך להוסיף שורה חדשה עבור כל ספורט נוסף.
טבלה זו הציגה תלות רב-ערכית מכיוון שהעיקר והספורט אינם תלויים זה בזה, אך שניהם תלויים בתלמיד. זוהי דוגמה פשוטה וניתנת לזיהוי בקלות, אך תלות מרובת ערכים עלולה להפוך לבעיה במסד נתונים גדול ומורכב.
תלות מרובה ערכים נכתבת X ->-> Y. במקרה זה:
Student_Name ->-> Major
Student_Name ->- > Sport
זה נקרא "שם_תלמיד רב-קביעתי רב-קבוע" ו-"שם_תלמיד מרובה-קביעת ספורט."
תלות מרובה ערכים תמיד דורשת לפחות שלוש תכונות מכיוון שהיא מורכבת משתי תכונות לפחות התלויות בשלישית.
תלות ונורמליזציה מרובה ערכים
טבלה עם תלות מרובה ערכים מפרה את תקן הנורמליזציה של הצורה הרגילה הרביעית מכיוון שהיא יוצרת יתירות מיותרת ויכולה לתרום לנתונים לא עקביים. כדי להעלות את זה ל-4NF, יש צורך לחלק את המידע הזה לשתי טבלאות.
לטבלה למטה יש כעת תלות פונקציונלית של Student_Name -> Major, וללא תלות מרובת ערכים:
Student_Name | Major |
---|---|
Ravi | היסטוריית אמנות |
Ravi | היסטוריית אמנות |
Ravi | היסטוריית אמנות |
Beth | Chemistry |
Beth | Chemistry |
למרות לטבלה זו יש גם תלות פונקציונלית אחת של Student_Name -> Sport:
Student_Name | Sport |
---|---|
Ravi | כדורגל |
Ravi | כדורעף |
Ravi | טניס |
Beth | טניס |
Beth | כדורגל |
הנורמליזציה מתבצעת לעתים קרובות על ידי פישוט טבלאות מורכבות כך שיכילו מידע הקשור לרעיון או לנושא בודד במקום ניסיון לגרום לטבלה בודדת להכיל יותר מדי מידע שונה.