Professional Documents
Culture Documents
בסיסי נתונים 1 sql - dsd - 276287
בסיסי נתונים 1 sql - dsd - 276287
מודל DSD
תרשים מבנה נתונים
נכיר תרשים הנקרא תרשים מבנה נתונים ( ,)Data Structure Diagram – DSDשהוא תרשים לוגי ,המציג את
הטבלאות כפי שיופיעו במסד הנתונים .בתרשים יופיעו הטבלאות ,השדות ,המפתחות והקשרים .הוא מכונה גם לעיתים
"תרשים קשרי גומלין".
•טבלה מסומנת בתרשים DSDבתור מלבן.
•השדות של הטבלה כתובים בתוך המלבן ,אחת מתחת לשנייה.
•המפתח של המחלקה מסומן גם כן בתוך המלבן ,אבל בחלקו העליון ,מעל לקו מפריד או סימון מילולי.
•לדוגמא:
קשר
קשר בין טבלאות מיוצג על ידי קו המחבר את הטבלאות ,הנוגע בשני הצדדים בשדות היוצרים את הקשר .לדוגמא:
יחיד לרבים
•קו שנכנס לתוך טבלה ומתפצל ל 3-חלקים מציין "רבים" ,בעוד שקו רגיל שנכנס לתוך מחלקה מציין "יחיד" .מכך אנו
לומדים שהקשר בין מגמות לתלמידים הוא יחיד לרבים ( .)N:1לעיתים מציינים זאת בצורה אחרת ,על-ידי הוספת הסימן
"אינסוף" ליד הקו הנכנס לטבלה לציון "רבים" ,והוספת הסימן " "1ליד הקו הנכנס טבלה לציון "יחיד".
•מדוע הוספנו לטבלת תלמידים את השדה "קוד מגמה"?
•תשובה :על מנת לאפשר למסד הנתונים ליצור את הקשר בין שתי הטבלאות .שדה כמו "קוד מגמה" נקרא מפתח זר
( .)Foreign Keyמה הכוונה? הוא מהווה מפתח ראשי בטבלה אחת (טבלת מגמות) ושדה "רגיל" בטבלה שנייה (טבלת
תלמידים).
יחיד לרבים -המשך
• מדוע בחרנו דווקא להוסיף את "קוד מגמה" לטבלת תלמידים ,ולא להוסיף את "קוד תלמיד" לטבלת מגמות?
• נניח והיינו מוסיפים את השדה "קוד תלמיד" לטבלת מגמות .איזו בעיה הייתה מתעוררת? לא היינו יודעים באיזה
תלמיד מדובר (מכיוון שיש תלמידים רבים הקשורים למגמה אחת) ,ולכן היה עלינו להוסיף "קוד מגמה" לטבלת
תלמידים (כאן אין בעיה ,מכיוון שכל תלמיד קשור למגמה אחת בלבד).
•נסכם :כאשר אנחנו רוצים לממש קשר יחיד לרבים במסד נתונים טבלאי ,מוסיפים את המפתח של הטבלה שהכניסה
אליה היא "יחיד" ,אל תוך הטבלה שהכניסה אליה היא "רבים".
יחיד ליחיד
•כיצד ננהג כאשר אנחנו רוצים לממש קשר ( 1:1יחיד ליחיד)? במקרה כזה ,נבחר בצורה שרירותית את המפתח של
אחת הטבלאות ,ונוסיף אותו לטבלה השנייה כמפתח זר (זה לא משנה באיזו טבלה בוחרים).
רבים לרבים
•כעת ,מה לגבי קשר רבים לרבים? ()M:N
• כאשר רוצים לממש קשר רבים לרבים בין שתי טבלאות ,מוסיפים טבלה שלישית הנקראת טבלת קשר .המפתח של
טבלת קשר מורכב מצירוף המפתח של שתי הטבלאות האחרות ,וטבלת הקשר קשורה בקשרי "יחיד לרבים" אל שתי
הטבלאות האחרות.
דוגמא
• יש לתכנן מסד נתונים טבלאי המטפל במלאי מוצרים בחנות ובהזמנת מוצרים .בהזמנה אחת ניתן להזמין פריטים רבים,
וכל פריט יכול להיות מוזמן פעמים רבות .עבור כל פריט יש לשמור את קוד הפריט ,המחיר ליחידה ואת הכמות
הנוכחית שלו במלאי .עבור כל הזמנה יש לשמור את מספר ההזמנה ,תאריך ההזמנה ,קוד הספק (ממנו מזמינים את
ההזמנה) ,וכן את הקודים והכמויות של כל הפריטים המופיעים בהזמנה .0
תרגיל
נתונה טבלה בשם הזמנות המכילה את התכונות הבאות:
הזמנות (מספר הזמנה ,מספר פריט ,תאריך הזמנה ,מספר ספק ,שם ספק ,כתובת הספק ,קוד מחלקה מזמינה ,שם
מחלקה מזמינה ,תיאור פריט ,כמות מוזמנת ,מחיר פריט).
נרמל את הטבלה ושרטט תרשים מבנה נתונים ( )DSDהמתאימים לבעיה.
•פתרון :המפתח העיקרי של הטבלה הוא הצירוף של השדות "מספר הזמנה" עם "מספר פריט" .נשרטט את תרשים
התלויות הפונקציונליות המתאים:
תאריך שם
הזמנה ספק
המשך פתרון
• ניתן לראות בבירור שמחלקה זו אינה במצב תקין כיוון שלא כל השדות תלויים תלות פונקציונלית מלאה במפתח,
וישנם שדות שאינם כלולים במפתח ומגדירים בכל זאת שדות אחרים) .לכן יש לפרקה למספר מחלקות:
•פריטים (מספר פריט ,תיאור פריט)
•מחלקות (קוד מחלקה ,שם מחלקה)
•ספקים (מספר ספק ,שם ספק ,כתובת ספק)
•הזמנות (מספר הזמנה ,תאריך הזמנה ,מספר ספק ,קוד מחלקה)
•פריטים בהזמנה (מספר הזמנה ,מספר פריט ,כמות מוזמנת ,מחיר פריט)
המשך פתרון
•כעת נשרטט תרשים מבנה נתונים ( )Data Structure Diagram – DSDהמתאים לבעיה: