סכמת פתית השלג

[350px|ממוזער|שמאל|סכמת פתית השלג ([Snowflake Schema) היא וריאציה של סכמת כוכב (Star schema), בה מתבצעת נורמליזציה של טבלאות הממדים.]]

במדעי המחשב, **סכמת פתיתי שלג** היא מבנה לוגי של טבלאות מסד נתונים (Database) רב ממדי שייצוגו במודל ישויות קשרים (Entity Relationship Data Model) דומה בצורתו לפתית שלג. סכמת פתיתי שלג מיוצגת על ידי טבלאות עובדות (Fact Tables) שנמצאות במרכז מסד הנתונים ומקושרות לממדים רבים (Dimensions).

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

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

ההחלטה האם ליישם סכמת כוכב או סכמת פתית שלג אמורה לכלול את היתרונות היחסיים של פלטפורמת מסד הנתונים הנדונה וכן את כלי השאילתות (Query Tool) בו יש כוונה להשתמש. יש להעדיף את סכמת הכוכב כאשר כלי השאילתות חושף למשתמשים את המבנה הטבלאי שבבסיס המערכת, ובסביבה בה רוב השאילתות הן פשוטות באופיין. סכמות פתית שלג עדיפות בדרך כלל כאשר משתמשים בכלי שאילתות מתוחכם יותר היוצר שכבת אבסטרקציה (Abstraction Layer) בין המשתמשים למבנה הטבלאי הגולמי ועבור סביבה בה קיימות שאילתות מרובות המכילות קריטריונים מסובכים.

## נרמול מידע ואחסון

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

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

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

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

ימין|ממוזער|300px|דוגמה להפעלת שאילתה על סכמת פתית שלג


```sql
SELECT
 B.Brand,
 G.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_Geography G ON S.Geography_Id = G.Id
INNER JOIN Dim_Product P ON F.Product_Id = P.Id
INNER JOIN Dim_Brand B ON P.Brand_Id = B.Id
INNER JOIN Dim_Product_Category C ON P.Product_Category_Id = C.Id
WHERE
 D.Year = 1997 AND
 C.Product_Category = 'tv'
GROUP BY
 B.Brand,
 G.Country
```


## ראו גם
* סכמת כוכב
* מחסן נתונים
* OLAP
* מרכול נתונים

## לקריאה נוספת

* 
* 


## קישורים חיצוניים

*"Why is the Snowflake Schema a Good Data Warehouse Design?" by Mark Levene and George Loizou
*Reverse Snowflake Joins


קטגוריה:מסדי נתונים