קשר גומלין של יחיד-לרבים (One To Many)
קשר זה פותר לנו את הבעיה שבה נתקלנו מקודם. הוא מאפשר לנו לגרום לכך שלכל רשומה בטבלת המשתמשים/לקוחות יהיו מספר רשומות המשויכות אליה. או, במילים אחרות – לכל משתמש יהיו מספר הזמנות.
לקשר זה קוראים קשר גומלין של "יחיד-לרבים", זאת מפני שמספר רב של רשומות יכולות להצביע על רשומה אחת יחידה.
קשר זה ניראה כך:
ואיך בעצם הטבלאות היו נראות? טבלת המשתמשים הייתה נראית כך:
שימו לב – טבלה זו אינה מצביעה על דבר. לעומת זאת טבלת ההזמנות הייתה נראית כך:
שימו לב כי טבלת ההזמנות היא זו שמצביעה על טבלת המשתמשים. לכל משתמש ישנם מספר הזמנות. לדוגמא: למשתמש Dan ישנם 3 הזמנות (רשומות 2,3,4 בטבלת ההזמנות) ולמשתמש Josh ישנה הזמנה 1 (רשומה מספר אחת בהזמנות).
קשר גומלין של רבים-לרבים (Many To Many)
קשר זה מהווה את הפתרון האידיאלי לבעיית ה"לקוח מזמין" שלנו. אם נסתכל על הקשר הקודם וננסה לחשוב לעומק נבין את מספר הבעיות הנוספות שנוצרו לנו:
- קודם כל, כל הזמנה (Order) מתארת רק מוצר אחד. מה יקרה כאשר נרצה לצור מצב שבו הזמנה אחת תוכל להכיל מספר מוצרים?
- שימו לב שכל הזמנה מכילה גם את המחיר והשם המלא של הפריט. מה יקרה כאשר מספר משתמשים ירצו להזמין iPhone 4? טבלת ההזמנה שלנו תכיל מידע החוזר על עצמו כמו, שם המוצר והמחיר שלו.
- מוכר החנות מזין מספר מוצרים ידועים מראש הנמצאים במחסן ההזמנות. כל המידע שהמוכר מזין נמצא בטבלה הנקראת "Items". טבלה זו מכילה מידע לגבי שם המוצר, המחיר שלו וה-ID שלו ונראית כך:
- כל המידע שמוזן לטבלה זו מופיע באתר החנות ומאפשר לכל משתמש להזמין את המוצר.
- מסד הנתונים שלנו יכיל טבלה הנקראת "Orders" והיא תיראה כך:
- עמודת ה-User_ID תצביע על המשתמש שאליו משוייכת ההזמנה. עמודת ה-Date תכיל את התאריך שבו המשתמש יצר את ההזמנה.
- מסד הנתונים שלנו יכיל טבלה נוספת הנקראת Items_Orders. טבלה זו מכילה רשומות לגבי כל מוצר שהמשתמש הזמין. כל רשומה בטבלה זו תצביע על אותה ההזמנה (Order) המשויכת לאותו המשתמש. טבלה זו נראית כך:
- טבלת המשתמשים (Users) תיראה בדיוק כמו בקשר הקודם. היא תכיל רק ID ואת שם המשתמש.
טבלת ה-Items_Orders נקראת "טבלת הסתעפויות". והמטרה שלה היא אחת: לממש את קשר ה"רבים-לרבים". מפני שלכל משתמש יכולות להיות מספר הזמנות, ולכל הזמנה יכולות להיות מספר מוצרים עלינו ליצור טבלת הסתעפויות אשר אחראית ליצור את ההצבעה המתאימה. טבלה זו מצביעה על שני טבלאות שונות: אחת מצביעה על הרשומה המתאימה בטבלת ההזמנות והשנייה אחראית להצביע על המוצר המתאים בטבלת המוצרים.
אם נחזור ונסתכל על הדיאגרמה נבין כי שני הבלוקים האחרונים ("Item Ordered" ו-"Item") בעצם מתארים רשומות בטבלאות Items_Orders ו-Items.
מדריך טוב
אני לא מסכים עם הכותרת שלו.
זה לא מדריך לSQL, זה יותר איך לעבוד עם SQL.
זה אותו דבר.