Website Icon

מודלי נתונים: השוואה בין MongoDB ל-SQL

Two cubes with SQL database and MongoDB leaf logos, surrounded by floating blue spheres.

מה הוא מודל נתונים?

מודל נתונים הוא האופן בו אנחנו בונים את המידע שלנו ב-Database. אנחנו צריכים לסדר את המידע בצורה ההגיונית והנכונה ביותר, כך שנוכל לנהל את הנתונים בצורה איכותית ומסודרת, ובכך נוכל לשפר את הגמישות של ה-Database ואת מהירות השאילתות.

מודל נתונים יכול להתחלק לשלושה חלקים:

  • יחיד-ליחיד One-to-One:

    זהו מבנה אופטימלי כאשר ישנם נתונים שקשורים לישות מסוימת, כמו אדם. למשל, ההיסטוריה הרפואית של מטופל. פרטי ההיסטוריה הרפואית שלי שונים ממטופלים אחרים (תרופות, תורים, ניתוחים וכו'); במילים אחרות, ההיסטוריה הרפואית שלי קשורה אליי באופן פרטני, ולכן גם השמירה שלהם במסד הנתונים תהיה ביחד. ב-MongoDB, השיטה שבה מאחסנים מידע בצורה הזו נקראת Embedded Document. אך במסדי נתונים מבוססי SQL, אנחנו מפצלים את הנתונים לטבלאות שונות וזה נקרא Normalization.

  • יחיד-לרבים One-to-Many:

    זהו מבנה אופטימלי כאשר ישנם נתונים שקשורים לישות מסוימת, כמו אדם. למשל, לאדם אחד יכולים להיות מספר כרטיסי אשראי, וכרטיסי אשראי רבים יכולים להיות שייכים לאדם אחד. אך האם כרטיס אחד יכול להיות משויך למספר אנשים? התשובה תלויה בצורך העסקי שלכם. כלומר, אם כל כרטיס שייך לאדם אחד בלבד, מדובר ביחס יחיד-ליחיד, ואז נשתמש ב-Embedded Document ב-MongoDB או ב-Normalization במסדי נתונים של SQL.

    אבל אם כרטיס אשראי אחד יכול להיות משויך למספר אנשים, מדובר ביחס של יחיד-לרבים, ואז נשתמש ב-Referenced Documents ב-MongoDB או בטבלת מקשרת (Join Table) ב-SQL. אז כשאנחנו מסתכלים על מודל נתונים, זה לא משנה אם אנחנו משתמשים ב-SQL או NoSQL, אנחנו צריכים להסתכל על דוגמאות מהחיים האמתיים ועל מטרת העסק כדי לקבל מודל נתונים מדויק וטוב יותר.

  • רבים-לרבים Many-to-Many:

    כפי שאנו רואים בחיי היום יום, ישנם מקרים בהם ישות אחת יכולה להיות מקושרת לישויות רבות ולהיפך. למשל, לקוח אחד יכול לרכוש מספר מוצרים, בזמן שמוצר אחד יכול להיות מבוקש על ידי מספר לקוחות. באותו אופן, מחבר אחד יכול לכתוב מספר ספרים, וספר מסוים יכול להיות מאת מחברים שונים. במקרים הללו, כאשר מדובר ביחסים של רבים-אל-רבים, נשתמש ב-Referenced Documents ב-MongoDB או בטבלת מקשרת (Join Table) ב-SQL. ולמה זה לא יחיד ליחיד לדוגמה? כי המוצר לא שייך ספציפית לאדם מסוים, אלא להרבה בני אדם.