Download presentation
Presentation is loading. Please wait.
1
מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים
2
מסדי נתונים תשס " ג 2 טיפול בהפרת אילוץ טיפול בהפרת אילוץ מוגבל לארבעה הבאים : 1.on action set null 2.on action set default 3.on action no action 4.on action cascade Actions: insert, update, delete Number 3 (no action) is the default
3
מסדי נתונים תשס " ג 3 דוגמה CREATE TABLE Reserves ( sid INTEGER, bid INTEGER, day DATE, FOREIGN KEY (sid) REFERENCES Sailors ON DELETE CASCADE ON UPDATE SET NULL, FOREIGN KEY (bid) REFERENCES Boats ON DELETE SET DEFAULT ON UPDATE NO ACTION );
4
מסדי נתונים תשס " ג 4 Triggers טיפול בהפרת אילוצים הוא מוגבל הגדרת אילוצים היא מוגבלת ניתן לייצר פרוצדורות ב -PL/SQL פרוצדורות משוכנות במסד הנתונים וניתן להפעיל אותן על ידי קריאה להן Triggers משמשים לקריאה לפרוצדורה כתוצאה של ' אירוע ' מסוים
5
מסדי נתונים תשס " ג 5 פעולת Trigger ניתן להפעיל Trigger בעקבות אירוע של הכנסת רשומה (insert), ביטול רשומה (delete) ועדכון (update) ניתן לקרוא לפרוצדורה על ידי ה -Trigger לפני או אחרי או במקום הפעולה ניתן לקרוא לפרוצדורה עבור כל ביצוע פעולה וניתן לקרוא לפרוצדורה עבור כל ביצוע שינוי ברשומה
6
מסדי נתונים תשס " ג 6 צורה כללית של Trigger CREATE [or REPLACE] TRIGGER trig_name {BEFORE | AFTER | INSTEAD OF} {DELETE | INSERT | UPDATE [of column [, column]...] } [or {DELETE | INSERT | UPDATE [of column [, column]...] }...] on {table_name | view_name} FOR EACH {ROW | STATEMENT} [WHEN (condition)] PL/SQL block
7
מסדי נתונים תשס " ג 7 גיבוי נתונים CREATE TRIGGER backup_sailors_trig AFTER UPDATE of Rating on Sailors FOR EACH ROW WHEN (old.rating < new.rating) BEGIN INSERT INTO Sailors_Backup VALUES (:old.sid, :old.sname, :old:age, :old:rating); END / מדוע AFTER?
8
מסדי נתונים תשס " ג 8 שמירת סגנון (Upper Case) CREATE TRIGGER upper_case_program_type_trig BEFORE INSERT or UPDATE on Program_Variables FOR EACH ROW BEGIN :new.type := UPPER(:new.type); END / מדוע BEFORE?
9
מסדי נתונים תשס " ג 9 קריאה לפרוצדורה CREATE TRIGGER notify_ta_trig AFTER INSERT or UPDATE or DELETE on Db_Grades FOR EACH STATEMENT WHEN(User <> ‘ db ’ ) BEGIN call sendEmail(User || ‘ trying to access table Db_Grades ’ ); END /
10
מסדי נתונים תשס " ג 10 פעולות שינוי על תצפיות (views)
11
מסדי נתונים תשס " ג 11 שינוי טבלאות בסיס דרך תצפית מעונינים בפעולות שינוי (insert, update, delete) על תצפיות (views) המערכת מאפשרת ביצוע פעולות השינוי רק כאשר מתקיימים תנאים מסוימים שיפורטו להלן
12
מסדי נתונים תשס " ג 12 תנאים להפעלת שינוי על view 1. על ה -view להיות מוגדר על טבלה יחידה 2. לא ניתן לבצע פעולת הוספה (insert) אם טבלת הבסיס מכילה עמודות שאינן מופיעות ב -view ושמוגדרות לא לקבל ערכי null 3. לא ניתן לבצע פעולת הוספה (insert) או פעולת עדכון (update) אם עמודות ה -view שפקודה מתייחסת אליהן מכילות ביטוי חשבוני או פונקציה 4. לא ניתן לבצע פעולת שינוי (insert, update, delete) על view שמכיל group by 5. לא ניתן לבצע פעולת שינוי (insert, update, delete) על view שמכיל distinct
13
מסדי נתונים תשס " ג 13 הכנסת נתונים לתצפיות המבוססות על מספר טבלאות במקרים מסוימים ניתן לבצע הכנסת נתונים ל -view שמוגדר על יותר מטבלה אחת המערכת (Oracle) קובעת אילו טבלאות משמרות מפתח ב -view אם ה -view כולל מספיק אטריביוטים מהטבלה שאליה הנתונים מוכנסים לזיהוי המפתח הראשי של הטבלה ניתן להכניס שורה לטבלה דרך ה -view בהמשך נראה צורה טובה יותר לטיפול בבעיה !
14
מסדי נתונים תשס " ג 14 הוספת שורות חוקית CREATE VIEW OldSailors as SELECT * FROM Sailors WHERE age > 50; INSERT INTO OldSailors(sid,sname,age,rating) VALUES(12, ‘ Joe ’,51,10); INSERT INTO OldSailors(sid,sname,age,rating) VALUES(12, ‘ Mary ’,49,10);
15
מסדי נתונים תשס " ג 15 הוספת שורות לא חוקית CREATE VIEW SailorsInfo as SELECT sname, rating FROM Sailors WHERE age>50; INSERT INTO SailorsInfo VALUES( ‘ Joe ’,10); לא חוקי!
16
מסדי נתונים תשס " ג 16 עדכון חוקי CREATE VIEW SailorsInfo as SELECT sname, rating FROM Sailors WHERE age>50; UPDATE SailorsInfo SET rating = 6 WHERE sname = ‘ Joe ’ ; UPDATE Sailors SET rating = 6 WHERE sname = ‘ Joe ’ and age>50;
17
מסדי נתונים תשס " ג 17 עדכון לא חוקי CREATE VIEW SailorsInfo2 as SELECT sname, rating + age as ra FROM Sailors WHERE age>50; UPDATE SailorsInfo2 SET ra = 37 WHERE sname = ‘ Joe ’ ; לא חוקי!
18
מסדי נתונים תשס " ג 18 ביטול שורות חוקי CREATE VIEW SailorsInfo2 as SELECT sname, rating + age as ra FROM Sailors WHERE age>50; DELETE FROM SailorsInfo2 WHERE sname = ‘ Joe ’ and ra = 56; DELETE FROM Sailors WHERE sname = ‘ Joe ’ and (rating + age) >50 and age > 50;
19
מסדי נתונים תשס " ג 19 דוגמאות נוספות UPDATE OldSailors SET rating = 10; DELETE FROM OldSailors; UPDATE OldSailors SET age = age +1 WHERE age <= 50; מה יקרה ?
20
מסדי נתונים תשס " ג 20 שילוב של Triggers עם Views נניח שנתון היחס הבא המכיל הערכות של סטודנטים לקורסים שהם לקחו ( כל השדות not null) Recommend(login, course, rating) מוגדרות שתי התצפיות הבאות : – ציוני קורסים Ratings(course, rating) – ציונים שנתן המשתמש הנוכחי לקורסים User_Ratings(course, rating)
21
מסדי נתונים תשס " ג 21 ה -Views CREATE View User_Ratings as SELECT course, rating FROM Recommend WHERE login = user; CREATE View Ratings as SELECT course, rating FROM Recommend;
22
מסדי נתונים תשס " ג 22 הכנסת נתונים לא ניתן לבצע הכנסת נתונים ישירה לטבלת Recommends כי לסטודנטים לא נתונות ההרשאות לכך לא ניתן להשתמש בתצפיות להכנסת הנתונים כי השדה login מוגדר כ -not null CREATE TRIGGER insert_rating INSTEAD of INSERT on User_Ratings for each row begin insert into Recommend(login, course, rating) values(User, :new.course, :new.rating); end;
23
מסדי נתונים תשס " ג 23 שימוש ב -Triggers לשינוי Views מורכבים Oracle לא מאפשר הכנסת נתונים ליותר מטבלה אחת דרך התצפית Oracle מרשה הכנסת נתונים לתצפיות שמבוססות על מספר טבלאות בעזרת Triggers CREATE VIEW SailorsReserves as SELECT S.sid, sname, rating, age, bid, date FROM Sailors S, Reserves R WHERE S.sid = R.sid;
24
מסדי נתונים תשס " ג 24 לא ניתן לבצע הכנסת נתונים ישירות לתצפית מורכבת זו הכנסת נתונים לא חוקית כי מנסים להכניס נתונים לתצפית שמבוססת על שתי טבלאות בנוסף, אין כאן ערך עבור sid של היחס Reserves אבל עמודה זו מוגדרת כ -not null בהיותה חלק מהמפתח הראשי של Reserves INSERT INTO SailorsReserves(sid,sname,rating,age,bid,date) VALUES (1, ’ Joe ’, 10, 50, 103, ’ 10-10-01 ’ );
25
מסדי נתונים תשס " ג 25 שימוש ב -Trigger להכנסת הנתונים CREATE TRIGGER insert_sailors_reserves_trig INSTEAD of INSERT on SailorsReserves for each row begin insert into Sailors(sid, sname, rating, age) values(:new.sid, :new.sname, :new.rating, :new.age); insert into Reserves(sid, bid, date) values(:new.sid, :new.bid, :new.date); end;
26
מסדי נתונים תשס " ג 26 טיפול בערכי Null
27
מסדי נתונים תשס " ג 27 מה קורה בשאילתות המכילות ערכי null? כל פעולה אריתמטית (+,-,*,/,...) שאחד הצדדים בה שווה ל -null מחזירה null הערכת ביטויים לוגיים נעשית בעזרת לוגיקה של שלושה ערכים (three-valued logic) הכוללת את ערכי האמת : True, False, Unknown כל השוואה (=,,<>, =) שלפחות אחד הצדדים בה ערכו null מחזירה ערך Unknown
28
מסדי נתונים תשס " ג 28 דוגמא נניח שמתקיים שהערך של משתנה x הוא null מה יהיה הערך של הביטויים הבאים ? –x = 3 –null = 3 –x = x –null = null –x * 0 –null * 0
29
מסדי נתונים תשס " ג 29 לוגיקה של שלושה ערכים נותנים את הערך 1 ל -True, את הערך 0 ל - False ואת הערך 0.5 ל -Unknown פעולת and מחזירה את הערך המינימלי מבין שני הערכים הנתונים פעולת or מחזירה את הערך המקסימלי מבין שני הערכים הנתונים פעולת not מחזירה 1-value כאשר value הוא הערך הנתון
30
מסדי נתונים תשס " ג 30 שאילתות SQL שאילתות SQL פוסלות ב -Where את כל השורות שעבורן התנאי אינו מחזיר ערך אמת True שאילתות SQL פוסלות ב -Having את כל הקבוצות שעבורן התנאי אינו מחזיר ערך אמת True ניתן לבדוק האם תכונה מקבלת ערך null על ידי התנאי A IS NULL – או התנאי המשלים A IS NOT NULL
31
מסדי נתונים תשס " ג 31 מניעת איבוד מידע מעונינים במידע על שייטים והזמנות שהם ביצעו מעונינים שהמידע יכלול גם שייטים שלא ביצעו הזמנות SELECT S.sname, R.bid FROM Sailors S, Reserves R WHERE S.sid = R.sid(+) כל שורה מ -Sailors שלא מתחברת לאף שורה מ - Reserves תופיע בתוצאה עם ערכי null בעמודות Reserves
32
מסדי נתונים תשס " ג 32 מה תיתן השאילתה הבאה ? SELECT S.sname, R.bid FROM Sailors S, Reserves R WHERE S.sid = R.sid(+) UNION SELECT S.sname, R.bid FROM Sailors S, Reserves R WHERE R.sid = S.sid(+)
33
מסדי נתונים תשס " ג 33 פעולות על רב - קבוצות ( שקים )
34
מסדי נתונים תשס " ג 34 רב קבוצות ( שקים ) רב - קבוצות (multi-sets) או שקים (bags) הן קבוצות שיש בהן חזרות של איברים טבלה ב -Oracle היא למעשה רב קבוצה ולא קבוצה מדוע מערכות מסחריות מממשות יחסים כרב - קבוצות ולא כקבוצות ?
35
מסדי נתונים תשס " ג 35 פעולות תואמות לפעולות על קבוצות לפעולות על קבוצות ב -Oracle יש פעולות תואמות : Union – Union All Minus – Minus All Intersect – Intersect All Union – Union All Minus – Minus All Intersect – Intersect All
36
מסדי נתונים תשס " ג 36 שקים לדוגמאות R(A,B) = {(1,2), (3,4), (1,2), (1,2)} S(A,B) = {(1,2), (3,4), (3,4), (5,6)}
37
מסדי נתונים תשס " ג 37 סמנטיקת שקים איחוד בסמנטיקת שקים : – אם שורה מופיעה n פעמים בטבלה R ו -m פעמים בטבלה S היא תופיע m+n פעמים באיחוד הטבלאות – דוגמה : R union all S = {(1,2), (1,2), (1,2), (1,2), (3,4), (3,4), (3,4), (5,6)} R union all S = {(1,2), (1,2), (1,2), (1,2), (3,4), (3,4), (3,4), (5,6)}
38
מסדי נתונים תשס " ג 38 סמנטיקת שקים חיתוך בסמנטיקת שקים : – אם שורה מופיעה n פעמים בטבלה R ו -m פעמים בטבלה S היא תופיע min(m,n) פעמים בחיתוך הטבלאות – דוגמה : R intersect all S = {(1,2), (3,4)}
39
מסדי נתונים תשס " ג 39 סמנטיקת שקים הפרש בסמנטיקת שקים : – אם שורה מופיעה n פעמים בטבלה R ו -m פעמים בטבלה S היא תופיע max(0,n-m) פעמים בהפרש של R ו -S – דוגמה : R minus all S = {(1,2), (1,2)} S minus all R = {(3,4), (5,6)}
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.