שאלה

yael800

New member
שאלה

נשאלתי שאלה: איך יראה המבנה נתונים של "פיצה דמו" (לא מבחינת טבלת סניפים...), מבחינת הזמנה של פיצה עם תוספת זיתים וגם תוספת פיטריות למשל. מה הצורה הטובה ביותר לשמור את נתוני ההזמנה? המון תודה מראש, יעל.
 

itaym02

New member
מה מספר התוספות המקסימלי?

חוקי הנירמול האקדמיים דורשים שתי טבלאות, באחת פרטי הזמנה כליים ובשנייה פרוט. אך מכוון שפיצה זו דוגמה למספר ידוע מראש של מקסימום תוספות אפשריות מראש הייתי נוקט בשיטה אחרת של עמודה בהזמנה העיקרית עבור כל תוספת (ז"א אם אפשר מקסימום 5 תוספות-שיהיו 5 עמודות). אם לא סגורים ב100% על מספר התוספות, או שיש פרמטרים נוספים שעלולים להשתנות, או שמדובר בתרגיל, אז לחלק לשני טבלאות. טבלה א: מזהה הזמנה פרטי הזמנה בלה בלה טבלה ב מזהה הזמנה מזהה תוספת קישור של אחד (טבלה א) לרבים (טבלה ב).
 

yael800

New member
שכחתי

נניח שבאמת יש את 2 הטבלאות הנ"ל, (אין מספר מוגבל של תוספות), איך אבדיל בין הזמנה של פיצה עם תוספת זיתים וגם פיצה בתוספת פטריות באותה הזמנה, לבין פיצה עם תוספת זיתים+פטריות מעורב? טבלה א: מזהה הזמנה פרטי הזמנה בלה בלה טבלה ב מזהה הזמנה מזהה תוספת
 

or25950

New member
במקרה של הזמנה של יותר מפיצה אחת

יהיו יותר משורה אחת בהזמנה ובטבלה השניה המזהה יהיה מספר הזמנה+מספר שורה
 

yael800

New member
תודה, אז זה כך?

כלומר כך? טבלה א: -------- מס שורה_הזמנה - KP מזהה הזמנה - KP פרטי הזמנה בלה בלה טבלה ב: -------- מזהה הזמנה - PK מס שורה_הזמנה - FK מזהה תוספת והשאילתא לשליפת הפריטים של ההזמנה תהיה כך? (סליחה על העברית..)
Select מזהה תוספת FROM tbl_B WHERE tbl_B.מס שורה_הזמנה = tbl_A.מס שורה_הזמנה AND tbl_B.מזהה הזמנה = tbl_A.מזהה הזמנה​
 

or25950

New member
ככה

מספר הזמנה ומספר שורה הם מפתח ראשי בשתי הטבלאות ומספר התוספת הוא חלק מהמפתח הראשי בטבלת התוספות.
SELECT Tbl_B.Add_n, Tbl_B.Order_n, Tbl_B.Line_n FROM Tbl_A INNER JOIN Tbl_B ON (Tbl_A.Line_n = Tbl_B.Line_n) AND (Tbl_A.Order_n = Tbl_B.Order_n) WHERE (((Tbl_B.Order_n)=YourOrderNumb) AND ((Tbl_B.Line_n)=YourLineNumb));​
 

or25950

New member
תיקון למקרה שיש פיצה ללא תוספות

SELECT Tbl_A.Order_n, Tbl_B.Add_n, Tbl_A.Line_n FROM Tbl_A LEFT JOIN Tbl_B ON (Tbl_A.Line_n = Tbl_B.Line_n) AND (Tbl_A.Order_n = Tbl_B.Order_n) WHERE (((Tbl_A.Order_n)=YourOrderNumb) AND ((Tbl_A.Line_n)=YourLineNumb));​
 
למעלה