מה זו סכמה במסדי נתונים ?

אני שומע ומדבר הרבה עם אנשים אשר שומעים הרבה על NoSQL, אבל לא מבינים כל כך מה הכוונה של "סכמות". אז החלטתי לכתוב את הפוסט הזה בשבילם.

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

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

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

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

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

6 מחשבות על “מה זו סכמה במסדי נתונים ?

  1. ik_5 מאת

    nosql זה לא סוג של מסד נתונים אלא גישה שאומרת לא להשתמש ב SQL ובסכמות.

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

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

  2. צפריר כהן

    כתבת על מה אין ב־noSQL. אבל מה יש שם?

    noSQL לא אומר לי יותר מדי. יש סוגים רבים של מסדי נתונים "שאינם SQL". לדוגמה: ב־Berkeley DB" כל מה שיש לך הוא "מילון", כלומר: מיפוי יעיל ממפתח לערך. זה יכול לספק תשתית בסיסית לתוכנית שלך. rpm, לדוגמה, השתמש בזה במשך זמן רב.

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

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

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

    יש אולי נתונים שלא ממש מתאימים למודל הזה. יש, לדוגמה, "object oriented databases", כשהטענה היא שאובייקטים הם יצור שלא מתאים לטבלאות, בגלל הירושה. יש לציין שלמרות שרוב התוכניתנים רגילים לחשוב על אובייקטים, הרי שהסוג הזה של מסדי נתונים לא הפך להיות פופולרי במיוחד.

    סוג נוסף של מסדי נתונים שנעשה פופולרי לאחרונה הוא "מסדי נתונים למסמכים". CouchDB שייך לתחום הזה. מעניין אותם להסתכל על מסמך כעל בעל אוסף של תכונות. כמוכן במקרים רבים הם ינסו לממש סוג כלשהו של בקרת גרסאות.

    (לסיכום: לא. לא עניתי לשאלה שהצבתי בשורה הראשונה)

  3. ik_5 מאת

    ב NoSQL יש לך מסד נתונים. זו גישה ולא סוג של מסד נתונים.
    זה כמו שתשאל מה יש במכונית ? vהתשובה היא אמצעי היגוי, גלגלים ומנוע. כל השאר משתנה בהתאם לסוג המכונית, השימוש שלה וכו' …

    סיפקתי הרבה דוגמאות מה זה יכול להיות (בפוסט המקורי על NoSQL).

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

  4. שי

    ל־a:

    זה לא שאתה לא יכול לדעת מראש מה סוג הנתונים; רק שאין לך הבטחות לכך מהמערכת. מה שקורה (בתיאוריה, לפחות) הוא שאתה מבצע הכנסות ושאילתות בצורה כזו שהנתונים שתקבל יהיו מהסוגים שתצפה להם; זה די דומה, מהבחינה הזו, לשפות תכנות עם סוגים דינאמיים של משתנים. בבסיס־נתונים עם סכמה, אם תנסה להכניס שם־משפחה לשדה של תאריך, תחטוף שגיאה; בכזה בלי סכמה, השגיאה תתגלה רק כשתנסה לעבוד עם הרשומה אחר־כך. בהעדר סכמה, גם קשה יותר לעשות שינויים במבנה הרשומות, וקשה יותר לשמור על כל מיני סוגים אחרים של תקינות של הנתונים (למשל referential integrity).

    היתרון הגדול של כל ה־NoSql האלה הוא במה שקשור לביזור: הויתור על אכיפה של תקינות מאפשר עבודה מקבילית יותר יעילה; אפשר להגיד שזה בסיס נתונים שפשוט "מחפף", ואז הוא מספיק יותר. כל עוד לא מגיעים לכמויות עצומות של נתונים, ההתלהבות מבסיסי הנתונים האלה היא בעיקר ביטוי של בורות ועצלות, כי ה־trade-off שהם מציעים ("קלות כתיבה" לעומת ויתור על איכות של נתונים) הוא כמעט תמיד לרעת המשתמש.

  5. ik_5 מאת

    אישית אני חושב שלכל דבר יש את השימוש המתאים לו.
    למשל MongoDB מאפשר לך לעשות הרבה מאוד דברים שמזכירים SQL, ומצד שני להיות מבוזר בהרבה מקומות עם תחביר של JSON (הוא שומר אותו בצורה בינארית).

    ברגע שיודעים להתאים את הכלי למצב שאותו צריכים, אז אין trade-off. הבעיה היא שבד"כ מה שקורה זה שכולם מתחילים להשתמש בכלי אחד ואז "all hell break loose". וזו הבעיה של השוק, ולפחות 60 אם לא 80 אחוז מהפוסטים שלי בשלוש השנים האחרונות היו בנושא של לנסות לבחור את הכלי המתאים למצב המתאים, אבל הרוב הגדול של הקוראים מתווכחים ומאוד רוצים להמשיך להשתמש בכלי אחד להכל…

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s