none
תיכנון מסד נתונים RRS feed

  • שאלה

  • שלום לכולם,

    יש לי שאלה בנוגע לתיכנון מסד נתונים מבחינת יעילות ותחזוקה, אני עובדת עם  (query , sp) SQL אבל כמעט ולא תיכננתי טבלאות.

    קצת רקע: אני כותבת תוכנה לניהול ציוני תלמידים הכולל  אפשרות ליצירת דוח שבועי לכיתה והצגת דוח חודשי לתלמיד.

    כל דוח שבועי יראה בערך כך:  

    כיתה X

    תלמיד    | מקצוע 1 | מקצוע 2 | מקצוע 3 ......

    תלמיד A | ציון       |  ציון      | ציון

    תלמיד B | ציון       |  ציון      | ציון

    דוח חודשי יראה בערך אותו דבר , רק בעמודת התלמידים יופיעו  תאריכים.

    חשבתי על 2 אפשרויות לתכנון הטבלאות הקשורות לדוחות:

    אפשרות 1)  ליצור 5 טבלאות  1. טבלת דוחות 2. טבלת תלמידים לכל דוח 3. טבלת מקצועות לכל תלמיד, טבלת רבים לרבים בין טבלאות 1 ו2 וטבלת רבים לרבים בין טבלאות 2 ו3

    להלן שרטוט להמחשת הקשרים בין הטבלאות:

     

    אפשרות 2 ) ליצור 3 טבלאות  1. טבלת דוחות לתלמיד 2. טבלת מקצועות לכל דוח 3. טבלת רבים לרבים בין טבלאות 1 ו2. בטבלת תלמידים יהיה מפתח זר לטבלה 1

    נ.ב. הגישה  למסד הנתונים יתבצע באמצעות Entity Framework

    לפי האפשרות ה1 הגישה לרשומות מתבצע בצורה מהירה ללא צורך בהרבה סינונים

    השאלה שלי - האם מבחינת יעילות ותחזוקה עדיף ליצור מסד נתונים עם כמה שפחות טבלאות ויותר סינונים או לא משנה כמה טבלאות ?

    או האם יש אפשרות שונה יעילה יותר לתכנון הטבלאות ?

    אשמח לתגובה ותודה מראש!!

     



    • נערך על-ידי lea_b יום חמישי 28 ינואר 2016 20:10
    יום חמישי 28 ינואר 2016 20:05

