אחזור מידע לפי 2 קרטריונים - כיצד לתכנן נכון

omtechguy

New member
אחזור מידע לפי 2 קרטריונים - כיצד לתכנן נכון

יש טבלה בשם Persons ו SP אחד בשם GetPersonDetails שמקבל PersonId ומחזיר את המידע אודות ה Person.
אני רוצה לבנות פונקציית BL נוספת שתאפשר לאחזר מידע אודות ה Person לפי Email במקום PersonId.
אני מתלבט בין מספר אפשרויות:
1. להשתמש באותו SP, לאפשר לו להציג מידע לפי מספר או לפי EMAIL (כמובן שאעביר NULL במקום הפרמטר החסר).
הייתרון - קוד במקום מרכזי ללא שכפול.
חיסרון - ביצעוים (Statistics וכו' ) ברמת ה SQL וקוד מסורבל יותר.
2. ליצור שירות ביניים (SP ו BL FUNCTION) נוספים שיאפשרו לקבל את ה personId לפי Email ואז להשתמש ב personId שקיבלתי ולהעביר לפונקציה המקורית.
ייתרון - קוד מרכזי (ללא שכפול לוגיקה), מסודר וברור יותר.
חיסרון - 2 גישות ל DB (אחת כדי לקסל את ה Person Id והשנייה כדי להביא את ה Person Details).
3. לשכפל את ה SP וליצור שירות (SP ו- BL) חדש למטרה זו.
חיסרון - שכפל קוד.
ייתרון - ביצועים.

מה דעתכם? איך אתם בד"כ עושים זאת ולמה?
כמובן ש Dynamic SQL לא בא בחשבון.
 

Royi Namir

New member
כמו כל דבר זה תלוי

3 לא בא בחשבון כי תצטרך להחזיק נעילה שתיהיה על 2 פעולות.
&nbsp
הייתי הולך על 1.
יש מספיק SWITCHES שיכולים להגיד ל SQL , כן לעשות אופטימיזצית אינדקסים למרות שהעברת NULL. ( שיהיה עדין SEEK ולא SCAN)
דיברנו על זה פה בזמנו
וכמו תמיד , הכל צריך למדוד.
צריך להריץ ולנסות ולראות איפה צוואר הבקבק - אם בכלל
 
אני הייתי בוחר ב2

אינני חושש מהפניה השניה לטבלה, כי זו פניה לפי ID.
&nbsp
הדרך הראשונה איננה טובה בעיני, כי אינני אוהב לשרשר תנאים בתוך הWHERE. יש לזה הרבה חסרונות ומעט מעלות.
 
למעלה