236363 - Webcourse

‫מערכות מסד נתונים ‪ – 236363‬חורף תשס"ו‬
‫תרגיל בית יבש מס' ‪4‬‬
‫מועד ההגשה הינו ‪) 12:00PM 7.2.2006‬בצהריים(‪.‬‬
‫יש להגיש את התרגיל בזוגות בלבד‪ ,‬לתא המקצוע‪.‬‬
‫בשאלות נא לפנות אל ‪[email protected]‬‬
‫כאשר נושא המכתב הינו ‪.HW4‬‬
‫שאלה ‪1‬‬
‫נתונה הסכמה )‪ R(B,C,D,F,G,H‬וקבוצת התלויות הפונקציונליות הבאה‬
‫‪F = {BGdCD, GdF, CDdGH, CdFG, FdD}.‬‬
‫א‪.‬‬
‫מצא פירוק‬
‫‬
‫ל‪ 3NF-‬המשמר מידע ותלויות ע"י הפעלת האלגוריתם הנלמד בהרצאה‪.‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ב‪.‬‬
‫אם קיימת סכמה ‪ Ri‬ב‪ -‬אשר אינה נמצאת ב‪ ,BCNF-‬מחק אותה מ‪ -‬והוסף במקומה‬
‫תתי סכמות הנוצרות ע"י פירוק משמר מידע ל‪ BCNF-‬של ‪ . Ri‬בצע הנ"ל עבור כל‬
‫סכמה ב‪-‬‬
‫אשר אינה נמצאת ב‪.BCNF-‬‬
‫רשום את הפירוק '‬
‫המתקבל‪.‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ג‪.‬‬
‫האם ' משמר מידע ותלויות? נמק בקצרה‪.‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ד‪.‬‬
‫יהי }‪ = {R1, …,Rn‬‬
‫פירוק של ‪ R,F‬המתקבל ע"י הרצת האלגוריתם למציאת פירוק‬
‫‪ 3NF‬המשמר מידע ותלויות‪ .‬תהא ‪ Ri‬תת‪-‬סכמה אשר אינה נמצאת ב‪ .BCNF-‬הוכח‬
‫בקצרה שאם נמשיך לפרק את ‪ Ri‬לפירוק משמר מידע שבו כל סכמה ב‪ BCNF-‬אזי‬
‫הפירוק הסופי לא יהיה משמר תלויות‪.‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫שאלה ‪2‬‬
‫תהא ‪ R,F‬סכמה ב‪ 3NF -‬אך לא ב‪ .BCNF -‬תהא ‪ R,G‬סכמה ב‪ 3NF -‬אך לא ב‪ ,BCNF -‬כאשר‬
‫‪ R‬זהה בשני המקרים‪.‬‬
‫א‪.‬‬
‫)‪ 6‬נק'( האם ‪ R,F#G‬בהכרח נמצאת ב‪ ?3NF -‬אם כן נמק בקצרה‪ .‬אם לא תן דוגמא‬
‫נגדית קצרה )לכל היותר ‪ 4‬אטריביוטים ל‪.(R -‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ב‪.‬‬
‫)‪ 7‬נק'( האם )‪ R,(F 4 G‬יכולה להיות ב‪ ?BCNF -‬אם לא נמק בקצרה‪ .‬אם כן תן‬
‫דוגמא קצרה )לכל היותר ‪ 4‬אטריביוטים ל‪.(R -‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
3 ‫שאלה‬
:‫ המתארים אילן יוחסין כבתרגיל בית שני‬XML ‫ עבור מסמכי‬DTD ‫להלן מסמך‬
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT DB (man*, woman*)>
<!ELEMENT man EMPTY>
<!ATTLIST man
name ID #REQUIRED
>
<!ELEMENT woman (birth)*>
<!ATTLIST woman
name ID #REQUIRED
>
<!ELEMENT birth (manref | woman)>
<!ATTLIST birth
father IDREF #REQUIRED
>
<!ELEMENT manref EMPTY>
<!ATTLIST manref
ref IDREF #REQUIRED
>
:‫הנחות‬
‫ מתאים לסדר‬woman ‫ מתחת לכל אלמנט‬birth ‫ סדר ההופעה של האלמנטים‬.1
.woman ‫הכרונולוגי של לידות עבור האישה המתוארת ע"י אותו האלמנט‬
‫( שווה לאחד הערכים של‬manref-‫ )המוגדר ב‬ref ‫ הערך של האטריביוט‬.2
.man ‫ השייכים לאלמנטים‬name ‫אטריביוט‬
:‫ המחזירות‬XPath 1.0 ‫ממשו שאילתות‬
.‫את שמות הנשים שיש להן נכדים זכרים כלשהם מבנים שלהן‬
.‫א‬
.1
.‫ את כל שמות הבעלים של שרה מהנישואין השניים שלה והלאה‬.2
:‫ הבא‬Xpath-‫כתבו במילים )ובקצרה( מה מחזיר ביטוי ה‬
//woman/descendant::woman[birth/@father = ancestor::birth/followingsibling::birth//woman/birth/@father]
|//woman/descendant::woman[birth/@father = ancestor::birth/precedingsibling::birth//woman/birth/@father]
.‫ב‬
‫ שאמורה להחזיר את‬XQuery-‫השלימו את המקומות החסרים בשאילתא הממומשת ב‬
.‫כל הצאצאים של שרה‬
:‫ הבא‬DTD-‫על תוצאת השאילתא לציית למסמך ה‬
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
result (descendants)>
descendants (woman|man)*>
woman (name, descendants)>
man (name, descendants)>
name (#PCDATA)>
‫ אשר בתוכו נמצאים כל‬,result ‫ תוצאת השאילתא תופיע בתוך אלמנט‬,‫כלומר‬
.‫הצאצאים של שרה‬
:‫ הבא‬xml-‫ בהינתן מסמך ה‬,‫לדוגמא‬
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DB SYSTEM "HW4.dtd">
<DB>
<man name="haim"/>
<man name="moshe"/>
<man name="shlomo"/>
<woman name="sarah">
<birth father="haim">
<woman name="rivka">
<birth father="moshe">
<manref ref="shlomo"/>
</birth>
</woman>
</birth>
</woman>
</DB>
:‫תוצאת השאילתא תראה כך‬
<result>
<descendants>
<woman>
<name>rivka</name>
<descendants>
<man>
<name>shlomo</name>
</man>
</descendants>
</woman>
</descendants>
</result>
.‫ג‬
:‫להלן השאילתא‬
xquery version "1.0";
declare function local:desc($births as element()*) as element()*
{
<descendants>
{
for $b in $births
return
if ($b/*[name()="manref"]) then
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
else(
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
)
}
</descendants>
};
<result>
{
for $w in doc("example.xml")//woman[@name = "sarah"]
return local:desc($w/birth)
}
</result>
‫ להכיל את שם האם או האב שאת‬descendants ‫ נק'( על שמו של האלמנט‬5 ‫)בונוס‬
‫ השם החדש של האלמנט יהיה בפורמט‬.‫צאצאיו הוא מתאר‬
."descendants-of-theRelevantName"
:‫להלן התוצאה המתקבלת עבור הדוגמא הקודמת‬
<result>
<descendants-of-sarah>
<woman>
<name>rivka</name>
<descendants-of-rivka>
<man>
<name>shlomo</name>
</man>
</descendants-of-rivka>
</woman>
</descendants-of-sarah>
</result>
‫הנחיות לשאלה ‪:3‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫יש להגיש את הפתרון מודפס‪.‬‬
‫עליכם לבדוק את נכונות השאילתות! שאילתות שתהיינה שגויות סינטקטית או‬
‫הממומשות באמצעות ‪) Xpath 2.0‬רלוונטי לסעיף א'( תקבלנה ציון ‪!0‬‬
‫על מנת לוודא את נכונות השאילתות עליכם לעבוד עם תוכנת ‪ XmlSpy‬המותקנת‬
‫בחוות המחשבים‪.‬‬
‫בזמן בדיקת שאילתות ‪ Xpath‬יש לסמן גירסא ‪) 1.0‬ברירת המחדל היא גירסא ‪(2.0‬‬
‫כפי שמודגם להלן‪:‬‬
‫שאלה ‪ – 4‬לא להגשה‬
‫נייצג מסמך ‪ XML‬כאוסף עובדות ל‪ .DATALOG -‬לצורך שאלה זו‪ ,‬נניח שלמסמכים אין‬
‫אטריביוטים אלא רק אלמנטים‪.‬‬
‫נשתמש בפרדיקטים הבאים ב‪:EDB-‬‬
‫‪• Root(ID) – ID is the unique id of the root element of the document.‬‬
‫‪ ID‬הנו מזהה ייחודי של שורש המסמך )קיימת עובדה אחת בלבד לפרדיקט ‪.(Root‬‬
‫‪• Tag(ID, TAG) – TAG is the tag of the XML element with unique id ID. Tag is not‬‬
‫‪defined for the ID of the root.‬‬
‫‪ TAG‬הנו שם האלמנט של אלמנט ה‪ XML -‬בעל מזהה ייחודי ‪ TAG .ID‬אינו מוגדר עבור‬
‫המזהה הייחודי של השורש‪.‬‬
‫‪th‬‬
‫‪• Edge(ID1, ID2, POS) – The element with ID2 is the POS child of the element with‬‬
‫‪ID1.‬‬
‫האלמנט בעל ‪ ID2‬הנו הבן ה‪ POS -‬במספר )מספר הבן השמאלי ביותר הוא ‪ (1‬של האלמנט‬
‫בעל מזהה ייחודי ‪.ID1‬‬
‫‪Text(ID, TEXT) – Element ID has a text child element containing the text TEXT.‬‬
‫לאלמנט בעל מזהה ייחודי ‪ ID‬יש בן מסוג ‪ text‬הכולל את המחרוזת ‪.TEXT‬‬
‫לדוגמא‪:‬‬
‫•‬
‫>‪<a‬‬
‫>‪<b>55</b‬‬
‫>‪<b>6</b‬‬
‫>‪<d‬‬
‫>‪<e>909</e‬‬
‫>‪</d‬‬
‫>‪</a‬‬
‫ה‪ EDB -‬ייוצג ע"י‪:‬‬
‫‪Text‬‬
‫‪Text(3, 55).‬‬
‫‪Text(4, 6).‬‬
‫‪Text(6, 909).‬‬
‫‪Edge‬‬
‫‪Edge(1,2,1).‬‬
‫‪Edge(2,3,1).‬‬
‫‪Edge(2,4,2).‬‬
‫‪Edge(2,5,3).‬‬
‫‪Edge(5,6,1).‬‬
‫‪Tag‬‬
‫‪Tag(2,a).‬‬
‫‪Tag(3,b).‬‬
‫‪Tag(4,b).‬‬
‫‪Tag(5,d).‬‬
‫‪Tag(6,e).‬‬
‫‪Root‬‬
‫‪Root(1).‬‬
‫א‪ .‬כתוב תוכנית ‪ DATALOG‬ובה פרדיקט )‪ r(X‬המחשב את ה‪ ID-‬של הבן הראשון של‬
‫השורש של המסמך‪.‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ב‪ .‬כתוב תוכנית ‪ DATALOG‬ובה פרדיקט )‪ p(X‬המחשב את ה‪ IDs-‬של כל האלמנטים‬
‫המוחזרים ע"י ביטוי ה‪/a | /child::*[2]/child::b :Xpath -‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ג‪ .‬כתוב תוכנית ‪ DATALOG‬ובה פרדיקט )‪ q(X‬המחשב את ה‪ IDs-‬של כל האלמנטים‬
‫המוחזרים ע"י ביטוי ה‪//b//d :Xpath -‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫ד‪ .‬בטא ב‪ XPath -‬את שאילתת ה‪ Datalog -‬הבאה כאשר ‪ s‬הינו פרדיקט השאילתה‪,‬‬
‫כלומר )‪.?s(X‬‬
‫הערה‪ :‬אות גדולה מציינת משתנה‪.‬‬
‫‪s(X) r(R), Edge(R,X,P), Tag(X, a), t(X).‬‬
‫‪t(X) Edge(X,Y,P), Tag(Y, b), u(Y).‬‬
‫‪u(X) Edge(X,Y,P), Tag(Y, c).‬‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬
‫____________________________________________________________________‬