כל התגובות

  • אהלן

    >> יש לי שאלה בנוגע לתיכנון מסד נתונים מבחינת יעילות ותחזוקה, אני עובדת עם  (query , sp) SQL אבל כמעט ולא תיכננתי טבלאות.

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

    אני מאוד ממליץ לך להציץ בשני תגובות שכתבתי בפורום האנגלי בנושא דומה כדי להבין עד כמה הנושא מורכב גם שלאלה שניראית פשוטה כביכול:

    https://social.msdn.microsoft.com/Forums/he-IL/fe112a97-97c6-4167-852f-73b5457a7bb7/fee-management-system-for-school?forum=sqlgetstarted

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/08c7315e-f5e5-4261-beed-5c471ec397c7/tables-creation?forum=transactsql

    שלב ראשון: אנא נסי לאתר את כל היישויות שיש לך במערכת בהתאם להסבר בקישורים מעל

    שלב שני: נסי להבין את הקשרים בין היישויות השונות שיש לך במערכת

    עד לכאן אין קשר ישיר למסד הנתונים. פרסמי תשובות עם הכיוון שלך :-)

    עתה בתקווה שעברת על השרשורים הקודמים לעומק אפשר לעבור לכמה נקודות הקשורות לתכנון הנוכחי:

    >> ניהול ציוני תלמידים

    3 מילים שמרזמים כבר על 3 יישויות :-)

    * ניהול: מי מנהל את המערכת? כיצד את מבצעת פעולות במערכת?
    ברור שהמערכת צריכה ממשק משתמשים (עברי על הקישורים מעל)

    * ציוני: ציון הוא ערך של משהו... מה יישות שמקבלת ציון? בדרך כלל "מבחן" או "איכות" או "מוצר" או "מקצוע"
    תמיד נסי לתכנן את המערכת כך שתהיה כמה שיותר גמישה. אין חשיבות מה מקבל את הציון אבל ברור שמשהו יקבל ציון והמשהו הזה הוא יישות entity.

    היום את רוצה להישתמש במערכת לשם ציונים לפי מקצוע, אבל מחר תחליטי לפתח מערכת עם ציונים לפי בחינה והציון של המקצוע יהיה רק חישבו כלשהו... ומה אם תחליטי להכין מערכת דירוג תלמידים או אולי מערכת דירוג מורים?!? לכן בואי לא נגביל עצמנו ונדבר על "מוצר".

    * תלמידים: כיצד מוכנסים התלמידים למערכת? האם את צריכה את המידע על התלמידים?!? ככל הנראה שכן. לכן התלמידים הם בברור יישות נוספת.

    >> בואי נקפוץ רגע לשלב השני המוסבר בקישורים מעל: הבנה של המשמשות של היישויות שלנו והשימושים במערכת שלנו.

    >> השאלה שלי - האם מבחינת יעילות ותחזוקה עדיף ליצור מסד נתונים עם כמה שפחות טבלאות ויותר סינונים או לא משנה כמה טבלאות ?

    הדרך היעילה ביותר בדרך כלל בעבודה עם מודל האובייטים הוא לא לעבוד עם מסדי נתונים טבלאיים אלא מסדי נתונים מסתכיים כמו mongoDB השימוש במסדי הנתונים הטבלאיי נועד בעיקר ליעילות הפיתוח והתחזוקה ולא ליעילות שליפת הנתונים. שליפה או הכנסת נתונים. מסדי נתונים טבלאיים מחייבים שימוש בחיבור טבלאות בדרך כלל על מנת לקבל את התוצאה המבוקדת (שימוש במפתחות חיצוניים על נמנת לבצע פעולות JOIN).

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

    https://msdn.microsoft.com/en-us/library/ms143432.aspx?f=255&MSPPError=-2147217396

    * באופן כללי חלוקה לטבלאות נועדה ליצור מיטוב. כמובן שהחלוקה צריכה להיות לוגית וקשורה לדרך בה עובדים עם המידע. חלוקה למחיצות (לא ניתן בכל הגרסאות) נועדה לתת מענה לטבלאות גדולות למשל.

    * סינונים שמגובים באינדוקס נכון לא אמורים להכביד על המערכת יותר מדי. הגעה למידע מסויים לא אמור להעשות על ידי סריקת כל המידע אלא על ידי גישה "ישירה" דרך האינדקס. תחשבי על אינדקס בספר לימוד. מה ההבדל בזמן שיקח לך להגיע לעמוד 3 בספר עם 100 עמודים או בספר עם 4354352345 עמודים? ההבדל לא יהיה גדול מכיוון שאת יודעת שאת מחפשת מידע שנמצא בעמוד מסויים. האינדקס צריך לעזור לשרת להגיע למידע.

    >> טבלת מקצועות לכל תלמיד... טבלת תלמידים לכל דוח... 

    אני לא מצליח להבין את התיאור שלך. למשל מה זה טבלת מקצועות לכל תלמיד? למה לא טבלת מקצועות אחת. מקצוע הוא יישות וצריך להיות בטבלה מתאימה. בואי נתחיל מההתחלה בתהליך ישל תכנון כפי שהסברתי בהתחלה.

    לפני הכל צריך להבין את התהליך של השימוש במערכת. אנא נסי להחיל משלב זה ולתאר לנו את הממשק GUI שאתה רוצה הלישתמש שלב אחרי שלב. רק אחרי שאפליקציה מובנת, נוכל להכין את מסד הנתונים בהתאם


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום ראשון 31 ינואר 2016 23:02
    מנחה דיון