סכמת כוכב
במדעי המחשב, סכמת כוכב (Star Schema), המכונה גם סכמה רב-ממדית, קוביית מידע או סכמת איחוד - כוכב (Star-Join Schema) היא השיטה הפשוטה ביותר לייצוג מחסן נתונים (Data Warehouse). סכמת הכוכב מורכבת מטבלת עובדות אחת או יותר, והיא מהווה מקרה פרטי של סכמת פתית השלג, היעיל יותר עבור שאילתות פשוטות.
מודל
עריכהסכמת כוכב מסווגת מאפייני אירוע מסוים לעובדות (המיוצגות באמצעות משתנים כמותיים המכילים מידע נומרי או משתני זמן), וכן שדות המתארים מימד מסוים של מידע (למשל – "מזהה הלקוח", או "מזהה המוצר"), המאפשרים קישור בין העובדה לישויות אחרות בבסיס נתונים. העובדות עצמן מאוחסנות ברמת פירוט אחידה במרכז הכוכב, בטבלת העובדות. שדות המימד מסודרים לפי קבוצות זיקה (קבוצת שדות בעלי הקשר דומה) ומאוחסנים במספר מינימלי של טבלאות מימד. לדוגמה – סכמת כוכב עבור נתוני מזג אוויר יכולה להכיל עובדות אודות טמפרטורה, לחץ ברומטרי, מהירות הרוח ועוד. סכמה כזו תכלול גם ממדים שונים כגון: אזורים, תאריכים, פרטי החזאי המדווח וכדומה. מבנה סכמת הכוכב נועד לאפשר אופטימיזציה של קלות השימוש (של משתמש הקצה) ואת קלות ביצועי השליפה, על ידי צמצום מספר הטבלאות הנדרשות לייצוג של טרנזקציה (בדרך כלל עסקית).
מקור שמה של סכמת כוכב הוא הדמיון בין הסכמה למערכת כוכבים – מספר כוכבים בהירים במרכז (העובדות) מוקפים בכוכבים בהירים פחות (הממדים).
טבלת העובדות (Fact Table)(אנ') מרכזת את העובדות המדידות עבור אירוע מסוים ומכילה מספר רב של רשומות (שורות), על מנת לבודד את המידע לרכיבים אטומיים. ישנן גישות ששמות דגש על צמצום מספר השדות על מנת לשמור על ביצועי השליפה. מנגד, גישה אחרת גורסת כי דווקא ריבוי שדות בטבלת העובדות מאפשר ביצוע חיתוכים של עובדות, מבלי שהדבר יפגע משמעותית בביצועים.
ישנם שלושה סוגי טבלאות עובדות:
- טבלת טרנזקציות (Transaction Tables) – עובדות בנוגע לאירוע מסוים, כגון מכירת מוצר.
- טבלת תמונת מצב (Snapshot Tables) – עובדות נכונות לנקודת זמן מסוימת, למשל – נתוני חשבון בנק בסוף חודש.
- טבלת תמונת מצב מצטברת (Accumulating Snapshot Tables) – עובדות מצטברות לנקודת זמן מסוימת, למשל, סכום מכירות כולל עד לתאריך מסוים.
טבלאות ממדים (Dimension Tables)(אנ') הן בעלות מספר קטן יותר של רשומות מטבלת העובדות ומכילות שדות המאפשרים להרחיב את העובדות במימד מסוים. שדות אלו מאורגנים בטבלאות בעלות קשר קל ביניהן, כאשר בין השדות קיימת זיקה ידועה או בלתי ידועה. למשל - שדות צבע, גודל ומרקם יכולים לתאר מוצר מסוים ויכללו בטבלת מימד המוצר. טבלאות מימד יכילו לעיתים שדות שניתן היה לנרמל לטבלאות שונות (כפי שנעשה בסכמת פתית השלג). למשל - במדינות רבות ניתן למפות כתובת הכוללת עיר רחוב ומספר על פי המיקוד בלבד. בעוד שעל פי כללי הנירמול, יש להפריד תלות זו בטבלה נפרדת (בטבלה המכילה את הכתובת להשאיר רק את השדה שיוצר את התלות), בסכמת כוכב שדות אלו ימופו לטבלה אחת – טבלת מימד המיקום. בטבלאות המימד, המפתח העיקרי עשוי להיות מפתח חלופי, בדרך כלל מספר סידורי, כאשר כל מופע שלו מייצג קומבינציה של השדות המהווים את המפתח העיקרי הטבעי. בטבלת העובדות המפתח גם כן עשוי להיות תחליפי – על מנת לאפשר מצב שבו ישנן שתי רשומות זהות לגמרי, למעט ערך המפתח.
סכמת מרבה רגליים (Centipede Schema) היא סכמת כוכב המכילה מספר רב של ממדים, כאשר כל מימד מכיל מספר מועט של שדות. בעוד שסכמה כזו היא קלה יחסית לתחזוקה, שליפת המידע עשויה להיות איטית בשל הצורך באיחוד (Join) של טבלאות רבות ומקשה על השימוש בסכמה.
יתרונות
עריכהיתרונה העיקרי של סכמת כוכב היא הפשטות והמהירות בשליפת מידע רלוונטי. בשונה מבסיס נתונים מנורמל, לא נדרשים איחודים (Join) רבים בין טבלאות ולכן ביצוע השאילתא בדרך כלל יהיה מהיר יותר.
ביחס לסכמת פתית שלג, יתרונה של סכמת הכוכב הוא בפשטות בניית המודל וביצוע השאילתות. ניתן לכתוב, בצורה פשוטה, שאילתות המאחדות בין טבלת העובדות לבין מספר קטן של טבלאות ממדים. איחוד זה קל יותר בסכמת כוכב מאשר בסכמת פתית שלג כיוון שנדרש סינון על פי השדות הנדרשים לשאילתא בלבד, וכן ביצוע אגרגציה מהיר יותר.
דוגמה
עריכהנניח כי קיים בסיס נתונים המחזיק מידע לגבי מכירות של חנות, פרטי החנות והמוצר. התמונה בראש הדף מתארת את סכמת הכוכב המתאימה. עובדות אודות המכירות נשמרות בטבלת העובדות, והממדים הם: תאריך, חנות ומוצר. לכל טבלת מימד ישנו מזהה משלו, המסומן כ- ID. כל אחד ממזהים אלו מופיע בטבלת העובדות כשדה. השדה הנוסף, שאינו מזהה בטבלת העובדות – שדה "יחידה נמכרת" הוא דוגמה לשדה בעל ערך כמותי שיכול לשמש לניתוח של ביצועי הארגון. שדות שאינם מזהים בטבלאות המימד הם שדות המכילים מידע נוסף – למשל השדה "שנה" בטבלת "מימד_תאריך". דוגמה לשאילתה מתאימה לסכמה המתוארת מוצגת למטה. בשאילתת SQL זו, השאילתה עונה על השאלה: "כמה טלוויזיות נמכרו, לכל מותג ולכל מדינה, בשנת 1997":
SELECT
P.Brand,
S.Country,
SUM(F.Units_Sold)
FROM Fact_Sales F
INNER JOIN Dim_Date D ON F.Date_Id = D.Id
INNER JOIN Dim_Store S ON F.Store_Id = S.Id
INNER JOIN Dim_Product P ON F.Product_Id = P.Id
WHERE
D.YEAR = 1997
AND P.Product_Category = 'tv'
GROUP BY
P.Brand,
S.Country
מקורות
עריכה- DWH Schemas. 2009.
- Kimball p. 393.