You are on page 1of 8

‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬

‫פתרון תרגיל בית מס' ‪3‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫פתרון תרגיל בית מס' ‪3‬‬

‫חלק א – שאלות בחירה מרובה ("אמריקאיות")‬

‫‪ .1‬איזה מהבאים נותן דוגמה מובהקת להבדל בין‬


‫‪ .A‬מהלך שניתן לשייכו באופן מובהק לעיצוב הלוגי של בסיס הנתונים (‪ ,)Logical Design‬לבין‬
‫‪ .B‬מהלך שניתן לשייכו לעיצוב הפיסי של בסיס הנתונים (‪)Physical Design‬‬
‫‪ .A .2‬הגדרת שמות השדות הכלולים בכל טבלה‬ ‫‪ .A‬הגדרת קשרים (כולל קרדינליות) בין ישויות‬ ‫‪.1‬‬
‫‪ .B‬הגדרת סוגי הנתונים של השדות הכלולים בכל טבלה‬ ‫‪ .B‬הגדרת מפתחות זרים בין טבלאות‬
‫‪ .A‬הגדרת מרחב הערכים של שדה עם אילוץ ‪CHECK‬‬ ‫‪.4‬‬ ‫‪ .A .3‬הגדרת קשרים משולשים ורקורסיביים‬
‫‪ .B‬הגדרת מרחב הערכים של שדה עם ‪Lookup Table‬‬ ‫‪ .B‬הגדרת ישויות חלשות ויחסי הורשה בין ישויות‬

‫נימוק‪:‬‬
‫תשובות ‪ 1‬שגויה – המהלך הראשון שייך לעיצוב קונספטואלי (‪ )ERD‬והשני לעיצוב לוגי‬
‫תשובה ‪ 2‬נכונה‪ -‬מבנה הטבלה מוגדר בשלב העיצוב הלוגי‪ ,‬בעוד שהגדרת סוגי הנתונים היא מהלך עיצוב פיזי‬
‫תשובות ‪ 3‬שגויה – בשני המקרים‪ ,‬מדובר על מהלכים שניתן לשייכם לעיצוב קונספטואלי (‪)ERD‬‬
‫תשובה ‪ 4‬שגויה – שני מהלכים שניתן לשייכם לעיצוב פיסי‬

‫‪ .2‬הטבלאות )‪ A (a1, a2‬ו‪ B (b1, b2)-‬ו‪ C (c1(A), c2 (B), c3)-‬הן חלק מבסיס נתונים שהתקבל מהמרה‬
‫תקינה של מודל ‪ ERD‬תקין‪ .‬אילו מהטבלאות הבאות‪ ,‬אם יכללו באותו בסיס נתונים‪ ,‬עשויות להתקבל מהמרת‬
‫אותו ‪? ERD‬‬
‫) ‪. D ( d1(A), d2, d3, d4‬א‬
‫) )‪. E ( e1(B), e2, {e3, e4} (E‬ב‬
‫) ‪. F ( {f1 , f2} (C), f3‬ג‬
‫) ‪. G ) {g1, g2} (C), g3‬ד‬
‫א'‪ ,‬ב'‪ ,‬ו‪-‬ד'‪ ,‬אך לא ג'‬ ‫‪.2‬‬ ‫ב'‪ ,‬ו‪-‬ג' בלבד‬ ‫‪.1‬‬
‫א'‪ ,‬ב'‪ ,‬ג'‪ ,‬ו‪-‬ד'‬ ‫‪.4‬‬ ‫א'‪ ,‬ג'‪ ,‬ו‪-‬ד'‪ ,‬אך לא ב'‬ ‫‪.3‬‬

‫נימוק‪:‬‬
‫א‪ .‬מימוש של שדה של ‪ A‬שהוא גם מורכב וגם מרובה ערכים‬
‫ב‪ .‬ישות חלשה של ‪ ,B‬עם קשר רקורסיבי‬
‫ג‪ .‬מודל שגוי – הטבלה "כאילו" מייצגת הורשה של קשר‬
‫ד‪ .‬שדה מרובה ערכים על קשר ‪C‬‬

