תחשיב רלציוני על תחומים Domain Relational Calculus

21
זזז"ז- זזזז- 236363 DBMS, :זזזז זזזזזזDRC 1 ללללל ללללללל לל לללללל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 ) זזז זזזזז זזזזזזז זזזז זזזזז. זזזזזז: זז זn זזז< c 1 ,c 2 ,…c i > זז זזזז זזזזזx 1 = c 1 , x 2 = c 2 , …x i = c i זF - זזזז זזזז זזF True . זזזזזזז זזזזזזז זזזז זזזזזזז זזזזזז, זזז זזזז זזזז זזזזזז זזזזזזD זזזזזז זזזזזז זזזז זזז זזזזזזז. זזזזז זזזזזז ז"ז זזזזז זז זזזזזז זזזזזז זזזזזזזז זזזזזזזז, זזזזזז< a,b,c > .

description

תחשיב רלציוני על תחומים Domain Relational Calculus. DRC הוא הצהרתי, כמו SQL : מבטאים בו רק מה רוצים שתהיה התוצאה, ולא איך לחשב אותה. כל שאילתה ב- DRC היא מהצורה { | F(x 1 ,x 2 ,…x i )} , כאשר F(y 1 ,y 2 ,…y i ) היא נוסחא בלוגיקה מסדר ראשון. משמעות: - PowerPoint PPT Presentation

Transcript of תחשיב רלציוני על תחומים Domain Relational Calculus

Page 1: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 1

תחשיב רלציוני על תחומיםDomain Relational Calculus

DRC הוא הצהרתי, כמו SQL ,מבטאים בו רק מה רוצים שתהיה התוצאה :ולא איך לחשב אותה.

-כל שאילתה בDRC היא מהצורה <{x1,x2,…xi< | F(x1,x2,…xi)} כאשר , F(y1,y2,…yi).היא נוסחא בלוגיקה מסדר ראשון

:משמעות יהיה -F בx1= c1, x2 = c2, …xi = ci כך שתחת ההשמה<c1,c2,…ci>יות n כל ה

.F Trueערכה של

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

,רשומה מיוצגת ע"י רשימה של משתנים המוקפת בסוגריים זוויתיים .<a,b,c>לדוגמא

Page 2: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 2

DRCכללים ליצירת נוסחאות

:הנוסחה חייבת להיות בנויה לפי הכללים הבאיםנוסחאות אטומיות:

שייכות של רשומה<x1,x2,…xi> לרלציה r:

<x1,x2,…xi<r או r(x1,x2,…xi) יחס בין שדהx לשדה או קבוע y: xy כאשר , הוא אחד מסימני

, <, >, , =, היחס

נוסחאות, גם הביטויים F2 , F1 אם נוסחאות מורכבות:הבאים הם נוסחאות:

F1 F⋀ 2 F1 F⋁ 2 F1 F1 F2 t(F1) t(F1)

Page 3: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 3

תזכורת: מסד שתייני הבירה

drinker(dname, dcity).שם שתיין ועיר מגוריו - pub(pname, pcity) שם של פאב והעיר שבה הוא -

נמצא.beer(bname, btype). שם של בירה והסוג שלה - frequents(dname, pname) שתיין נוהג לבקר –

בפאבserves(pname, bname).פאב מגיש בירה – likes(dname, bname).שתיין אוהב בירה -

Page 4: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 4

דוגמאות

