אלגברה רלציונית

כאשר אנחנו שולחים שאילתה לDBMS יתקיים שהמנוע מקבל Query Plan.
השפה הדיקלרטיבית שהיא SQL היא דרך מילולית לבטא את אוסף הפעולות שהמערכת יודעת לבצע ולעבד. ה Query Compiler הוא זה שמקבל את השאילתות בשפה הדיקלרטיבית ומתרגם אותה ל Query Plans שהם ביטויים יותר פורמליים שהמערכת יודעת להתעסק איתם.

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

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

אופרטורים

union

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

Diff

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

selection

הסימון זה σ והמשמעות היא , החזרת כל הרשומות מטבלה מסויימת שמקיימת תנאי כלשהו. נסמן עבור טבלה R ותנאי c את הבחירה של כל הרשומות בטבלה שמקיימות את התנאי כ σc(R). בחירה היא פעולה שמורידה tuples כלומר שורות מהטבלה

projection

הסימון זה Π והוא מייצג את ההקרנה של טבלה מסויימת לאחר שאילתה כלומר את הטבלה בלי השדות הלא רצויים. הקרנה זאת פעולה שמורידה עמודות מהטבלה. עבור קבוצת שדות A1,,An וטבלה R נסמן ΠA1,,An(R) כטבלה המוקרנת מ R שבה יש רק את השדות הנ״ל.

מכפלה קרטזית

פעולה המצמידה רשומה מטבלה אחת לטבלה אחרת R1×R2 כלומר כל הזוגות האפשריים כך שאיבר אחת מ R1 והשני מ R2.

intersection

הסימון הוא והוא מיוצג רק את הרשומות המשותפות לשתי טבלאות R1,R2

renaming

הסימון הוא ρ והוא מוגדר להיות אופרטור שמשנה רק סכמה של טבלה.

distinct

δ(R) מסמן את השמטת הכפילויות מטבלה R

פעולות JOIN

Natural Join

מסומן כ והוא מבצע join לשתי טבלאות על פי התכונות הזהות שיש לשתיהן מתקיים ש

R1R2=ΠA(σC(R1×R2))

כאשר σc מבצע selection עבור כל התכונות שיש שיוויון בין רשומה מ R1 לרשומה מ R2 ו ΠA מבצע הקרנה כך שבטבלה הסופית יש את התכונות A שאלה התכונות משתי הטבלאות בלי כפילויות. כלומר הטבלה הסופית היא טבלה שיש בה את השדות המשותפים לשתי הטבלאות בלי כפילויות וגם את כל התכונות משתי הטבלאות.

למשל עבור

ID Name
1 John
2 Jane
3 Bill

ו

ID Age Gender
1 25 M
2 32 F
4 45 M

הjoin הטבעי ייתן

ID Name Age Gender
1 John 25 M
2 Jane 32 F

Theta Join

θ מייצג הצלבה בין שתי טבלאות על בסיס תנאי כלשהו c

R1θR2=σc(R1×R2)

כלומר אנחנו רוצים לקחת את שתי הטבלאות ולהשאיר רק את השורות שמקיימות תנאי כלשהו c.

equijoin

A=B מקרה פרטי של theta רק שהפעם התנאי הוא בהכרח תנאי של שיוויון בין שתי תכונות.

R1A=BR2=σA=B(R1×R2)

דוגמה
הפקודה הבאה

Πbuyer(purchase)

לוקחת את הטבלה purchase ומחזירה ממנה רק את עמודת ה buyer שלה.

הפקודה

purchasebuyer=nameperson

מבצעת join בין שתי הטבלאות לפי עמודת הbuyer והname היכן שיש שיוויון.
כלומר, כמו שהכרנו מפעולות Join של טבלאות ב-SQL ניקח את שני הטבלאות Purchase ו-Person ונייצר כל קומבינציה אפשרית של רשומה מול רשומה מטבלאות אלו, ובסוף נשאיר רק את הרשומות שיש להן ערך זהה בשדה ה-buyer וname לפי העמודות שביקשנו.

כעת ננסה לעשות פקודה מורכבת אף יותר

Πbuyer(purchasebuyer=nameperson)

היא עושה Join כפי שהראנו מקודם אבל מבצעת הקרנה רק על עמודת ה buyer
ניתן לראות את שרשרת הפעולות בעץ הבא

Pasted image 20230218173740.png|350

קומוטטיביות ואסוציטיביות

הכללים הבאים מתקיימים

R op S=S op R   R op (S op T)=(R op S) op T

כאשר op{,,}

כמו כן מתקיימים תנאי הדיסטריבוטיות מתורת הקבוצות על join , כלומר

R(ST)=(RS)(RT)

ניתן לדבר גם על הכללים הבאים שנוגעים ל-Selection ומתארים כיצד ניתן לפרק ביטויים עם התניות לביטויים שקולים:

Pasted image 20230218225234.png