‫‪ .3‬במודל ה‪ ERD-‬קיים קשר משולש בין הישויות ‪ ,A, B‬ו‪ ,C-‬עם קרדינליות ‪( N:N:1‬ה‪ 1-‬הוא בצד של ‪ .)C‬נתון‬
‫כי בטבלה המייצגת את ‪ A‬יש כעת ‪ a‬רשומות‪ ,‬בטבלה המייצגת את ‪ B‬יש ‪ b‬רשומות‪ ,‬ובטבלה המייצגת את ‪C‬‬
‫יש ‪ c‬רשומות‪ .‬איזה מהביטויים הבאים מגדיר נכונה את החסם העליון על מספר הרשומות האפשרי כעת בטבלה‬
‫הממירה את הקשר המשולש ?‬
‫‪a*b*c‬‬ ‫‪.2‬‬ ‫‪a*b‬‬ ‫‪.1‬‬
‫המקסימום בין ‪ a * c‬ל‪b * c -‬‬ ‫‪.4‬‬ ‫המקסימום בין ‪ a‬ל‪b -‬‬ ‫‪.3‬‬

‫נימוק‪:‬‬
‫כיוון שהקרדינליות היא "רבים רבים יחיד" – המפתח הראשי של הטבלה שממירה את הקשר המשולש יהיה מורכב‬
‫ממפתחות זרים ל‪ A-‬ול‪ ,B -‬ובהתאם לכך החסם העליון על מספר הרשומות הוא כמספר הצירופים האפשריים‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
‫פתרון תרגיל בית מס' ‪3‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫‪ .4‬עלתה דרישה להגדיר טבלת חיפוש (‪ )Lookup Table‬בשם ‪ C‬עבור השדה ‪ a4‬בטבלה ‪ ,A‬ושהטבלה תאלץ‬
‫אך ורק את הערכים שקיימים כעת בשדה זה‪ .‬איזו מהשאילתות הבאות לא תהיה רלוונטית למימוש דרישה זו?‬
‫כלומר‪ ,‬הטענה היא ששלוש מהשאילתות הבאות תהיינה רלוונטיות למימוש‪ ,‬ויש לסמן את יוצאת הדופן‪.‬‬
‫(רמז‪ :‬אם יש נוסח פקודה שלא נראה מוכר‪ ,‬כיוון שעדיין לא נלמד – כדאי לערוך חיפוש מה הוא עושה‪)...‬‬
‫‪2. INSERT INTO C‬‬ ‫( ‪1. CREATE TABLE C‬‬
‫‪SELECT DISTINCT A.a4‬‬ ‫) ‪c1 int NOT NULL PRIMARY KEY‬‬
‫‪4. ALTER TABLE A‬‬ ‫‪3. ALTER TABLE C‬‬
‫‪ADD CONSTRAINT FK_C‬‬ ‫‪ADD a4 int NOT NULL‬‬
‫)‪FOREIGN KEY (a4) REFERENCES C (c1‬‬

‫נימוק‪:‬‬
‫תשובה ‪ 3‬מתארת פעולה לא רלוונטיות – בעת הגדרת טבלת חיפוש‪ ,‬אין צורך להוסיף את השדה עליו מצביעים‬
‫לטבלת החיפוש‪.‬‬
‫הרמז התייחס לפעולה המתוארת ב‪ – 2-‬מדובר בנוסח שאילתה מקוננת‪ ,‬שנלמד בהמשך‪ ,‬שאפשר להזין של פלט‬
‫שאילתה אחת לטבלה קיימת‪ ,‬ומדובר בפעולה רלוונטית להזנת הערכים הנדרשים לטבלת החיפוש‪.‬‬

‫‪X‬‬ ‫‪Y‬‬ ‫שתי השאלות הבאות מתייחסות לטבלאות‬


‫‪a‬‬ ‫‪b‬‬ ‫‪c‬‬ ‫‪d‬‬ ‫‪e‬‬ ‫‪m‬‬ ‫‪n‬‬ ‫‪p‬‬ ‫‪q‬‬ ‫על‬ ‫נבנו‬ ‫המתוארות משמאל‪ .‬נתון כי הטבלאות‬
‫פי המודל הטבלאי להלן‪ ,‬וכי בנקודת הזמן‬
‫‪1‬‬ ‫‪1‬‬ ‫‪A‬‬ ‫‪20‬‬ ‫‪U1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪YES‬‬ ‫הנוכחית הן מכילות את הרשומות המתוארות‬
‫בלבד‪.‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪B‬‬ ‫‪40‬‬ ‫‪V1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪NO‬‬
‫)‪ X (a, b, c, d, e‬‬
‫‪2‬‬ ‫‪1‬‬ ‫‪C‬‬ ‫‪60‬‬ ‫‪U1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫)‪NO  Y ({m, n } X, p, q‬‬
‫‪2‬‬ ‫‪2‬‬ ‫‪D‬‬ ‫‪80‬‬ ‫‪V1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪YES‬‬
‫‪ .5‬טבלאות ‪ X‬ו‪ Y-‬הוגדרו בבסיס הנתונים‪ ,‬עם אילוצי מפתח ראשי אך ללא אילוץ המפתח הזר‪ ,‬ואוכלסו‬
‫ברשומות המתוארות לעיל‪ .‬איזה מהבאים מגדיר נכונה פקודת ‪ ALTER TABLE‬להוספת המפתח הזר?‬
‫‪2. ALTER TABLE Y‬‬ ‫‪1. ALTER TABLE Y‬‬
‫)‪ADD CONSTRAINT FK_X (m, n‬‬ ‫‪ADD CONSTRAINT FK_X‬‬
‫) )‪FOREIGN KEY X REFERENCES (a, b‬‬ ‫) )‪FOREIGN KEY (m, n) REFERENCES X (a, b‬‬
‫שלושת התשובות הקודמות שגויות‪ .‬לא ניתן להגדיר‬ ‫‪.4 3. ALTER TABLE Y‬‬
‫מפתח זר לאחר שהטבלה כבר קיימת ומאוכלסת‬ ‫‪ADD CONSTRAINT FK_X‬‬
‫בנתונים‪ .‬היה הכרח להגדיר את המפתח הזר בעת‬ ‫)‪FOREIGN KEY (m) REFERENCES X (a‬‬
‫הקמת הטבלאות‪ ,‬כחלק מפקודת ‪CREATE TABLE‬‬
‫) )‪FOREIGN KEY (n) REFERENCES X (b‬‬

‫נימוק‪:‬‬
‫תשובה ‪ 1‬מתארת את נוסח הכתיבה הנכון של הוספת אילוץ מפתח זר באמצעות ‪ALTER TABLE‬‬
‫‪ .6‬בהתחשב במבנה הטבלאות ‪ X‬ו‪ ,Y-‬וברשומות המצויות בהן‪ ,‬איזו מהפעולות הבאות לא תגרום לבעיית‬
‫יושרה (‪ ?) Integrity‬כלומר‪ ,‬הטענה היא ששלוש מהפעולות יגרמו לבעיית יושרה ויש לסמן את יוצאת הדופן‪.‬‬
‫)‪2. INSERT INTO Y (m, p, q‬‬ ‫‪1. DELETE FROM X‬‬
‫)"‪VALUES (1, 1, "YES‬‬ ‫‪WHERE d > 40‬‬
‫‪4. UPDATE X SET a = d‬‬ ‫‪3. UPDATE Y SET m = p‬‬
‫"‪WHERE e = "U1‬‬ ‫"‪WHERE q = "NO‬‬

