בסיסי נתונים ושפת SQL הרצאה #8 אורן דבוסקין telhaidb@cielago.com
מפגש #8 חזרה - פקודות לעדכון בסיס הנתונים. שלבים בעיצוב בסיס הנתונים. תרגול ב Access.
insert - הוספה הוספת שורה (בודדת) לבסיס הנתונים: רישום הטבלה אליה יש להוסיף את השורה החדשה, ואת הערכים שיתווספו לשורה. מבנה כללי: INSERT INTO [table-name] {( [column-name, … ] )} VALUES ( [value, …. ] ) value = constant * אין צורך בשימוש ב values אם מכניסים ערכים לכל העמודות בטבלה.
insert – הוספה מרובת שורות הוספת מרובת שורות לבסיס הנתונים. מאפשר העתקת נתונים מטבלה אחת והכנסה לטבלה אחרת. INSERT INTO [table-name] {( [column-name, … ] )} [QUERY]
Insert - דוגמאות insert into customers (customer_id, customer_name) values ( 4, ‘Oren’ ); insert into purchases values ( 1,1,now(), 5 ); (customer_id, product_id) values (5,1);
multi row insert - דוגמא insert into purchases_backup select * from purchases where purchase_date between ‘1/1/2011’ and ’31/12/2011’; insert into products (product_id, product_name, category, price ) select 2012000+product_id, ‘2012_’+product_name, category, price*2 from products
update - עדכון עדכון ערכים בשורה בודדת, או בו-זמנית במספר שורות המקיימות תנאי לוגי מסויים. מבנה כללי: זהירות לא לעדכן בטעות את כל הטבלה! UPDATE [table-name] [SET column-name = expression, … ] { WHERE [condition] }
update - דוגמאות עדכון מבצע.... update products set discount = 0.95; נניח והוספנו ללקוחות עמודה חדשה: מספר רכישות. אפשר לעדכן את מספר הרכישות לכל לקוח. update customers c set num_purchases = ( select count(*) from purchases p where c.customer_id = p.customer_id )
delete - מחיקה מחיקת שורה בודדת, או מחיקה בו-זמנית של מספר שורות המקיימות תנאי לוגי מסויים. מבנה כללי: זהירות לא למחוק בטעות את כל הטבלה! DELETE FROM [table-name] { WHERE [condition] }
delete - דוגמאות מחיקת לקוחות לא נאמנים... delete customers where num_purchases = 0; מחיקת מכירות שאין להם לקוח (תיקון בסיס הנתונים): delete purchases where customer_id not in ( select customer_id from customers) delete purchases p where not exists ( select 1 from customers c where c.customer_id = p.customer_id)
עדכונים - דגשים פעולת העדכון צריכה לעמוד בחוקיות: שדות חובה מפתח ראשי מפתח זר חוקיות אחרת שנקבעה עמודות שאינן נכללות בהוספה יקבלו: ערך ריק null ערך ברירת מחדל
שלבים בעיצוב בסיס הנתונים תרגום מודל לוגי לטבלאי בחירת טבלאות בחירת עמודות וטיפוס נתונים. חוקיות בסיס הנתונים שדות חובה ערכי ברירת מחדל מפתחות: ראשיים, חיצוניים (זרים) תלות בין טבלאות נירמול בסיס הנתונים
נרמול בסיס הנתונים תהליך שמטרתו יצירת אוסף טבלאות המייצגות את המודל הלוגי בצורה מדויקת ואמינה, והורדת כפילות נתונים. התהליך: פירוק ישויות לטבלאות. הסרת כפילויות. הגדרת הקשרים/יחסים בין הטבלאות.
יחסים בין הטבלאות הגדרת יחסים בין הטבלאות (relationships): שמירה על תקינות המידע מאפשר לבצע פעולות אוטומטיות בעדכון/מחיקה (מחיקת שורות "בנים", עדכון ערך בשדות, וכו).
דוגמא לכפילות טבלת הרוכבים riders UCInum fullname birthdate team nation height weight 100 Alberto Contador 1/1/1980 Saxo Bank Spain 176 62 200 Lance Armstrong 5/1/1973 Radio Shack USA 178 63 300 Miguel Indurain 1/20/1968 Banesto 185 70 400 Bjran Riis 1/1/1968 Telekon Germany 190 74 450 Robbie McEwen 8/20/1985 Lotto Australia 175 65
דוגמא לכפילות riders UCInum fullname birthdate team nation height weight 100 Alberto Contador 1/1/1980 Saxo Bank Spain 176 62 200 Lance Armstrong 5/1/1973 Radio Shack USA 178 63 300 Miguel Indurain 1/20/1968 Banesto 185 70 400 Bjran Riis 1/1/1968 Telekon Germany 190 74 450 Robbie McEwen 8/20/1985 Lotto Australia 175 65
דוגמא לכפילות riders UCInum fullname birthdate team nation height weight 100 Alberto Contador 1/1/1980 Saxo Bank Spain 176 62 200 Lance Armstrong 5/1/1973 Radio Shack USA 178 63 300 Miguel Indurain 1/20/1968 Banesto 185 70 400 Bjran Riis 1/1/1968 Telekon Germany 190 74 450 Robbie McEwen 8/20/1985 Lotto Australia 175 65
פתרון: יצירת טבלאות משנה פתרון כל כפילות על ידי יצירת טבלאות משנה
דוגמא 2: טבלת התוצאות results UCInum racename racedate place points 100 Tour de France 7/1/2010 1 Giro D' Italia 5/1/2010 95 Paris Nice 4/1/2010 2 50 200 7/1/1999 7/1/2000 7/1/2001 7/1/2002 7/1/2003 7/1/2004 7/1/2005 Amstel Gold Race 4/1/2003 4 20 4/1/2004 70 Olympics 10/1/2000 3 300 5/1/1994 400 Tour De France 7/1/1996 Tour De FRANCE 7/1/1995 75
תרגיל כיתה פקודות עדכון, נרמול בסיס נתונים
שיעור הבא פקודות DDL. נושאים מתקדמים.
תרגיל בית #5 תרגול נרמול בסיס הנתונים. הגשה: 22/1