ערכתי לאחרונה בתאריך 30.05.15 בשעה 15:37 בברכה, ShocKi
יש דרך מאוד פשוטה להבין את זה.
הרי הגדרת את המפתח הראשי של הטבלה להיות מספר הזמנה.
אם תסתכל על הסכמה שבנית אתה רואה לפי העמודות שיש מקום רק לפריט פיצה אחד.
לכן, אם תרצה להוסיף עוד אחד אתה תצטרך שתי שורות של אותו מספר הזמנה.. אבל אסור לך לעשות דבר כזה כי אז יהיה לך כפילות במפתח.יש כמה גישות לפתור כזה דבר:
1. להוסיף עמודות כלומר במקום שתהייה עמודה אחת של מגש פיצה שיהיו כמה עמודות כאלה. הפתרון הזה לא טוב כי זה מנפח את הטבלה וגם יש לו הגבלה אם נניח יהיו 2 עמודות כאלה אז תוכל במקסימום להכניס 2 פיצות, ואם תרצה 3? לא תוכל. לכן ברור שהפתרון חייב להיות ברמת השורות ולא ברמת העמודות.
2. הגישה השניה אומרת שאחרי שזיהת את הבעיה שאתה לא יכול להשתמש במפתח הזה כפי שיצרת אז פשוט תשנה את המפתח. תחשוב מה עוד אתה יכול להוסיף למפתח כדי שלא תהייה כפילות, כאן צריך פשוט להפעיל חשיבה. נניח ואולי ניקח מספר הזמנה ותאריך בתור מפתח. האם זה פותר את הבעיה? לא, כי הרי בדיוק באותה לחיצת כפתור אתה מזמין כמה מגשי פיצה ולכן התאריך הזמנה של כולם הוא אותו תאריך. אז מה אפשר לעשות? פשוט לבצע הפרדה. במקום שתהייה לך טבלה אחת שתעסוק בהזמנות - שיהיו לך 2 טבלאות שעוסקות בהזמנות. טבלה ראשונה תהייה הטבלה ה"ראשית" שתכיל מידע כללי על ההזמנה עצמה למשל: תאריך, לקוח וכו'. וטבלה שמכנית שתכיל את כל הפריטים לגבי אותה הזמנה והכמות מכל פריט.
הבעיה הזאת היא מאוד נפוצה ואם תחשוב עליה בהקשר רחב אתה תראה הרבה דוגמאות לזה. תחשוב על סופר. אתה בא כלקוח עם עגלה של מוצרים. מספר החשבונית שלך זהה לכולם. אז בטבלת חשבונית אתה תשים את מספר החשבונית, הפרטים שלך כלקוח, תאריך הקניה... ובטבלה משנית אתה תשים: מספר חשבונית, קוד פריט וכמות. זה יראה ככה:
אני מניח שהסיבה לבלבול שלך נובעת מזה שאתה חושב על 3NF. עזוב את ה 3NF בצד - קודם כל אתה בונה סכמה.. אחרי שיש לך את הסכמה שעונה על כל הדרישות אתה יכול לעשות לה נירמול. הנרמול, בהנחה שעשית אותו נכון - לא יפגע בתקינות של הסכמה. אל תעבוד בשיטה של לנרמל תוך כדי שאתה בונה את הטבלאות... זה לא חכם כשאתה לא מספיק מנוסה.
קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.