39
סססס סססססס ססס" ס1 More on SQL סססס סססס סססססס

מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

  • View
    239

  • Download
    5

Embed Size (px)

Citation preview

Page 1: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 1

More on SQL

קורס מסדי נתונים

Page 2: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 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

Page 3: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 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 );

Page 4: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 4

Triggers

טיפול בהפרת אילוצים הוא מוגבל•הגדרת אילוצים היא מוגבלת•PL/SQLניתן לייצר פרוצדורות ב-•

פרוצדורות משוכנות במסד הנתונים וניתן •להפעיל אותן על ידי קריאה להן

•Triggers משמשים לקריאה לפרוצדורה כתוצאה של 'אירוע' מסוים

Page 5: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 5

Triggerפעולת

בעקבות אירוע של Triggerניתן להפעיל •(, ביטול רשומה insertהכנסת רשומה )

(delete( ועדכון )update) Triggerניתן לקרוא לפרוצדורה על ידי ה-•

לפני או אחרי או במקום הפעולהניתן לקרוא לפרוצדורה עבור כל ביצוע •

פעולה וניתן לקרוא לפרוצדורה עבור כל ביצוע שינוי ברשומה

Page 6: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 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

Page 7: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 7

גיבוי נתונים

CREATE TRIGGER backup_sailors_trig

AFTER UPDATE of Rating

on Sailors

FOR EACH ROW WHEN (old.rating < new.rating)

BEGININSERT INTO Sailors_Backup VALUES (:old.sid, :old.sname, :old:age, :old:rating);

END/

?AFTER מדוע

Page 8: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 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 מדוע

Page 9: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 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/

Page 10: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 10

(viewsפעולות שינוי על תצפיות )

Page 11: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 11

שינוי טבלאות בסיס דרך תצפית

,insert, updateמעונינים בפעולות שינוי )•delete( על תצפיות )views)

המערכת מאפשרת ביצוע פעולות השינוי •רק כאשר מתקיימים תנאים מסוימים

שיפורטו להלן

Page 12: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 12

viewתנאים להפעלת שינוי על טבלה יחידה להיות מוגדר על viewעל ה-1.( אם טבלת insertלא ניתן לבצע פעולת הוספה )2.

viewהבסיס מכילה עמודות שאינן מופיעות ב-nullלא לקבל ערכי ושמוגדרות

( או פעולת insertלא ניתן לבצע פעולת הוספה )3. שפקודה view( אם עמודות ה-updateעדכון )

ביטוי חשבוני או מתייחסת אליהן מכילות פונקציה

( insert, update, deleteלא ניתן לבצע פעולת שינוי )4.group by שמכיל viewעל

( insert, update, deleteלא ניתן לבצע פעולת שינוי )5.distinct שמכיל viewעל

Page 13: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 13

הכנסת נתונים לתצפיות המבוססות על מספר טבלאות

במקרים מסוימים ניתן לבצע הכנסת נתונים • שמוגדר על יותר מטבלה אחתviewל-

משמרות ( קובעת אילו טבלאות Oracleהמערכת )•viewב-מפתח

כולל מספיק אטריביוטים מהטבלה viewאם ה-•שאליה הנתונים מוכנסים לזיהוי המפתח הראשי

של הטבלה ניתן להכניס שורה לטבלה דרך viewה-

בהמשך נראה צורה טובה יותר לטיפול בבעיה!•

Page 14: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 14

הוספת שורות חוקית

CREATE VIEW OldSailors asSELECT * 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);

Page 15: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 15

הוספת שורות לא חוקית

CREATE VIEW SailorsInfo asSELECT sname, ratingFROM SailorsWHERE age>50;

INSERT INTO SailorsInfo VALUES(‘Joe’,10);

לא חוקי!

Page 16: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 16

עדכון חוקי

CREATE VIEW SailorsInfo asSELECT sname, ratingFROM SailorsWHERE age>50;

UPDATE SailorsInfo SET rating = 6WHERE sname = ‘Joe’;

