none
trigger vs primry key or uniq RRS feed

  • שאלה

  •  שלום לכולם ,

     השאלה שלי כזאת   אם אני בודק  בטריגר  שאני יצור על  שדה קיים כדי לקיים יוניקיות של שדה  או שם יוניק קונסריינט

     האם יש הבדל  בביצועים ?  ואם כן האם ההבדלים משמעותיים או שזה זניח?

    שרון

     

    יום רביעי 09 נובמבר 2011 15:44

תשובות

  • הי,

    ראשית ע"מ להבטיח ייחודיות של שדה יש לך כמה דרכים מקובלות והשאלה היא למה לך להשתמש ב- trigger?

    דרכים לעקוף יחודיות של שדה:

    1. הגדרתו כ- Primary Key.

    2. הגדרת Unique Constraint על השדה.

    3. הגדרת Unique index על השדה.

    4. בדיקה עצמית ע"י Trigger (לשיטתך), עבור Insert\ update.

    ההבדל העיקרי בין השלושה הראשונים לרביעי זה מתי מתבצעת הבדיקה, במקרה של trigger כמובן לאחר ההכנסה.

    כלומר ראשית תכנס הרשומה ורק אח"כ תתבצעה בדיקה האם הערך יחודי.

    בכל מקרה ע"מ שהבדיקה תהיה יעילה אתה תצטרך לבנות אינדקס על העמודה ולכן אתה יכול להגדיר אותו יחודי ואז לא תצטרך trigger.

    סנריו נוסף:

    נניח שיש לך כבר primary key בטבלה ואתה צריך לבדוק יחודיות של כמה שדות, ובהנחה שלא שווה לך לבנות אינדקס ייחודי על הצירוף הנ"ל, מה שאתה יכול לעשות זה Check constraint מה שיגרור לאחר ה- Insert בדיקה של רשומה אחרי רשומה, גם ב- Bulk load, את היחודיות שלה, או להשתמש ב- trigger שאחרי כניסת הרשומות עושה group by ובודק שאין יותר מקבוצה אחת.

     

    ובקיצור ע"מ לוודא יחודיות של עמודה ,בהנחה שאתה יכול לאנדקס אותה, כדי להשתמש באחת מהאפשרויות הראשונות שציינתי.

    ניתן להרחיב כמובן, מה ההבדלים בבדיקת ייחודיות לגבי data types שונים, גודל ה- data type, עמודה שמוגדרת Nullable וכו...

    מקווה שעזרתי,

     

     

     

     


    אסף שלם
    • נערך על-ידי Assaf_Shalem יום רביעי 09 נובמבר 2011 19:15
    • הוצע כתשובה על-ידי Ami Levin יום שישי 11 נובמבר 2011 06:03
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 22 נובמבר 2011 10:03
    יום רביעי 09 נובמבר 2011 19:12