התייעצות בתכנון מסד נתונים עבור מאגר תורני
-
התייעצות בבניית מסד נתונים עבור מאגר תורני
לבינתיים זהו המבנה שחשבתי עליו ביקשתי מ-gpt שיצייר את זה יפה
אשמח לקבל משוב ועצות לשיפור.
הקושי שלי בעיקר הוא מה העצה הכי טובה בשביל מסד שבנוי בצורה היררכית. -
@pcinfogmach
אוקיי מצאתי לכאורה את הדרך האופטימלית (כלומר מודל שימושי כאשר יש צורך לשאול שאילתות על בסיסי נתונים המכילים מבנים מסודרים בצורה היררכית). בכתבה זו (החלק השני):
https://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
הרעיון נקרא :The Nested Set Model
המודל ההיררכי של ה-Nested Set מבוסס על שימוש בטווחי מספרים לתיאור מבנה היררכי בצורה שטוחה המתאימה למסד sql. כל אלמנט במבנה מוגדר על ידי שני מספרים: ערך "שמאל" (Left) וערך "ימין" (Right), המייצגים את גבולות הטווח שלו בתוך המבנה.
לדוגמה, נניח שיש לנו את המבנה הבא:
ספר: כותרת הספר פרק 1 פסוק 1 פסוק 2 פרק 2 פסוק 1
אזי הטווח של הספר כולו מכסה את כל הרכיבים שבתוכו, והטווח של כל תת-רכיב נמצא בתוך הטווח של הרכיב שמעליו. כך למשל:
הספר כולו: טווח 1-12 פרק 1: טווח 2-7 פסוק 1: טווח 3-4 פסוק 2: טווח 5-6 פרק 2: טווח 8-11 פסוק 1: טווח 9-10
להלן הייצוג הטבלאי של המסד:
העקרונות המרכזיים במודל זה:
-
טווח של כל רכיב כולל את הטווחים של כל תתי-הרכיבים שבתוכו.
-
וממילא טווחים שאינם חופפים מצביעים על כך שהרכיבים אינם קשורים ישירות במבנה.
כך בעצם מצד אחד ניתן לעשות שאילתות יעילות ולשלוף בקלות את כל תתי-הפריטים של פריט נתון באמצעות טווח המספרים.
ומאידך המודל מתאר את ההיררכיה בצורה ישירה וברורה.חסרונות המודל:
מורכבות תחזוקה: הוספה או הסרה של רכיבים דורשת עדכון של הטווחים לכל שאר הרכיבים במבנה.תמונות להמחשה מתוך הכתבה הנ"ל (מקווה שלא תסקלו אותי על זה שכתוב פה טלויזיה עשיתי העתק הדבק איתכם הסליחה).
-
-
למרות המבנה המבטיח אני עדיין תוהה לעצמי מה הדרך הכי טובה למפות מיקום מדוייק בתוך המבנה ההיררכי. למשל אם ארצה לחפש האם כתובת מדוייקת קיימת (כגון: בראשית, א, קלט - לא קיים. אבל בראשית, א, יד - קיים).
האם להוסיף עוד טור שמתאר את הכתובת המלאה או לחפש את זה בצורה היררכית על ידי שיוכים של parent - child -
@pcinfogmach אולי תוותר על מסד טבלאי ובמקום זה תשתמש במשהו שיכול לייצג עץ נתונים בצורה יותר טבעית
אולי מבנה JSON יספק לך מענה מספיק טוב -
@pcinfogmach לא הבנתי לגמרי את דבריך.
בכל מקרה, התכוונתי רק שאת מבנה העץ תשמור כמבנה JSON. תוכן הספרים אפשר לשמור בטלאות או איך שלא תרצה -
אולי נושאים אלו יעניינו אותך
https://tchumim.com/topic/1072
https://tchumim.com/topic/1047 -