כמה שאלות פתוחות

  • פותח הנושא rnan
  • פורסם בתאריך

rnan

New member
כמה שאלות פתוחות

SQL SERVER 2006-2008

1) האם סדר התנאים ב WHERE , משנה ? כלומר אם אני עושה הרבה תנאים לשאילתה מאד ארוכה , ו ב ישר ב WHERE אני רושם
where 1=2

האם זה בכלל יסרוק את הטבלה ?

2)אם אני מעדכן טבלה שלוקח לה שעה ( לדוגמא) להתעדכן על ידי UPDATE , ובאחד העמודות אני נותן עמודה מחושבת GETDATE , האם ה GETDATE יהיה אחיד לאורך כל העדכון או כל שורה ממש על פי הזמן REAL TIME ?

3)מה השימושים של לשים SEED INCREMENT יותר גדול מ 1 ? לדוגמא 5 ? ואז השורות ימוספרו : 1,5,10,15,20,..........

מה השימושים לזה ?
 

נתן.ל

New member
מנסה...

1. זה משנה כאשר יש לך שילובים של AND ו-OR ואז את חייב להבדיל בניהם עם שימוש בסוגריים.

2. אם אני לא טועה(לפעמים אני כן) אז הSQL מחשב את GetDate על כל שורה מחדש וכך יכנסו ערכים שונים לתוך הטבלה.

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

נתן.ל

New member
תיקון על 3

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

rnan

New member
מה שצריך להתחדש זה - הבנת הנקרא.

שים לב לתגובתו של jonjac שם

הכוונה שם היתה האם כל הביטוי מחושב פעם אחת (נמצא ב איזה CACHE) ולא מחושב כביטוי כל פעם מחדש

ואילו פה

השאלה זה האם GETDATE בשאילתות UPDATE ארוכות - מחושב כך שיכול להיות מצב שבשורה הראשונה והחאונה יהיה תאריך אחר.
 

rnan

New member
האמת

בהסתכלות שנייה לגבי שאלה ב׳ - אתה צודק

זה לא משנה אם זה ארוך או קצר

צודק - my bad ...
 

גרי רשף

New member
התשובות למיטב ידיעתי

1. הסדר אינו משנה, כמובן בכפוף לכך שאין שילוב של תנאי And ו-Or ששינוי הסדר ללא סוגריים מתאימים ישנה את כל הלוגיקה.

2. GetDate יהיה זהה בכל השורות החדשות.

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

pitoach

New member
דוגמה מעשית לשאלה 3 :

שימוש במה שנקרא מחיצות וירטואליות
בשרתי SQL בגרסת Enterprise קיימות מחיצות מובנות אבל שימוש ברעיון של מחיצות קיים כבר שנים רבות ונעשה גם בגרסאות שאין בהם מחיצות מובנות כמובן שניהול המחיצות הוירטואליות נופל עלינו המפתחים (יש לי מערכות מידע שפיתחתי למשל ומערכת שכר שפועלת בצורה זו שאציג עוד רגע שמאפשרות התקנה על גרסאות של שרתי מסדי נתונים ללא מחיצות מובנות)

הבסיס של מחיצות וירטואליות יכול להיות ונפוץ מאוד לעשות בעזרת טבלאות נפרדות עבור כל "מחיצה" (כמובן שאלו לא מחיצות מובנות ולכן נקראות מחיצות וירטואליות)

למשל אם רוצים להקים 7 מחיצות וירטואליות לפי היום בשבוע (יש לזה שימוש במערכות כבדות מאוד של מליוני רשומות שנכנסות בשנייה. אם היינו מכניסים את כל הנתונים כפי שהן לטבלה אחת היינוצריכים לבצע אינדקס מחדש על כל הטבלה והמערכת לא היתה זזה, לחילופין ניתן לעבוד על כל יום בנפרד ורק ביום המחרת כשהנתונים של היום הקודם לא יכולים כבר להישתנות אז מעבירים אותם לטבלה הסופית בצורה שאינה יוצרת שום נעילות כי עובדים על טבלה שאינה פעילה עד שבוע הבא... יותר פירוט בפעם אחרת).

במקרה זה ניתן לקבוע שטבלה ראשונה (יום א) יהיה בה שדה IDENTITY שיתחיל מ 1 ויקפוץ כל 7. בטבלה שנייה יהיה שדה דומה שיתחיל מ 2 ויקפוץ כל 7 וכן הלאה עד טבלה 7 שתתחיל ממספר 7 ותקפוץ כמובן כל 7

מה שקיבלנו זה מצב בו ניתן לגשת לנתונים כאלו הם בטבלה אחת אם רוצים. הטבלאות זהות לחלוטין במבנה שלהם וכל שאילתה פונה למשל בעזרת VIEW (ואז המשתמש לא מודע בכלל לחלוקה לטבלאות וחושב שעובד עם טבלה אחת... מחיצות וירטואליות) או ישירות לכל הטבלאות.

השדה הייחודי ממוספר בצורה רציפה ולא יכול להיות מצב שיהיה לנו חזרה על ערך מ 2 טבלאות שונות (הרי כל טבלה שומרת ערכים שונים)

כך למשל אם יכנסו לנו הרבה רשומות ביחד והן יכנסו לטבלאות השונות (בעזרת הדרך בה נבחר לנהל את המחיצות הוירטואליות... למשל התוכנה החיצונית... טריגר או כל דרך אחרת) אז התוצאה תהיה שהנתונים יכנסו למיקום הנכון ללא בעיות ובלי תלות למשל בשדה כמו זמן או שדה אחר מורכב וכבד שהיה כוללת חיבור של IDENTITY של הבטהל + נתון של מספר הטבלה... בצורה זו יש שימות ישיר רק בשדה IDENTITY

אני מקווה שהדוגמה מובנת

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

* ישנם עוד הרבה מקרים מעשיים מחיי היום יום באפליקציות מורכבות שיש צורך בשימוש כזה ואם רוצים עוד דוגמאות אני אשמח לספק (דוגמאות חיות ואמיתיות בלבד
)
 
למעלה