לדלג לתוכן

1.4 מבני נתונים א רלציונים תרגול

תרגול: הרחבת מערכת TRIP עם מסד נתונים א־רלציוני (MongoDB)

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

1. מעבר ממבנה רלציוני למבנה מבוסס מסמכים

  • הגדירו Collection בשם trips במסד MongoDB.
  • כל מסמך טיול צריך להכיל:
    • שם הטיול
    • כמות מטיילים
    • רשימת מלונות
    • רשימת טיסות
  • החליטו האם המלונות והטיסות נשמרים:
    • כ־Embedded Documents (מקוננים בתוך הטיול)
    • או כ־References (שמירת IDs בלבד)

2. עבודה עם Embedded Documents

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

3. עדכונים ומחיקות

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

4. שאילתות נפוצות

  • החזירו את כל הטיולים:
    • עם יותר מ־X מטיילים
    • שמכילים מלון בדירוג 5 כוכבים
  • החזירו את כל הטיולים שמכילים טיסה ליעד מסוים.

5. FastAPI + MongoDB

  • עדכנו את הcontroller-ים ב־FastAPI לעבודה עם MongoDB:
    • יצירת טיול
    • שליפת טיול לפי ID
    • עדכון טיול
    • מחיקת טיול

6. חשיבה ארכיטקטונית (ללא קוד)

  • הסבירו:
    • מתי Embedded עדיף על References
    • אילו בעיות עלולות להופיע כשהמערכת גדלה
    • אילו חלקים במערכת הייתם שומרים ב־SQL ואילו ב־NoSQL