On this page
מערך שיעור: MongoDB — Documents ו-Collections
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים יבינו מתי Document Database מתאים יותר מ-SQL, ויבצעו CRUD בסיסי עם MongoDB.Driver.
בסוף השיעור הסטודנטים צריכים: להסביר את ההבדל בין Collection ל-Table, לבצע Insert/Find בסיסיים, ולזהות מתי MongoDB מתאים ומתי SQL עדיף.
דגש קריטי: הימנעו מהצגת MongoDB כ"טוב יותר מ-SQL" — זה כלי שונה לבעיה שונה, לא שדרוג. הדגישו זאת מפורשות.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | הראו קטלוג מוצרים מגוון — “איך זה בטבלת SQL אחידה?” |
| הבעיה: סכמה קשיחה לא מתאימה | 15 דקות | NULL בעמודות לא-רלוונטיות, או טבלאות נפרדות לכל סוג |
| הרעיון: Document/Collection | 20 דקות | גמישות, דוגמת מוצרים שונים באותה Collection |
| BSON | 10 דקות | הרחבת JSON עם טיפוסים |
| הדגמה חיה: Insert/Find | 25 דקות | MongoDB.Driver, דמיון ל-LINQ |
| דיון: מתי מה | 10 דקות | Polyglot Persistence — לא תחרות |
| תרגול מודרך | 5 דקות | תרגיל 1 |
דגשים להעברת השיעור
- ההנחיה הכי חשובה בשיעור הזה: אל תיצרו רושם ש-NoSQL “מחליף” SQL. הציגו את שניהם ככלים משלימים לבעיות שונות — הדגישו את זה יותר מפעם אחת.
- דוגמת קטלוג המוצרים (חולצה מול מחשב) היא הכי משכנעת — ודאו שסטודנטים מבינים למה זה בעייתי בטבלת SQL אחידה לפני שמציגים את הפתרון.
- הדגמה חיה עם MongoDB.Driver בפועל (לא רק שקופיות) חשובה — הריצו Insert+Find על MongoDB אמיתי (לוקאלי או Atlas).
מושגים
Document — רשומה גמישה דמוית-JSON. Collection — קבוצת Documents, בלי סכמה אחידה מחייבת. BSON — JSON בינארי עם טיפוסים נוספים.
תרגיל חשיבה
שאלת פתיחה: “אתם מתכננים DB לחנות שמוכרת גם ביגוד וגם אלקטרוניקה. בטבלת SQL אחת, כמה עמודות NULL תהיו לכם על כל מוצר בממוצע? מה MongoDB פותר כאן?”
מהלך: תנו לסטודנטים לחשב בערך — מוצר ביגוד עם עמודות CPU/RAM ריקות, מוצר אלקטרוניקה עם Size/Color ריקות. הובילו לתובנה שזה לא רק “מכוער” — זה גם מבזבז מקום ומקשה על ולידציה הגיונית (מתי CPU ריק זה תקין ומתי זו שגיאה?).
מה המרצה מראה בסוף: הריצו Insert של שני מוצרים שונים לגמרי במבנה לאותה Collection ב-MongoDB אמיתי, ואז Find שמחזיר את שניהם — הראו שאין שום שגיאה או “התנגשות סכמה”, כי היא פשוט לא נאכפת ברמת ה-DB.