טריגרים

dror0548

New member
טריגרים

היי לכולם,
יש לי שדה בטבלה שאם הוא משתנה אני צריך לשנות משהו אחר
אני חשבתי לכתוב טריגר,
נאמר לי בעבודה להשתדל לא לעבוד עם טריגרים כי זה מאד כבד
כי בכל שינוי שיהיה בטבלה כם אם זה לא השדה הרלוונטי שאני בודק אז מתבצעת בדיקה האם היה שינוי
ולכן זה לא כדי

האם זה נכון?אם כן אז להשתמש רק שאין ברירה ?
 

myaron

New member
איזה סוג של DB?

באורקל נניח לא תהיה עם זה בעיה.
הבנתי לעומת זאת שב MYSQL זה אכן כבד ומומלץ לא להשתמש.

עוד שאלה היא כמה עדכונים יש על הטבלה? לפי הסדרי גודל של השינוי אפשר לדעת האם זה באמת יכול ליצור בעיה.
 

גרי רשף

New member
כל מה שאפשר עם טריגר- אפשר בלי..

את ה"משהו האחר" שצריך לשנות תוכל לשנות באמצעות שורת קוד לאחר זה שמשנה את השדה, כלומר- אפשר גם בלי..

מדוע בכל זאת עם?
נניח שיש לך טבלת משתמשים שאת חלק מהנתונים יכולים המשתמשים עצמם לשנות דרך אתר האינטרנט שאיתו הם מנהלים את פרטיהם האישיים,
צוות ה-DBA-ים הזוטרים יכולים לטפל בנתונים דרך ממשק משתמש שכתבת להם,
וגם אתה (אני מניח שאתה ה-DBA הבכיר..) משנה לפעמים נתונים באופן ישיר דרך ה-SSMS.

במקום להוסיף קוד מתאים ל"משהו האחר" גם באתר האינטרנט, גם בממשק המשתמש החלונאי, וגם לזכור לעשות זאת ידנית כשאתה עובד ישירות מול הטבלה - ניתן לכתוב טריגר ואז כל מי שיעדכן את הנתונים לא משנה איך- הטריגר יופעל אוטומטית.
אתה תצטרך רק לתחזק את הקוד של הטריגר ולא שני קודים נפרדים + לזכור לטפל בפעולות של עצמך.

דוגמה אחרת- יש תוכנה שעובדת מצויין ואסור או אי אפשר לנגוע בה, אבל אנחנו רוצים שבכל פעם שהיא משנה את X נעדכן את Y.. נכתוב טריגר וכך זה יקרה מבלי שנצטרך לשנות את הקוד הקיים.

הטענה שזה כבד מתייחסת למקרים בהם כותבים טריגר ענק שבשעה שמישהו מכניס שורה לטבלה הוא רץ ובודק פה, מעדכן שם, מוסיף מצד אחד, מוחק מצד שני וכו', והמשתמש האומלל שרק הוסיף שורה לא מבין למה זה לוקח כל כך הרבה זמן (לא יומיים אבל 3 שניות במקום אלפית שניה).
יש לזכור- הפעולה אינה מסתיימת לפני שהטריגר שהיא מפעילה מסתיים!
לפיכך אם "המשהו האחר" שאתה צריך לשנות הוא מאוד מסובך- אולי כדאי לעשות זאת בדרך אחרת- פחות אלגנטית אך גם פחות כבדה.
 

dror0548

New member
"המשהו האחר"

היי גרי
קודם כל תודה רבה על ההסבר וההשקעה
ה "המשהו האחר" הוא: אם עידכנו טבלה A שדה תאריך אז אני רוצה שבטבלה B שדה התאריך יהיה זהה
כמובן הרשומות זהות (פעולה קטנה)
תודה
 
למעלה