Presentation is loading. Please wait.

Presentation is loading. Please wait.

אביב-תשס"ה236363- DBMS, שפות שאילתה: RA1 שפות שאילתה מתמטיות למודל הרלציוני שפות שאילתה מתמטיות: התייחסות לרלציות כאל קבוצות של רשומות (ללא חזרות וללא.

Similar presentations


Presentation on theme: "אביב-תשס"ה236363- DBMS, שפות שאילתה: RA1 שפות שאילתה מתמטיות למודל הרלציוני שפות שאילתה מתמטיות: התייחסות לרלציות כאל קבוצות של רשומות (ללא חזרות וללא."— Presentation transcript:

1 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA1 שפות שאילתה מתמטיות למודל הרלציוני שפות שאילתה מתמטיות: התייחסות לרלציות כאל קבוצות של רשומות (ללא חזרות וללא משמעות לסדר). השפות שנלמד בקורס: 1. אלגברה רלציונית (RA). 2. תחשיב רלציוני על תחומים (DRC). 3. תחשיב רלציוני על רשומות (TRC).

2 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA2 מסד שתייני הבירה drinker(dname, dcity) - שם שתיין ועיר מגוריו. pub(pname, pcity) - שם של פאב והעיר שבה הוא נמצא. beer(bname, btype) - שם של בירה והסוג שלה. frequents(dname, pname) – שתיין נוהג לבקר בפאב serves(pname, bname) – פאב מגיש בירה. likes(dname, bname) - שתיין אוהב בירה.

3 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA3 תיאור המסד על ידי ERD drinker pub frequents serves beer likes dnamedcitypcitypname btypebname

4 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA4 מסד שתייני הבירה - המשך dcitydname HaifaMoshe TelAvivYossi HaifaAvi NataniaLior pcityPname HaifaHaShmura TelAvivDarts HaifaMartef NataniaCamelot btypebname lightBeck rootCamelot lagerGuiness darkTuborg drinker:pub: beer:

5 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA5 pnamedname HaShmuraMoshe DartsYossi MartefAvi MartefYossi bnamepname TuborgHaShmura GuinessDarts BeckMartef GuinessHashmura bnamedname GuinessMoshe TuborgYossi BeckYossi BeckAvi :frequents :serveslikes: מסד שתייני הבירה - המשך

6 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA6 אלגברה רלציונית Relational Algebra ב-RA מוגדרים אופרטורים הפועלים על רלציות. התוצאה של כל אופרטור היא בעצמה רלציה, שעליה אפשר להפעיל אופרטור נוסף, וכן הלאה... RA היא שפה פקודתית (imperative) ולא הצהרתית (declarative). כלומר בשפה זו אומרים במפורש אלו אופרטורים יש להפעיל ובאיזה סדר.

7 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA7 RA: set-of-mappingאו set-of-list ל-RA שתי גרסאות: 1. Set-of-mapping עם שמות לעמודות. 2. Set-of-list בלי שמות לעמודות. דוגמא: לפי set-of-mapping שתי הרלציות הבאות שוות: r(a, b) = {(1, 2), (3, 4)} s(b,a) = {(2, 1), (4, 3)} לעומת זאת, לפי set-of-list הרלציות הבאות שונות: t = {(1, 2), (3, 4)} u = {(2, 1), (4, 3)} בהמשך, אנו נתייחס לגרסא של set-of-mapping בלבד

8 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA8 אופרטורים בסיסיים ב-RA 1. אופרטורים מתורת הקבוצות ( r ו-s הן רלציות): איחוד - r  s חיתוך - r  s חיסור - r  s מכפילה קרטזית - r  s 2. אופרטורים נוספים: בחירת עמודות -  attrs r בחירת שורות -  cond r שינוי שם - ρ a  a 1,b  b 1 r

9 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA9 אופרטורים ב-RA – המשך האופרטור "משלים" אינו מוגדר כי איננו רוצים לקבל רלציות אינסופיות. חמשת האופרטורים , , , , , ρ הם האופרטורים הבסיסיים ב-RA. אפשר להגדיר באמצעותם את כל שאר האופרטורים שנראה. תרגיל: בטאו את האופרטור . פתרון: r  s = r  (r  s)

10 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA10 אופרטורים ב-RA – המשך ב-set-of-mapping אפשר להפעיל את האופרטורים מתורת הקבוצות (מלבד  ) בין רלציות שיש להן אותן עמודות (ללא חשיבות לסדר העמודות). דוגמא: שתי הרלציות: r(a, b) = {(1, 2), (3, 4)} s(b,a) = {(2, 1), (4, 3)} שוות זו לזו, ולכן r  s = r

11 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA11 RA – בחירה (  ) והיטל (  ) התנאי הבוליאני שב-  יכול לכלול: השוואה בין שתי עמודות ע"י אחד מסימני היחס <, =,  וכו'. השוואה בין עמודה לקבוע. שילוב של השוואות כאלה ע"י הקשרים הלוגיים , ,  דוגמאות (r=r(a,b)):  a r - יחזיר רלציה שמכילה את העמודה a ב-r.  a=b r - יחזיר רלציה שמכילה את השורות ב-r שמזדהות על הערכים של התכונות a ו-b. ρ a  a 1,b  b 1 r - יחזיר את r(a 1,b 1 ) שזהה ל-r פרט לשמות התכונות.

12 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA12 דוגמאות דוגמא 1: אלו בירות יוסי אוהב?  dname=‘Yossi’ likes BeckYossi BeckAvi TuborgYossi GuinessMoshe bnamedname Likes: BeckYossi TuborgYossi bnamedname התוצאה :

13 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA13 דוגמאות – המשך כדי לבחור את שמות הבירות, בלי לחזור על Yossi כל פעם:  dname=‘Yossi’ likes BeckYossi TuborgYossi bnamedname Beck Tuborg bname  dname=‘Yossi’ likes: התוצאה :  bname ( )

14 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA14 דוגמאות - המשך... דוגמא 2: אלו בירות יוסי אוהב, או מוגשות ב"השמורה"?  bname (  dname=‘Yossi’ likes)   bname (  pname=‘HaShmura’ serves) דוגמא 3: אלו בירות יוסי אוהב, ואינן מוגשות ב"השמורה"?  bname (  dname=‘Yossi’ likes)   bname (  pname=‘HaShmura’ serves)

15 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA15 דוגמאות - המשך... הצלבת מידע: מכפלה קרטזית. דוגמא 4: אלו פאבים נמצאים בעיר שיוסי גר בה? pub: TelAvivYossi Haifa Moshe dcity dname NataniaCamelot HaifaMartef TelAvivDarts HaifaHaShmura pcitypname drinker:

16 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA16 דוגמא – שלב 1 pcitypnamedcitydname HaifaHaShmuraHaifaMoshe TelAvivDartsHaifaMoshe HaifaMartefHaifaMoshe NataniaCamelotHaifaMoshe HaifaHaShmuraTelAvivYossi TelAvivDartsTelAvivYossi HaifaMartefTelAvivYossi NataniaCamelotTelAvivYossi drinker  pub: dname=‘Yossi’  pcity=dcity

17 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA17 TelavivDartsTelAvivYossi pcitypnamedcitydname  dname=‘Yossi’  pcity=dcity (drinker  pub): דוגמא – שלב 2 Darts pname  pname (  dname=‘Yossi’  pcity=dcity (drinker  pub)): דוגמא – שלב 3 ( תוצאה )

18 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA18 דוגמאות - המשך... בתוצאה של מכפילה קרטזית עשויות להיות מספר עמודות בעלות אותו שם. כדי להבדיל ביניהן אפשר להוסיף את שם הרלציה כקידומת לפני שם העמודה (או להוסיף מספר לאחר השם).

19 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA19 דוגמאות - המשך lagerGuiness darkTuborg roofCamelot LightBeck btypebname Beer: BeckYossi TuborgYossi GuinessMoshe bnamedname Likes: דוגמא 5 : שמות השתיינים וסוגי הבירות שהם אוהבים.

20 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA20 btypebeer.bnamelikes.bnamedname lightBeckGuinessMoshe roofCamelotGuinessMoshe lagerGuiness Moshe darkTuborgGuinessMoshe lightBeckTuborgYossi roofCamelotTuborgYossi lagerGuinessTuborgYossi darkTuborg Yossi lightBeck Yossi roofCamelotBeckYossi lagerGuinessBeckYossi darkTuborgBeckYossi דוגמא – שלב 1 likes  beer: likes.bname=beer.bname

21 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA21 btypebeer.bnamelikes.bnamedname lagerGuiness Moshe darkTuborg Yossi lightBeck Yossi דוגמא – שלב 2  likes.bname=beer.bname (likes  beer):

22 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA22 דוגמא –שלב 3  dname,btype (  likes.bname=beer.bname (likes  beer)): btypedname lagerMoshe darkYossi lightYossi א ו ע"י שימוש באופרטור שינוי שם:  dname,btype (  lbname=bname ((  bname  lbname likes)  beer))

23 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA23 צרוף - Join מכפלה קרטזית + בחירה = צירוף (Join): r ⋈ s   condition (r  s) דוגמא : את השאילתה " מהם הפאבים שנמצאים בעיר שיוסי גר בה " יכולנו לכתוב גם כך :  pname (drinker ⋈ pub) condition dname=‘Yossi’  pcity=dcity

24 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA24 צרוף טבעי - natural join מקרה מיוחד של צרוף שבו תנאי הבחירה הוא שוויון בין כל העמודות שיש להן אותו שם ב-r וב-s: r ⋈ s   attributes of r and s without duplication (  equal values at identically-named attributes (r  s)) כמובן, אופרטור זה מוגדר רק ב-set-of-mappings, כאשר יש שמות לעמודות. למעשה, צרוף טבעי איננו בדיוק צרוף, בגלל פעולת ההיטל.

25 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA25 צרוף טבעי - המשך אלו פאבים מגישים בירה שיוסי אוהב?  pname (  dname=‘Yossi’ (serves ⋈ likes)) או בצורה יעילה יותר:  pname (serves ⋈  dname=‘Yossi’ likes) יעילות: השאילתה האחרונה יעילה יותר בגלל שהצרוף מבוצע בין טבלאות קטנות יותר, שכבר עברו את פעולת הבחירה.

26 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA26 צירוף טבעי – דוגמא דוגמא: מה מחזירה השאילתה הבאה?  dname (frequents ⋈  (serves ⋈ likes))

27 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA27 דוגמא – שלב 1: serves ⋈ likes BeckMartef GuinessHashmura GuinessDarts Tuborg HaShmura bnamepname :serves BeckYossi BeckAvi TuborgYossi GuinessMoshe bnamedname likes: | dnamebnamepname YossiTuborgHaShmura MosheGuinessDarts MosheGuinessHashmura YossiBeckMartef AviBeckMartef serves ⋈ likes: הביטוי serves ⋈ likes נותן שלשות של פאב, בירה ושתיין כך שהפאב מגיש את הבירה והשתיין אוהב אותה

28 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA28 שלב 2: frequents ⋈  (serves ⋈ likes) MartefAvi MartefYossi DartsYossi HaShmoraMoshe pnamedname :frequents AviBeckMartef YossiBeckMartef MosheGuinessHashmura MosheGuinessDarts YossiTuborg HaShmura dnamebnamepname serves ⋈ likes: AviBeckMartef YossiBeckMartef MosheGuinessHashmura dnamebnamepname frequents ⋈  (serves ⋈ likes): הצירוף עם frequents משאיר רק את השלשות שבהן השתיין גם נוהג לבקר בפאב

29 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA29 דוגמא – שלב 3 (תוצאה) השאילתה:  dname (frequents ⋈  (serves ⋈ likes)) פתרון: אנשים המבקרים לפחות בפאב אחד המגיש בירה שאהובה עליהם: dname Moshe Yossi Avi

30 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA30 חילוק אופרטור הצרוף שימושי לשאילתות בסגנון של "קיים" (  ). לשאילתות מסוג "לכל" (  ) יש אופרטור מרוכב אחר: חילוק. התוצאה של r  s היא הרשומות כך שכל השלמה שלהן עם רשומה מ-s נותנת רשומה ב-r. חילוק היא הפעולה ההפוכה, במובן מסוים, למכפלה קרטזית.

31 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA31 חילוק אם R, S הן הסכמות של הרלציות r, s בהתאמה, אז החילוק מוגדר אם S  R. הסכמה של התוצאה היא R\S. התוכן מוגדר ע"י: r  s   R\S (r) \  R\S ((  R\S (r)  s) \ r)

32 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA32 חילוק - דוגמא DCBA 1111 2112 2222 2332 CB 11 22 DA 22 r = s = r  s =

33 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA33 חילוק – דוגמא דוגמא: מי מבקר בכל הפאבים שמגישים בירה "טובורג"? הסבר: עבור השתיינים בתוצאה, לכל פאב שמגיש בירה טובורג, קיימת רשומה מתאימה ב-frequents (המבטאת שהשתיין מבקר בפאב זה). פתרון: frequents   pname (  bname=‘Tuborg’ serves)

34 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA34 צרוף למחצה - Semijoin צרוף טבעי למחצה (מסומן ב - r ⋉ s) מכיל את כל הרשומות מ-r שמסכימות עם רשומה כלשהי מ-s (על העמודות המשותפות): r ⋉ s   attributes of r (r ⋈ s) היתרון : ⋉ מצמצם, בעוד ש - ⋈ לעיתים מרחיב (יותר יעיל לאחסון תוצאות ביניים של חישוב).

35 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA35 Semijoin - דוגמא נגדיר את הרלציות: R(A,B), S(B,C), T(A,D), U(D,E),V(C,A) במקום לחשב  A (R(A,B) ⋈ S(B,C) ⋈ T(A,D) ⋈ U(D,E)) ניתן לחשב (  A ((R(A,B) ⋉ S(B,C)) ⋉ (T(A,D) ⋉ U(D,E)) לעומת זאת, את  A (R(A,B) ⋈ S(B,C) ⋈ V(C,A)) לא ניתן לחשב באופן דומה.

36 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA36 מתי אפשר לחשב שאילתת ⋈ ע"י ⋉ ו-  בלבד? הדבר אפשרי אם ורק אם קיים עץ מקשר שצמתיו הן הסכמות של הרלציות המשתתפות בשאילתה, והשורש שלו מכיל את כל האטריביוטים שעליהם מתבצע ההיטל. הגדרה: עץ מקשר הוא עץ שבו לכל אטריביוט A תת העץ המושרה על הצמתים המכילים את A הוא קשיר.

37 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA37 Semijoin - המשך בדוגמא האחרונה: המעגליות של האטריביוטים המופיעים בסכמה אינה מאפשרת בניית עץ קשיר. לכן, לא ניתן לבטא את  A (R(A,B) ⋈ S(B,C) ⋈ V(C,A)) באמצעות Semijoin. R(A,B) S(B,C) V(C,A)

38 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA38 Semijoin - דוגמא עבור  A (R(A,B) ⋈ S(B,C) ⋈ T(A,D) ⋈ U(D,E)) קיים העץ הקשיר הבא: ולכן ניתן לבטא אותה ע"י:  A ((R(A,B) ⋉ S(B,C)) ⋉ (T(A,D) ⋉ U(D,E))). הערה: כיוון ה - ⋉ בתוצאה הוא מלמעלה למטה ואילו הסדר הוא מהעלים לשורש. הסדר בין אחים איננו משנה. R(A,B) S(B,C) T(A,D) U(D,E)

39 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA39 אלגוריתם לבניית עץ מקשר עבור שאילתת ⋈ : 1. רשום את הסכמות של הרלציות המשתתפות ב - ⋈ 2. בצע עד שאין יותר שינויים: א- אם קיים אטריביוט שמופיע בסכמה בודדת ואינו נמצא בהטלה – מחק אותו. ב- אם קיימת סכמה שמוכלת בסכמה אחרת – מחק אותה. 3. אם נשארה סכמה אחת השווה להטלה - העץ נבנה ע"י מעבר על מחיקות הסכמות, בסדר הפוך: קיימת קשת R i  R j אם R j נמחקה בגלל שהייתה מוכלת ב-R i. 4. אחרת - לא קיים עץ מקשר.

40 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA40 בניית עץ Semijoin – דוגמא נתון: R 1 (A, B, C), R 2 (B, C, D), R 3 (D, E, F), R 4 (A, G). האם אפשר לחשב את  A (R 1 ⋈ R 2 ⋈ R 3 ⋈ R 4 ) ע"י ⋉ ו-  בלבד? פתרון: נתחיל מכל הסכמות: R 1 (A, B, C) R 2 (B, C, D) R 3 (D, E, F) R 4 (A, G) נמחק את G מ-R 4 : R 1 (A, B, C) R 2 (B, C, D) R 3 (D, E, F) R 4 (A) נמחק את R 4 כי היא מוכלת ב-:R 1 R 1 (A, B, C) R 2 (B, C, D) R 3 (D, E, F) נמחק את E, F מ-R 3 : R 1 (A, B, C) R 2 (B, C, D) R 3 (D) נמחק את R 3 כי היא מוכלת ב-R 2 : R 1 (A, B, C) R 2 (B, C, D) נמחק אתD מ-R 2 : R 1 (A, B, C) R 2 (B, C) נמחק את R 2 כי היא מוכלת ב-R 1 : R 1 (A, B, C) נמחק את B, C מ-R 1 : R 1 (A)

41 אביב-תשס"ה236363- DBMS, שפות שאילתה: RA41 דוגמא – המשך אי אפשר לבצע עוד שינויים. קיבלנו סכמה אחת השווה. ולכן קיים עץ קשיר: לכן, השאילתה  A (R 1 ⋈ R 2 ⋈ R 3 ⋈ R 4 ) שקולה ל-  A (( R 1 ⋉ ( R 2 ⋉ R 3 )) ⋉ R 4 ). R1R1 R4R4 R3R3 R2R2


Download ppt "אביב-תשס"ה236363- DBMS, שפות שאילתה: RA1 שפות שאילתה מתמטיות למודל הרלציוני שפות שאילתה מתמטיות: התייחסות לרלציות כאל קבוצות של רשומות (ללא חזרות וללא."

Similar presentations


Ads by Google