אלו בירות יוסי אוהב?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’){⋀

Page 5: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 5

דוגמאות - המשך

שמות השתיינים וסוגי הבירה שהם אוהבים: :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’⋀ ⋀ ){

Page 6: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 6

דוגמאות - המשך מי הם השתיינים שבכל פאב יש בירה 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< | pn, bn’ (serves(pn, bn’) bn ( serves(pn, bn) likes(dn, bn) )

dc (drinker(dn, dc))){

Page 7: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 7

בטיחות

הבעיה: DRC חזק" מדי – ניתן לכתוב שאילתה" המחזירה תוצאה לא חסומה (כל הערכים האפשריים

בתחום). דוגמא: מה תחזיר השאילתא אם נשמיט את החלק

השני שלה?

}>dn< | pn, bn’ (serves(pn, bn’)

bn( serves(pn, bn) likes(dn, bn) ) ){

ריקה, אזי נקבל את קבוצת כל servesאם טבלת .dnהערכים האפשריים עבור

Page 8: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 8

בטיחות – המשך

:הגבלת מוטיבציה DRC לנוסחאות "טובות" – אשר לא תלויות בתחום הערכים של המשתנים, אלא רק בתוכן המסד

)domain independent.(קשה לדעת האם נוסחה נתונה תלויה בתחום.בעיה נוספת :אשר יבטיחו כי הנוסחה סינטקטיים: הגדרת כללים פתרון ,

היא בלתי תלויה בתחום:קל לבדוק האם נוסחה בטוחה (סינטקטית) או לאכל נוסחה בטוחה (סינטקטית) היא בלתי תלויה בתחום נוסחה שאינה תלויה בתחום אינה דווקא בטוחה, אבל תמיד קיימת

נוסחה אחרת שקולה לה, שהיא כן בטוחה (סינטקטית).

Page 9: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 9

SafeDRCבטיחות –

ביטויSafe-DRC הוא ביטוי שנוצר לפי הכללים הבאים:

:נוסחאות אטומיות בטוחות

.1R(x1,…xi)

.2 xi = a כאשרa.הינו קבוע

:סגור

הינה x F משתנה חופשי שלה, אז xו- בטוחהFאם 1.נוסחה בטוחה.

בטוחות עם אותם משתנים חופשיים המופיעים F1, F2אם 2. בטוחה.F1 F2במפורש, אז

Page 10: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 10

SafeDRCהמשך –

:(המשך) סגור

היא אחת F1 ,F2 ,... Fm ( m < 1)אם כל אחת מ- 3.מהבאים:

בטוחה מהצורה Gi עבורGiבטוחה אטומית (בטוחה או לא) נוסחא

בטוחה אם כל המשתנים החופשיים F1 F2 ... Fmאז מתוחמים. המופיעים בה הם

Page 11: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 11

SafeDRCהמשך –

אם הוא F1 F2 ... Fm ב- מתוחם הוא xמשתנה מקיים אחד מהתנאים:

x -מופיע חופשי ב Fi שהיא עצמה נוסחא בטוחה (לא בשלילה)

x -מופיע ב Fi שהיא מהצורה ,x=y או y=x כאשר ,y מתוחם

דוגמאות: הנוסחהx=y.איננה בטוחה, כי אין כלל היוצר אותה הנוסחהx=12 x=y.בטוחה, כי שני המשתנים מתוחמים

Page 12: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 12

SafeDRCדוגמאות –

:דוגמא הנוסחהr(x,y,z) (p(x,y) q(y,z)) ,איננה בטוחה

מתבצע על נוסחאות עם משתנים חופשיים שונים.כי ה- :הנוסחה שקולה לנוסחהr(x,y,z) p(x,y) q(y,z) ,

שהיא בטוחה, ולכן הנוסחה המקורית גם בלתי תלויה בתחום.

דוגמא: מי הם השתיינים שבכל פאב יש בירה שהםאוהבים?

}>dn< | pn,bn’ (serves(pn, bn’)

bn( serves(pn, bn) likes(dn, bn) ) ) dc (drinker(dn, dc)){

Page 13: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 13

תחשיב רלציוני על רשומותTuple Relational Calculus

TRC-דומה ל DRC.עם מספר הבדלים -כל שאילתא בTRC היא מהצורה {t | P(t)} כאשר ,

P(t) הוא פרדיקט שאומר האם רשומהt עונה על תנאי השאילתא.

-לעיתים מציינים את שמות השדות ב tבסוגריים .{t[A,B,C] | P(t)}מרובעים, לדוגמא

,הערכים עבור השדות של רשומות אלה נלקחים. לדוגמא, במסד שתייני Dכאמור, מתוך התחום

הוא תחום המחרוזות. Dהבירה,

Page 14: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 14

TRCכללים ליצירת נוסחאות

בתוך הנוסחה מתייחסים לשדות של רשומהt ע"י . הנוסחה חייבת להיות בנויה לפי הכללים הבאים:t]שם שדה[

נוסחאות אטומיות: שייכות של רשומהt לרלציה r: t r או r(t) יחס בין שדהx לשדה y או קבוע : t[x]s[y]או t[x] ,

, <, >, , =, הוא אחד מסימני היחס כאשר נוסחאות, גם הביטויים F2 , F1 אם נוסחאות מורכבות:

הבאים הם נוסחאות:

F1 F⋀ 2 F1 F⋁ 2 F1 F1 F2 t(F1) t(F1)

Page 15: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 15

דוגמאות

אלו בירות יוסי אוהב?1דוגמא :

}t | t likes t[dname] = ‘Yossi’{⋀

כדי לבחור רק את שמות הבירות, בלי לחזור עלYossiכל פעם :

}t[bname] | u (u likes u[dname] = ‘Yossi’ ⋀

⋀ u[bname] = t[bname]){

Page 16: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 16

דוגמאות - המשך

שמות השתיינים וסוגי הבירות שהם 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’){⋀

Page 17: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 17

מועד 08/09שאלה ממבחן – חורף א'

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

סטודנטים ומרצים. Courses(Cid, Number, Title, Semester) CourseInfo(Cid, Tid, Room, Time,

TeacherInCharge) Teachers(Tid, Name, Status) Students(Sid, Name) Enrollment(Sid, Cid, Tid)

Page 18: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 18

1שאלה

:כתבו מה מחשבת השאילתה הבאה}t[Semester] |

uCourses(u[Semester]=t[Semester] v,wCourses(

(v[Semester] = u[Semester] w[Semester] = u[Semester] v[Cid]w[Cid])

i,jCourseInfo (i[Cid]=v[Cid] j[Cid]=w[Cid] i[Room]=j[Room]

i[Time]=j[Time]) )) {

Page 19: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 19

פתרון

השאילתה מחזירה את כל הסמסטרים כך שקיים קורסים שונים הניתנים 2קורס בסמסטר ואין

באותו הסמסטר כך שזמן ההרצאה והכיתה בה הם ניתנים הוא זהה.

Page 20: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 20

2שאלה

) כתבו שאילתה בתחשיב היחסיםDRC () וסמסטר, כך Titleהמוצאת זוגות של שם קורס (

שבסמסטר היו רשומים לקורס בדיוק שני סטודנטים.

שם קורס וסמסטר – נמצאים בטבלתcourses רישום לקורס של סטודנטים – נמצא בטבלת

enrollment קישור בין הטבלאות – ע"י השדהcid

Page 21: תחשיב רלציוני על תחומים Domain Relational Calculus

אביב-תשס"ז - 236363 DBMS, שפות שאילתא: DRC 21

פתרון

}>title,semester< | cid,number(Courses(cid,number, title,semester)

tid1,tid2,sid1,sid2 (sid1 sid2 Enrolment(sid1,cid,tid1) Enrolment(sid2,cid,tid2) sid3,tid (Enrolment(sid3,cid,tid) (sid3=sid1 ⋁sid3=sid2)))){