150 likes | 395 Views
תחשיב רלציוני על תחומים Domain Relational Calculus. DRC הוא הצהרתי, כמו SQL : מבטאים בו רק מה רוצים שתהיה התוצאה, ולא איך לחשב אותה. כל שאילתה ב- DRC היא מהצורה {<x 1 ,x 2 ,…x i > | F(x 1 ,x 2 ,…x i )} , כאשר F(y 1 ,y 2 ,…y i ) היא נוסחא בלוגיקה מסדר ראשון. משמעות:
E N D
תחשיב רלציוני על תחומיםDomain Relational Calculus • DRC הוא הצהרתי, כמו SQL: מבטאים בו רק מה רוצים שתהיה התוצאה, ולא איך לחשב אותה. • כל שאילתה ב-DRC היא מהצורה {<x1,x2,…xi> | F(x1,x2,…xi)}, כאשר F(y1,y2,…yi)היא נוסחא בלוגיקה מסדר ראשון. • משמעות: כל הnיות <c1,c2,…ci>כך שתחת ההשמהx1= c1, x2 = c2, …xi = ci בF-יהיה ערכה של FTrue. • המשתנים בפרדיקט אינם מייצגים רשומות, אלא ערכי שדות בודדים מהתחום Dשמתוכו נלקחים ערכי מסד הנתונים. • רשומה מיוצגת ע"י רשימה של משתנים המוקפת בסוגריים זוויתיים, לדוגמא <a,b,c>. 236363- DBMS, שפות שאילתא: DRC
כללים ליצירת נוסחאות DRC • הנוסחה חייבת להיות בנויה לפי הכללים הבאים: נוסחאות אטומיות: • שייכות של רשומה <x1,x2,…xi> לרלציה r: <x1,x2,…xi>r או r(x1,x2,…xi) • יחס בין שדה x לשדה או קבוע y: xy, כאשר הוא אחד מסימני היחס =, , >, <, , נוסחאות מורכבות: אם F2, F1נוסחאות, גם הביטויים הבאים הם נוסחאות: F1 F2 F1 F2 F1 F1 F2 t(F1) t(F1) 236363- DBMS, שפות שאילתא: DRC
דוגמאות • דוגמא 1: אלו בירות יוסי אוהב? {dn, bn | dn, bn likes dn = ‘Yossi’} או: {dn, bn | likes(dn, bn) dn = ‘Yossi’} או: likes(dn, bn) dn = ‘Yossi’ • כדי לקבל רק את שמות הבירות, בלי Yossi: {bn | dn(dn, bn likes dn = ‘Yossi’)} 236363- DBMS, שפות שאילתא: DRC
דוגמאות - המשך • דוגמא 2:שמות השתיינים וסוגי הבירה שהם אוהבים: {dn, bt | bn (likes(dn, bn) beer(bn, bt))} • דוגמא 3: באלו ערים מגישים בירה שיוסי אוהב? {pc | pn, bn, dn(pub(pn, pc) serves(pn, bn)likes(dn, bn) dn = ‘Yossi’)} 236363- DBMS, שפות שאילתא: DRC
דוגמאות - המשך • דוגמא 4: מי הם השתיינים שבכל פאב יש בירה שהם אוהבים? • ניסיון 1: {{dn |pn bn (serves(pn, bn) likes(dn, bn) ) • נקבל רלציה ריקה! יש ערך אפשרי ‘xxx’למשתנה pnשמפיל את כולם. • ניסיון 2: {dn |pn bn (serves(pn, bn) bn’( serves(pn, bn’) likes(dn, bn’) )) } • נקבל את כל התחום! תמיד נוכל למצוא ערך למשתנה bnשייתן Falseעבור serves(pn, bn). • הפתרון:{dn |dc (drinker(dn, dc)) pn, bn (serves(pn, bn) bn’( serves(pn, bn’) likes(dn, bn’) ))} 236363- DBMS, שפות שאילתא: DRC
בטיחות • הבעיה:DRC "חזק" מדי – ניתן לכתוב שאילתה המחזירה תוצאה לא חסומה (כל הערכים האפשריים בתחום). • דוגמא: מה תחזיר השאילתא אם נשמיט את החלק הראשון שלה? {dn |pn, bn (serves(pn, bn) bn’( serves(pn, bn’) likes(dn, bn’) ))} אם טבלת servesריקה, אזי נקבל את קבוצת כל הערכים האפשריים עבור dn. 236363- DBMS, שפות שאילתא: DRC
בטיחות – המשך • מוטיבציה: הגבלת DRCלנוסחאות "טובות" – אשר לא תלויות בתחום הערכים של המשתנים, אלא רק בתוכן המסד (domain independent). • בעיה נוספת: קשה לדעת האם נוסחה נתונה תלויה בתחום. • פתרון: הגדרת כללים סינטקטיים, אשר יבטיחו כי הנוסחה היא בלתי תלויה בתחום: • קל לבדוק האם נוסחה בטוחה (סינטקטית) או לא • כל נוסחה בטוחה (סינטקטית) היא בלתי תלויה בתחום • נוסחה שאינה תלויה בתחום אינה דווקא בטוחה, אבל תמיד קיימת נוסחה אחרת שקולה לה, שהיא כן בטוחה (סינטקטית). 236363- DBMS, שפות שאילתא: DRC
בטיחות – SafeDRC • ביטוי Safe-DRCהוא ביטוי שנוצר לפי הכללים הבאים: • נוסחאות אטומיות בטוחות: • R(x1,…xi) • xi = aכאשר aהינו קבוע. • סגור: • אם Fבטוחהו-xמשתנה חופשי שלה, אז x Fהינה נוסחה בטוחה. • אם F1, F2בטוחות עם אותם משתנים חופשיים המופיעים במפורש, אז F1 F2בטוחה. 236363- DBMS, שפות שאילתא: DRC
SafeDRC – המשך • סגור (המשך): • אם כל אחת מ- F1 ,F2 ,... Fm ( m > 1)היא אחת מהבאים: • בטוחה • מהצורה Giעבור Giבטוחה • נוסחאאטומית (בטוחה או לא) אז F1 F2 ... Fmבטוחה אם כל המשתנים החופשיים המופיעים בה הםמתוחמים. 236363- DBMS, שפות שאילתא: DRC
SafeDRC – המשך משתנה xהוא מתוחם ב- F1 F2 ... Fmאם הוא מקיים אחד מהתנאים: • xמופיע חופשי ב- Fiשהיא עצמה נוסחא בטוחה (לא בשלילה) • xמופיע ב- Fi, שהיא מהצורה x=yאו y=x, כאשר yמתוחם דוגמאות: • הנוסחה x=yאיננה בטוחה, כי אין כלל היוצר אותה. • הנוסחה x=12 x=yבטוחה, כי שני המשתנים מתוחמים. 236363- DBMS, שפות שאילתא: DRC
SafeDRC – דוגמאות • דוגמא: • הנוסחה r(x,y,z) (p(x,y) q(y,z)) איננה בטוחה, כי ה- מתבצע על נוסחאות עם משתנים חופשיים שונים. • הנוסחה שקולה לנוסחה: r(x,y,z) p(x,y) q(y,z), שהיא בטוחה, ולכן הנוסחה המקורית גם בלתי תלויה בתחום. • דוגמא: מי הם השתיינים שבכל פאב יש בירה שהם אוהבים? dc (drinker(dn, dc) pn,bn (serves(pn, bn) drinker(dn, dc) bn’( serves(pn, bn’) likes(dn, bn’) ) )} 236363- DBMS, שפות שאילתא: DRC
תחשיב רלציוני על רשומותTuple Relational Calculus • TRCדומה ל-DRCעם מספר הבדלים. • כל שאילתא ב-TRC היא מהצורה {t | P(t)}, כאשר P(t) הוא פרדיקט שאומר האם רשומה t עונה על תנאי השאילתא. • לעיתים מציינים את שמות השדות ב-tבסוגרייםמרובעים, לדוגמא {t[A,B,C] | P(t)}. • הערכים עבור השדות של רשומות אלה נלקחים, כאמור, מתוך התחום D. לדוגמא, במסד שתייני הבירה, D הוא תחום המחרוזות. 236363- DBMS, שפות שאילתא: DRC
כללים ליצירת נוסחאות TRC • בתוך הנוסחה מתייחסים לשדות של רשומה t ע"י [שם שדה] t. הנוסחה חייבת להיות בנויה לפי הכללים הבאים: נוסחאות אטומיות: • שייכות של רשומה t לרלציה r: t r או r(t) • יחס בין שדה x לשדה yאו קבוע : t[x]s[y] אוt[x], כאשר הוא אחד מסימני היחס =, , >, <, , נוסחאות מורכבות: אם F2, F1נוסחאות, גם הביטויים הבאים הם נוסחאות: F1 F2 F1 F2 F1 F1 F2 t(F1)t(F1) 236363- DBMS, שפות שאילתא: DRC
דוגמאות • דוגמא 1: אלו בירות יוסי אוהב? {t | t likes t[dname] = ‘Yossi’} • כדי לבחור רק את שמות הבירות, בלי לחזור על Yossi כל פעם: {t[bname] | u (u likes u[dname] = ‘Yossi’ u[bname] = t[bname])} 236363- DBMS, שפות שאילתא: DRC
דוגמאות - המשך • דוגמא 2: שמות השתיינים וסוגי הבירות שהם אוהבים: {t[dname,type] | u,v (u likes v beer u[bname] = v[bname] u[dname] = t[dname] t[type] = v[type])} • דוגמא 3: באלו ערים מגישים בירה שיוסי אוהב? {t[pcity] | u,v,w(u pub u[pcity] = t[pcity] v serves v[pname] = u[pname] w likes w[bname] = v[bname] w[dname] = ‘Yossi’)} 236363- DBMS, שפות שאילתא: DRC