‫נימוק‪:‬‬
‫תשובה ‪ - 1‬הפעולה תגרום למחיקת הרשומה הרביעית ב‪ ,X-‬למרות שב‪ Y-‬יש רשומה עם מפתח זר שמצביע עליה‬
‫תשובה ‪ – 2‬הפעולה תגרום להוספת רשומה עם ערך ‪ NULL‬במפתח הראשי‪ ,‬כיוון שבהגדרה חסר השדה ‪n‬‬
‫תשובה ‪ – 3‬הפעולה תגרום לכך שברשומה השנייה המפתח יהיה הצירוף (‪ )2,2,2‬שכבר מופיע ברשומה הרביעית‬
‫תשובה ‪ – 4‬הפעולה לא תגרום הפרות יושרה‪ ,‬כיוון שאין ערכי מפתח זר שמצביעים על הרשומות שיעודכנו‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
3 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫ למודל טבלאי‬ERD ‫חלק ב – המרת‬

.‫) המשקפת נכונה את התיאור‬ERD( ‫קשרים‬-‫ יש לשרטט דיאגראמת ישויות‬,‫עבור אחד מתיאורי המקרה הבאים‬
.‫יש להגיש המרה לטבלאות של אחד המודלים – אך מומלץ לנסות להתמודד עם שניהם‬ 
.‫ אין צורך בתרשים גרפי‬.‫ השדות והמפתחות הראשיים והזרים‬,‫יש להשתמש ברישום טקסטואלי של הטבלאות‬ 
‫אין צורך להוסיף הסבר מילולי על תהליך ההמרה או על פירוש השדות‬ 

‫מודל א‬

tA denioJ
1N:
etiS remotsuC 0
N:
1:1 1:1dengissA
e• tiS noitaleR DI remotsuC

ytiC
• epyT
• emaN

etaD kroW

htgneL
• etaD nioJ

eloR

staeS
• 1
N:
1:1

sretsigeR
yb decalP
1
N: 0
N:
teB 1N: 1:1 1N: 1:1
kcarT
ecaR no decalP DI •teB ycnegA
kcarT
• • BetaD
te
TD ecaR
• rebmuN kcaB• 1:1 1N:tnuomA
• DI ycnegA

epyT ecaR
• 1:1 gnimiT
• oitaR •teB sserddA

stekciT
• ecalP
• 1:1 enohP

yralaS rediR

nimdA
1N: 1
N:
yralaS
• eeyolpmE
1:1
esroH ta setepmoC
D eeyolpmE
DI •
ot dengissA 1:1 rediR emaN

DI esroH
• etaD tratS

emaN
• thgieH

etadhtriB
• thgieW

rediR
• etaD
-

:‫המרה למודל טבלאי‬


 SITES (Site, City, Length, Seats)
 HORSES (Horse ID, Name, Birthdate)
 AGENCIES (Agency ID, Address, Phone)
 CUSTOMERS (Customer ID, Name, Join Date, Agency ID (AGENCIES))
 RELATIVES (Customer ID (CUSTOMERS), Relative ID (CUSTOMERS), Type)
 EMPLOYEES (Employee ID, Name, Start Date)
 ADMINISTRATORS (Administrator ID (Employee), Salary)
 ASSIGNMENTS (Agency ID (AGENCIES), Administrator ID (ADMINISTRATORS),
WorkDate, Role)
 RIDERS ( Rider ID (RIDERS), Height, Weight, Rider Date)
 RACES (Site (SITES), Race DT, Race Type, Tickets)
 TRACKS ({Site, RaceDT} (Races), Track, Back Number, Timing, Place, Rider Salary,
Rider ID (RIDERS), Horse ID (HORSES))
 BETS (Bet ID, Bet Date, Amount, Bet Ratio, {Site, RaceDT, Track) (TRACKS),
Customer ID (CUSTOMERS), {Agency ID, Administrator ID, Work Date}
(ASSIGNMENTS))
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
3 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫מודל ב‬

hcnarB 0N
: 1:1
1:1ta detsoP tnemngissA eeyolpmE
DI hcnarB
• 1N:
rosivrepuS
ytiC
• etaD tratS
• DI eeyolpmE

etaD hcnarB
• etaD dnE
• emaN

1:1
yB deganaM
ralaS
• y nemyolpmE
1:1 • taD
t e

1N:
remotsuC oiloftroP
DI remotsuC
• 1N: DI1oiloftroP
N
: • 1N
: seldnaH 1:1
emaN
• pihsrenwO etaD oiloftroP
• tnegA
liamE
• oitaR
• launnA
• ]sesruoC[

nioJ
• taD e 1N: knaR

0N
: etaD knaR

kcotS
DI kcotS

0N: mriF
• tivitcA y
etaD kcotS
• 1:1 tnemtsevnI
kcolB etaD ytivitcA
• ediS

kcolB
• egnahcxE ecirP
• ytitnauQ

1N:
etaD tinU
• s
DI egnahcxE

0N : 1:1
yrtnuoC

•eeF

:‫המרה למודל טבלאי‬


 BRANCHES (Branch ID, City, Branch Date)
 CUSTOMERS (Customer ID, Name, Email, Join Date)
 STOCKS (Stock ID, Firm, Stock Date)
 EXCHANGES (Exchange ID, Country, Fee)
 ACTIVITIES (Stock ID (STOCKS), Exchange ID (EXCHANGES), Activity Date, Price,
Units)
 EMPLOYEES (Employee ID, Name, Employment Date)
 ASSIGNMENTS (Employee ID (EMPLOYEES), Start Date, End Date, Salary, Branch ID
(BRANCHES), Supervisor ID (EMPLOYEE))
 AGENTS (Agent ID (EMPLOYEES), Rank, Rank Date)
 COURSES (Agent ID (AGENTS), Course)
 PORTFOLIOS (Portfolio ID, Portfolio Date, Annual, Branch ID (BRANCHES), Agent ID
(AGENTS)
 OWNERSHIPS (Customer ID (CUSTOMERS), Portfolio ID (PORTFOLIOS), Ratio)
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
‫פתרון תרגיל בית מס' ‪3‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫חלק ג – יישום מודל טבלאי‬


‫בחלק זה תממשו בסיס נתונים שנשתמש בו להמשך גם לתרגילי הבית הבאים‪ ,‬ולתרגול יישומי של שפת ‪.SQL‬‬
‫בסיס הנתונים משקף פעילות של חברה המשווקת מוצרי הלבשה וספורט ( ‪ .)Products‬לקוחות החברה (‬
‫‪ )Customers‬הן חנויות בכל רחבי העולם‪ .‬הלקוחות מבצעים הזמנות ( ‪ ,)Orders‬באמצעות עובדי החברה (‬
‫‪ ,)Employees‬ובכל הזמנה עשויים להיות כלולים מספר פריטים (‪.)Details‬‬
‫הנתונים מאורגנים על פי הסכמה הטבלאית הבאה‪:‬‬ ‫•‬
‫‪• Products ( ProductID, ProductName, Supplier, Category, QuantityPerUnit, UnitPrice,‬‬
‫) ‪UnitsInStock, UnitsOnOrder‬‬
‫מוצרים‪ :‬קוד המוצר‪ ,‬שם המוצר‪ ,‬קוד הספק‪ ,‬קוד הקטגוריה‪ ,‬כמות ליחידת מוצר‪ ,‬מחיר יחידת מוצר‪ ,‬מספר‬ ‫•‬
‫היחידות במלאי‪ ,‬מספר היחידות המוזמנות‬
‫‪• Customers ( CustomerID, CompanyName, ContactName, Address, City, PostalCode, Country,‬‬
‫) ‪Phone, Fax‬‬
‫לקוחות‪ :‬קוד הלקוח‪ ,‬שם החברה‪ ,‬איש הקשר‪ ,‬כתובת‪ ,‬עיר‪ ,‬מיקוד‪ ,‬מדינה‪ ,‬מס' טלפון‪ ,‬מס' פקס‬ ‫•‬
‫‪• Employees ( EmployeeID, LastName, FirstName, Title, HireDate, Office, Extension, ReportsTo‬‬
‫) ‪(Employees), YearSalary‬‬
‫עובדים‪ :‬קוד העובד‪ ,‬שם משפחה‪ ,‬שם פרטי‪ ,‬משרה‪ ,‬תאריך תחילת עבודה‪ ,‬משרד‪ ,‬שלוחה‪ ,‬קוד המנהל לו‬ ‫•‬
‫העובד מדווח‪ ,‬משכורת שנתית‬
‫‪• Orders ( OrderID, OrderDate, CustomerID ( Customers ), EmployeeID ( Employees ),‬‬
‫) ‪ShipperID, Freight‬‬
‫הזמנות‪ :‬קוד ההזמנה‪ ,‬תאריך הזמנה‪ ,‬קוד הלקוח‪ ,‬קוד העובד‪ ,‬קוד חברת המשלוחים‪ ,‬דמי המשלוח‬ ‫•‬
‫)‪• Details (OrderID (Orders), ProductID (Products), UnitPrice, Quantity, Discount‬‬
‫פריטי הזמנה‪ :‬קוד ההזמנה‪ ,‬קוד המוצר‪ ,‬מחיר ליחידה‪ ,‬כמות‪ ,‬שיעור ההנחה‬ ‫•‬
‫קובץ ה‪ Excel-‬המצורף מכיל את הנתונים בהם יש להשתמש לתרגיל‪ .‬חשוב להתבונן בקובץ ובתכולתו ולהבין‬
‫את הנתונים היטב לפני שניגשים לביצוע‪.‬‬

‫‪ .1‬הקמת טבלאות בסיס הנתונים בשרת והזנת הנתונים‬


‫יש לממש בשרת ה‪ SQL-Server -‬את טבלאות המודל‪ .‬יש לבנות סדרת פקודות ‪ ,CREATE TABLE‬אחת לכל‬
‫טבלה‪ ,‬להריצן ולוודא שהטבלאות נוצרו באופן תקין בשרת‪.‬‬
‫חשוב להגדיר במדויק את שמות הטבלאות והשדות‪ ,‬בהתאם לשמות המוגדרים במבנה שתואר לעיל –‬ ‫•‬
‫תרגילים ודוגמאות שיפורסמו בהמשך יסתמכו על שמות אלו!‬
‫יש להגדיר בקוד את כל המפתחות הראשיים והמפתחות הזרים‪ ,‬בהתאם למודל המתואר‬ ‫•‬
‫רמז‪ :‬אחד המפתחות הזרים מעט יותר "טריקי" מהאחרים‪ ,‬ויש לחשוב מה הדרך הנכונה להגדירו‪.‬‬ ‫‪o‬‬
‫בעת הגדרת השדות‪ ,‬יש לתת את הדעת להיבטים חשובים‪ ,‬כגון‪:‬‬ ‫•‬
‫מהו סוג הנתונים (‪ )Data Type‬הנכון לכל שדה?‬ ‫‪o‬‬
‫האם יש שדות שכדאי להגדיר עבורם אילוצי ‪ NULL‬או ערכי ברירת מחדל ?‬ ‫‪o‬‬
‫האם יש שדות שכדאי להגדיר עבורם אילוצי פורמט‪ ,‬או בדיקות תקינות ?‬ ‫‪o‬‬
‫לאחר הרצת פקודות ה‪ ,”Create Table“-‬עליכם לטעון את כל הטבלאות בנתונים המצויים בקובץ ה‪.EXCEL-‬‬
‫ניתן לעשות זאת על ידי פעולת "‪ ,"Cut and Paste‬כפי שהודגם בהרצאה‪.‬‬ ‫•‬
‫חשוב לוודא שכל הרשומות נקלטו כראוי‬ ‫•‬
‫ניתן להשתמש לצורך הבדיקה בפקודת ‪ ,>SELECT COUNT (*) FROM <Table Name‬המחזירה‬ ‫‪o‬‬
‫כפלט את מספר הרשומות בטבלה‪ ,‬ולוודא שמספר הרשומות שהתקבל תואם למספר הרשומות בקובץ‪.‬‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
3 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

.‫ ששמשה להקמת בסיס הנתונים‬CREATE TABLE ‫יש לכלול בפתרון המטלה את סדרת פקודות‬

‫ הנדרשות‬CREATE TABLE -‫פקודות ה‬

CREATE TABLE PRODUCTS (


ProductID Int NOT NULL PRIMARY KEY,
ProductName Varchar (50) NULL,
Supplier Int NULL,
Category Int NULL,
QuantityPerUnit Int NULL,
UnitPrice Money NULL,
UnitsInStock Int NULL,
UnitsInOrder Int NULL
)

CREATE TABLE CUSTOMERS (


CustomerID Int NOT NULL PRIMARY KEY,
CompanyName Varchar (50) NULL,
ContactName Varchar (50) NULL,
Address Varchar (100) NULL,
City Varchar (50) NULL,
PostalCode Varchar (20) NULL,
Country Varchar (20) NULL,
Phone Varchar (30) NULL,
Fax Varchar (30)
)

CREATE TABLE EMPLOYEES (


EmployeeID Int NOT NULL PRIMARY KEY,
LastName Varchar (30) NULL,
FirstName Varchar (30) NULL,
Title Varchar (30) NULL,
HireDate Date NULL,
Office Int NULL,
Extension Int NULL,
ReportsTo Int NULL,
YearSalary Money NULL
)

‫את המפתח הזר הרקורסיבי – נוח יותר להוסיף לאחר שהטבלה כבר מאוכלסת בנתונים‬

ALTER TABLE EMPLOYEES


ADD CONSTRAINT fk_Manager
FOREIGN KEY (ReportsTo)
REFERENCES EMPLOYEES (EmployeeID)
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
‫פתרון תרגיל בית מס' ‪3‬‬ ‫המחלקה להנדסת תעשיה וניהול‬

‫‪CREATE‬‬ ‫‪TABLE‬‬ ‫( ‪ORDERS‬‬


‫‪OrderID‬‬ ‫‪Int‬‬ ‫‪NOT NULL‬‬ ‫‪PRIMARY KEY,‬‬
‫‪OrderDate‬‬ ‫‪Date‬‬ ‫‪NULL,‬‬
‫‪CustomerID‬‬ ‫‪Int‬‬ ‫‪NULL,‬‬
‫‪EmployeeID‬‬ ‫‪Int‬‬ ‫‪NULL,‬‬
‫‪ShipperID‬‬ ‫‪Int‬‬ ‫‪NULL,‬‬
‫‪Freight‬‬ ‫‪Money‬‬ ‫‪NULL‬‬

‫‪CONSTRAINT‬‬ ‫‪fk_Customer‬‬
‫‪FOREIGN KEY‬‬ ‫)‪(CustomerID‬‬
‫‪REFERENCES‬‬ ‫‪CUSTOMERS(CustomerID),‬‬

‫‪CONSTRAINT‬‬ ‫‪fk_Employee‬‬
‫‪FOREIGN KEY‬‬ ‫)‪(EmployeeID‬‬
‫‪REFERENCES‬‬ ‫)‪EMPLOYEES(EmployeeID‬‬
‫)‬

‫‪CREATE‬‬ ‫( ‪TABLE DETAILS‬‬


‫‪OrderID‬‬ ‫‪Int‬‬ ‫‪NOT NULL,‬‬
‫‪ProductID‬‬ ‫‪Int‬‬ ‫‪NOT NULL,‬‬
‫‪UnitPrice‬‬ ‫‪Money‬‬ ‫‪NULL,‬‬
‫‪Quantity‬‬ ‫‪Int‬‬ ‫‪NULL,‬‬
‫‪Discount‬‬ ‫‪Real‬‬ ‫‪NULL‬‬

‫‪CONSTRAINT‬‬ ‫‪pk_Details‬‬
‫‪PRIMARY KEY‬‬ ‫‪(OrderID, ProductID),‬‬

‫‪CONSTRAINT‬‬ ‫‪fk_Order‬‬
‫‪FOREIGN KEY‬‬ ‫)‪(OrderID‬‬
‫‪REFERENCES‬‬ ‫‪ORDERS(OrderID),‬‬

‫‪CONSTRAINT‬‬ ‫‪fk_Prodcuct‬‬
‫‪FOREIGN KEY‬‬ ‫)‪(ProductID‬‬
‫‪REFERENCES‬‬ ‫)‪PRODUCTS (ProductID‬‬
‫)‬

‫‪ .2‬הוספת אילוצי מרחב ערכים‬


‫בעזרת פקודות ‪ SQL‬מתאימות‪ ,‬יש להוסיף למודל שבניתם את אילוצי מרחב הערכים הבאים‪.‬‬

‫א‪ .‬בעזרת פקודות ‪ ALTER TABLE‬מתאימות ‪ -‬עליכם להוסיף אילוצי בדיקה ( ‪ )CHECK‬המוודא שלכל השדות‬
‫המספריים שמבטאים היקף פעילות עסקית מוגדרים טווחי ערכים מתאימים‬
‫שדות שמבטאים מספר יחידות‪ ,‬מחיר או סכום – אינם יכולים להיות שליליים‬ ‫•‬
‫שדות שמבטאים שיעור הנחה – צריכים לקבל ערך בטווח שבין ‪ 0‬ל‪.1-‬‬ ‫•‬

‫ב‪ .‬יש להוסיף לבסיס הנתונים טבלאות חיפוש (‪ )LOOKUP TABLES‬מתאימות עבור השדות הבאים‪ ,‬להזין‬
‫אליהן את הערכים הנדרשים‪ ,‬ולחבר אותן כנדרש באמצעות מפתח זר‪.‬‬
‫בטבלת המוצרים‪ :‬רשימת ספקים ורשימת קטגוריות‬ ‫•‬
‫בטבלת הלקוחות‪ :‬רשימת ערים‬ ‫•‬
‫בטבלת העובדים‪ :‬רשימת משרדים‬ ‫•‬
‫בטבלת ההזמנות‪ :‬רשימת חברות משלוחים‬ ‫•‬
‫בסיסי נתונים‬ ‫אוניברסיטת בן גוריון בנגב‬
3 '‫פתרון תרגיל בית מס‬ ‫המחלקה להנדסת תעשיה וניהול‬

.‫יש לכלול בהגשת הפתרון למטלה את הפקודות בעזרתן יצרתם את אילוצי מרחב הערכים‬

‫דוגמא להוספת אילוץ בדיקה‬

ALTER TABLE PRODUCTS


ADD CONSTRAINT Ck_Quantity
CHECK (QuantityPerUnit > 0)

‫דוגמא להוספת טבלת חיפוש‬

CREATE TABLE CITIES (


City Varchar (50) PRIMARY KEY NOT NULL )

INSERT INTO CITIES


SELECT DISTINCT City
FROM CUSTOMERS

ALTER TABLE CUSTOMERS


ADD CONSTRAINT Fk_City
FOREIGN KEY (City)
REFERENCES CITIES (City)

You might also like