UPDATE SailorsSET rating = 6WHERE sname = ‘Joe’ and age>50;

Page 17: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 17

עדכון לא חוקי

CREATE VIEW SailorsInfo2 asSELECT sname, rating + age as raFROM SailorsWHERE age>50;

UPDATE SailorsInfo2 SET ra = 37WHERE sname = ‘Joe’; לא חוקי!

Page 18: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 18

ביטול שורות חוקיCREATE VIEW SailorsInfo2 asSELECT sname, rating + age as raFROM SailorsWHERE age>50;

DELETE FROM SailorsInfo2 WHERE sname = ‘Joe’

and ra = 56;DELETE FROM SailorsWHERE sname = ‘Joe’ and

(rating + age) >50 and age > 50;

Page 19: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 19

דוגמאות נוספות

UPDATE OldSailorsSET rating = 10;

DELETE FROM OldSailors;

UPDATE OldSailorsSET age = age +1 WHERE age <= 50;

מה יקרה?מה יקרה?

Page 20: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 20

Views עם Triggersשילוב של

נניח שנתון היחס הבא המכיל הערכות של •סטודנטים לקורסים שהם לקחו )כל

(not nullהשדות Recommend(login, course, rating)

מוגדרות שתי התצפיות הבאות:•Ratings(course, rating)ציוני קורסים –ציונים שנתן המשתמש הנוכחי לקורסים –

User_Ratings(course, rating)

Page 21: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 21

Viewsה-

CREATE View User_Ratings asSELECT course, ratingFROM RecommendWHERE login = user;

CREATE View Ratings asSELECT course, ratingFROM Recommend;

Page 22: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 22

הכנסת נתוניםלא ניתן לבצע הכנסת נתונים ישירה לטבלת •

Recommendsכי לסטודנטים לא נתונות ההרשאות לכך לא ניתן להשתמש בתצפיות להכנסת הנתונים כי השדה •

login-מוגדר כ not null

CREATE TRIGGER insert_ratingINSTEAD of INSERT on User_Ratings for each rowbegin

insert into Recommend(login, course, rating)values(User, :new.course, :new.rating);

end;

Page 23: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 23

Views לשינוי Triggersשימוש ב-מורכבים

•Oracle לא מאפשר הכנסת נתונים ליותר מטבלה אחת דרך התצפית

•Oracle מרשה הכנסת נתונים לתצפיות שמבוססות על מספר טבלאות בעזרת

TriggersCREATE VIEW SailorsReserves as

SELECT S.sid, sname, rating, age, bid, date

FROM Sailors S, Reserves R

WHERE S.sid = R.sid;

Page 24: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 24

לא ניתן לבצע הכנסת נתונים ישירות לתצפית מורכבת

זו הכנסת נתונים לא חוקית כי מנסים להכניס •נתונים לתצפית שמבוססת על שתי טבלאות

Reserves של היחס sidבנוסף, אין כאן ערך עבור • בהיותה חלק not nullאבל עמודה זו מוגדרת כ-

Reservesמהמפתח הראשי של

INSERT INTO

SailorsReserves(sid,sname,rating,age,bid,date)

VALUES (1,’Joe’, 10, 50, 103, ’10-10-01’);

Page 25: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 25

להכנסת Triggerשימוש ב-הנתונים

CREATE TRIGGER insert_sailors_reserves_trigINSTEAD of INSERT on SailorsReserves for each rowbegin 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;

Page 26: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 26

Nullטיפול בערכי

Page 27: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 27

מה קורה בשאילתות המכילות ?nullערכי

כל פעולה אריתמטית )+,-,*,/,...( שאחד •null מחזירה nullהצדדים בה שווה ל-

הערכת ביטויים לוגיים נעשית בעזרת לוגיקה של •( הכוללת את three-valued logicשלושה ערכים )

True, False, Unknownערכי האמת: כל השוואה )=,>,<,><,>=,<=( שלפחות •

מחזירה ערך nullאחד הצדדים בה ערכו Unknown

Page 28: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 28

דוגמא

הוא xנניח שמתקיים שהערך של משתנה •null

מה יהיה הערך של הביטויים הבאים?•–x = 3–null = 3–x = x–null = null–x * 0–null * 0

Page 29: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 29

לוגיקה של שלושה ערכים

0, את הערך True ל-1נותנים את הערך •Unknown ל-0.5 ואת הערך Falseל-

מחזירה את הערך המינימלי andפעולת •מבין שני הערכים הנתונים

מחזירה את הערך המקסימלי orפעולת •מבין שני הערכים הנתונים

value כאשר value-1 מחזירה notפעולת •הוא הערך הנתון

Page 30: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 30

SQLשאילתות

את כל השורות Where פוסלות ב-SQLשאילתות •Trueשעבורן התנאי אינו מחזיר ערך אמת

את כל הקבוצות Having פוסלות ב-SQLשאילתות •Trueשעבורן התנאי אינו מחזיר ערך אמת

על ידי nullניתן לבדוק האם תכונה מקבלת ערך •התנאי

A IS NULL או התנאי המשלים–

A IS NOT NULL

Page 31: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 31

מניעת איבוד מידע

מעונינים במידע על שייטים והזמנות שהם •ביצעו

מעונינים שהמידע יכלול גם שייטים שלא ביצעו •SELECT S.sname, R.bid הזמנות

FROM Sailors S, Reserves R

WHERE S.sid = R.sid(+)

שלא מתחברת לאף שורה Sailorsכל שורה מ-• null תופיע בתוצאה עם ערכי Reservesמ-

Reservesבעמודות

Page 32: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 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(+)

Page 33: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 33

פעולות על רב-קבוצות )שקים(

Page 34: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 34

רב קבוצות )שקים(

( הן bags( או שקים )multi-setsרב-קבוצות )•קבוצות שיש בהן חזרות של איברים

היא למעשה רב קבוצה Oracleטבלה ב-•ולא קבוצה

מדוע מערכות מסחריות מממשות יחסים •כרב-קבוצות ולא כקבוצות?

Page 35: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 35

פעולות תואמות לפעולות על קבוצות

יש פעולות Oracleלפעולות על קבוצות ב-•תואמות:

Union – Union All

Minus – Minus All

Intersect – Intersect All

Union – Union All

Minus – Minus All

Intersect – Intersect All

Page 36: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 36

שקים לדוגמאות

R(A,B) = {(1,2), (3,4), (1,2), (1,2)}R(A,B) = {(1,2), (3,4), (1,2), (1,2)}

S(A,B) = {(1,2), (3,4), (3,4), (5,6)}S(A,B) = {(1,2), (3,4), (3,4), (5,6)}

Page 37: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 37

סמנטיקת שקים

איחוד בסמנטיקת שקים:• m ו-R פעמים בטבלה nאם שורה מופיעה –

פעמים m+n היא תופיע Sפעמים בטבלה באיחוד הטבלאות

דוגמה:–

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)}

Page 38: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 38

סמנטיקת שקים

חיתוך בסמנטיקת שקים:• m ו-R פעמים בטבלה nאם שורה מופיעה –

פעמים min(m,n) היא תופיע Sפעמים בטבלה בחיתוך הטבלאות

דוגמה:–

R intersect all S = {(1,2), (3,4)}R intersect all S = {(1,2), (3,4)}

Page 39: מסדי נתונים תשס " ג 1 More on SQL קורס מסדי נתונים

מסדי נתונים תשס"ג 39

סמנטיקת שקים

הפרש בסמנטיקת שקים:• m ו-R פעמים בטבלה nאם שורה מופיעה –

max(0,n-m) היא תופיע Sפעמים בטבלה S ו-Rפעמים בהפרש של

דוגמה:–

R minus all S = {(1,2), (1,2)}R minus all S = {(1,2), (1,2)}

S minus all R = {(3,4), (5,6)}S minus all R = {(3,4), (5,6)}