26 בOctober 2016
אחד הפיצ’רים הבסיסיים לסכימה של מסדי נתונים, היא היכולת להגדיר unique constraint. מאחורי הקלעים, Unique Constraints מתבססים על Unique Indexes שנוצרים כדי לשרת את ה- constraint, כלומר – כדי לאפשר ל- SQL Server לבדוק בזמן ביצוע פעולות הוספה ועדכון שה- constraint לא מופר. את הפוסט הזה אני רוצה להקדיש לפיצ’ר שימושי שמפתחים צריכים גם כן להכיר – שימוש ב- unique index על טבלה לסינון כפילויות בזמן ההכנסה. צריך להבדיל גם בין שני תתי-תרחישים אפשריים: לפעמים, נכונות המידע דורשת מאיתנו שלא יהיו שורות כפולות. למשל, אם אנחנו מנהלים טבלה של אזרחי ישראל – לא יכולים להיות שני אזרחים עם אותו...
24 בOctober 2016
הקדמה SQL Server, כמו כל דטאבייס רלציוני טוב, עונה על סט של עקרונות שנקראים ACID: ר”ת של Atomicity, Consistency, Isolation, Durability שמטרתם להבטיח את שלמות הנתונים במסד הנתונים. ממש ממש בגדול – העקרונות הללו אומרים שכשאתם מכניסים מידע לדטאבייס הוא נשאר שם, כשאתם שולפים נתונים אתם מקבלים נתונים אמיתיים ונכונים . בפוסט הזה אני רוצה להתמקד רק באחת מהמילים הללו: Isolation. מדובר למעשה בהגדרה (לכאורה) פשוטה: ההבטחה שגם אם שתי טרנזקציות רצות במקביל, תוצאת הביצוע שלהן בפועל תהיה כאילו הן רצו אחת אחרי השנייה.כמובן, שבפועל אנחנו כן נרצה שדברים יעבדו במקביל. ולכן, נרצה...
22 בOctober 2016
הקדמה Indexed view הוא פיצ’ר מאד שימושי, אבל גם באופן יחסי פחות מוכר – לפחות לאוכלוסיית המפתחים. מדובר למעשה בשילוב בין Views לבין אינדקסים “רגילים” (non-clustered indexes) שקיימים על טבלאות. לפני שנבין מה הבעייה, ואיך אפשר להשתמש ב- Indexed Views כדי לפתור אותה, ניישר קו לגבי מס’ מונחים. View – אפשר לחשוב על view בתור שאילתת SELECT ששמורה בתור אובייקט ב-DB שלנו. אם, למשל, יש לנו view בשם MyView הוא יכול לייצג שאילתה כלשהי (למשל, SELECT ColumnA, Column B FROM MyTable WHERE ColymnC=5) וכל שאילתה שנריץ על ה- view תהיה בפועל כאילו הרצנו אותה על ה- result set שחוזר...
15 בOctober 2016
הקדמה כל מפתח שעובד/עבד מול דטאבייס באשר הוא יודע איך מכניסים שורות לטבלה. מדובר באחת מהפעולות הבסיסיות, INSERT,. למשל, אם יש לי טבלה שמכילה 3 עמודות: עמודת ID עולה (IDENTITY), עמודה שמכילה ערך מספרי ועמודה של טקסט: CREATE TABLE .( IDENTITY(1,1) NOT NULL, NOT NULL, (2000) NOT NULL, CONSTRAINT PRIMARY KEY CLUSTERED ( ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON ) ON
אזי ה- SQL Statement שבו נשתמש כדי...
17 בNovember 2015
לפני כמה ימים פרסמתי פוסט על משהו קטן שעבדתי עליו בין תרגיל אינפי לתרגיל לינארית, שכולל למעשה אוסף של functions ו- stored procedures המאפשרים עבודה מול Redis מ- SQL Server, כאשר מרבית הפרוייקט זה סה”כ תפירה בין קוד C# קיים לעבודה מול Redis ל- SQL Server – שמתבצעת באמצעות SQL CLR, פיצ’ר חביב (למרות שהיה יכול להיות טוב משמעותית) שמאפשר לשלב ולכתוב רכיבים שונים בדטאבייס (functions, stored procedures וכו’) ב- C#. הדרישה שהייתה לי לצרכי פיתוח הייתה פשוטה – שבסוף כל build יהיה לי קובץ install.sql שכשאני מריץ אותו הוא מכיל את כל ה- CREATE statements של ה- CLR...
14 בNovember 2015
היכולת לעבוד עם XML-ים ב- SQL Server לא חדשה בכלל וקיימת מזה גרסאות. בין הדברים שמתאפשרים בעבודה עם XML-ים זה אכסון XML-ים בטבלאות באמצעות datatype מותאם לכך, פונקציות לפירסור XML, ויכולת לייצא תוצאות של שאילתות לפורמט XML במקום לפורמט טבלאי. למשל, אם אנחנו רוצים לשלוף מ- sys.tables ולהציג את התוצאות כ-XML בפורמט טבלאי, כל שצריך לעשות זה להוסיף FOR XML statement בסוף. ניתן בצורה הזאת גם להשיג שליטה מוגבלת על מבנה ה-XML שמתקבל. למשל, בדוגמא הבאה, אני מגדיר שיהיה root element בשם items ושכל שורה תהיה עטופה בתור item: SELECT *FROM sys.tablesFOR XML PATH('item'), ROOT('items')
ככה ייראה ה-XML שיתקבל:
אבל,...
12 בNovember 2015
אמ’לק: RediSql הוא קליינט אופן-סורסי חדש שזמין כעת, המאפשר עבודה מול דטאבייס Redis מ- T-SQL (כלומר, מ-SQL Server). להורדה והוראות התקנה.
מה זה Redis?
Redis הוא שרת in-memory database, המאפשר לאכסן מידע בתצורה של key-value pairs. מדובר בשרת מאד פופולרי, בעל ביצועים גבוהים, פשוט להתקנה ולשימוש. השימושים של Redis מגוונים, ויכולים לנוע בתרחישי שימוש רבים הנעים מ-caching (שימוש מאד פופולרי ב- Redis) ועד למנגנוני pub/sub פשוטים שדורשים ביצועים גבוהים. ההתקנה של Redis פשוטה מאד (הגרסא הרשמית היא רק למערכות *nix, אבל יש גם גרסא ל-Windows).
ל- Redis יש מגוון קליינטים אבל עד עתה לא היה ל- SQL Server (שמאפשר לעבוד עם Redis...
7 בJuly 2010
מיקרוסופט הודיעה היום על השקת ASP.NET WebMatrix – סביבת פיתוח וריצה חדשה לאתרי אינטרנט. כמובן שיש מ-ל-א פוסטים בנושא, והמטרה בפוסט הזה היא לסכם את הנקודות העיקריות במקום אחד ובנוחות. ASP.NET WebMatrix הוא מוצר די גדול, שמורכב משני חלקים עיקריים: החלק הראשון, הוא סביבת הריצה עצמה. החלק השני, הוא סביבת הפיתוח (שאמנם מומלצת לשימוש, אבל לא חובה לשימוש). סביבת הריצה של ASP.NET WebMatrix סביבת הריצה של ASP.NET WebMatrix מורכבת ממספר חלקים עיקריים: ASP.NET Web Pages דרך חדשה לפיתוח אפליקציות ASP.NET ששונה משמעותית מ ASP.NET WebForms הוותיקה וגם מ ASP.NET MVC הצעירה. מדובר בפיתוח...
19 בApril 2010
ב 28.03 העברתי הרצאה בכנס של סטארטאפסידס בנושא “איך להרוס את Windows 7”. רוב קוראי הבלוג הזה בטח יודעים שבד”כ אני מפתח בטכנולוגיות מיקרוסופט, ובכלל די מפרגן למוצרי מיקרוסופט. אבל מה לעשות – לפעמים להרוס מוצר מעניין לא פחות מלפתח אליו :-) בהרצאה יש כמה דרכים רציניות (וגם כמה הומוריסטיות, בהתחלה) לאיך להרוס Windows 7 (כמובן שבאמצעות קצת רצון טוב ודיסק התקנה של Windows 7, ניתן לפתור הכל) בין השאר – הסרת Windows מרשימת האתחול של Windows, פגיעה בקבצי מערכת ועוד כמה שיטות נחמדות. האורך של ההרצאה זה 14 דקות. לצפייה ביוטיוב (מומלץ לצפות ב HD ובמסך...
2 בMarch 2010
מה זה SMO? SMO, ר”ת של SQL Server Management Object, זה אוסך של אובייקטים החושפים פונקציונאליות של ניהול שרת SQL Server על רכיביו השונים ובכל הרמות (ניהול שרת, ניהול דטאבייסים, ניהול הרכיבים בדטאבייס מסויים וכו’). מדובר, למעשה, במקבילה דוט.נט-ית לרכיב שידוע בשם SQL-DMO (עוד ד”ת - SQL Distributed Management Objects). האסמבליס (קבצי הDLL) של SMO נמצאים בנתיב C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll (מדובר בקבצים של SQL SERVER 2008, כאשר c:\Program Files זה כמובן תיקיית האפליקציות שלכם). המטרה המטרה בפוסט זה...