תיעוד בסיס הנתונים - למה זה טוב? - ilDBA Portal

תיעוד בסיס הנתונים – למה זה טוב?

17/11/2014 | פורסם על ידי

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

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

לפעמים, המתכנת כבר לא היה בסביבה כדי לבצע את תהליך ההזכרות ואז אני כבר לא מדבר על אי הנוחות בשינוי אובייקט בטעות בסביבת ייצור ויצירת תקלות עקב אי ההבנה מה משמעות האובייקט… 🙁

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

מנסיוני, תיעוד נכון של סביבת בסיס נתונים צריכה להיות מורכבת ממספר רבדים:

  1. תיעוד סביבת השרת – בשלב זה לתעד את תשתית שרת בסיס הנתונים, הגדרות, סוג החומרה, משאבים, פתרון DR, פתרון גיבויים, אבטחת מידע, תרשים הקשרים בין השרתים (שרתי האפליקציה לדוגמה).
  2. תיעוד סביבת ה- sql server – בשלב זה יש לתעד את ההגדרות ברמת ה-Instance, והאובייקטים "שמחוץ" לבסיס הנתונים (link server, jobs ועוד).
  3. תיעוד סביבת בסיסי הנתונים – תיעוד אובייקטים, קוד, הוספת הסברים בקוד וכן הלאה.

ישנם מספר כלים בהם ראיתי שצוותים מתעדים בהם את הסביבות, לדוגמא: Visio לטובת תיעוד יחסי הגומלין בין השרתים בסביבה, ותיעוד ה- ERD של טבלאות בסיסי הנתונים (כמובן שלטובת ה- ERD של הטבלאות ניתן להיעזר ב- database diagram שעושה עבודה מצויינת לטעמי,  לפרטים אודות היכולת : http://www.mssqltips.com/sqlservertip/1816/getting-started-with-sql-server-database-diagrams/). כמובן שניתן פשוט להיעזר גם ב- power point ו- word אך העבודה תהיה טיפה יותר מסורבלת…

Extended Properties

באותו הקשר – לפני מספר ימים פנה אליי חבר טוב בהתייעצות, מדובר במקרה של שרת בסיסי נתונים של מוצר שמידי תקופה מעלים גרסאות של עדכוני סכמה וקוד (נשמעת לכם מוכרת הסיטואציה הזו? 🙂 )

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

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

הפעם אני רוצה להמליץ על פיצ'ר שקיים עוד מ- SQL Server 2000 אך לטעמי לא כולם מכירים אותו ומשתמשים בו – Extended Properties. בעזרת ה- Extended Properties ניתן להוסיף מאפיינים והערות לכמעט כל אובייקט ב- SQL Server (כמובן שהיכולת מגיעה עם שליטה ברמות הרשאה שונות).

ה- Extended Properties בנוי כך שניתן להגדיר פרמטרים וערכים לכל אובייקט. לדוגמה: ניתן להוסיף כסטנדרט לכל אובייקט פרמטרים: מספר גרסה, הערות מיוחדות וכו'.

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

אז ראשית, להלן האובייקטים והשכבות ב- SQL Server שניתן להוסיף להם Extended Properties :
img_extendeded_properies_hierarchy-1

להלן דוגמא למסך ה- Extended Properties ברמת בסיס הנתונים:

table-properties-2

ולהלן דוגמאות לקוד:

הוספה:

USE AdventureWorks2012;
GO
--Add a caption to the AdventureWorks2012 Database object itself.
EXEC sp_addextendedproperty
@name = N'Caption',
@value = 'AdventureWorks2012 Sample OLTP Database';

עדכון:

EXEC sp_updateextendedproperty
@name = N'NAME',
@VALUE = N'Holds tables created by user itai.',
    @level0type = N'SCHEMA',
    @level0name = 'Jes';

מחיקה:

EXEC sp_dropextendedproperty
    @name = 'name',
        @level0type = 'SCHEMA',
        @level0name = 'Jes',
            @level1type = 'Table',
            @level1name = 'Running',
                @level2type = 'Column',
                @level2name = 'RunDistance';

וכמובן שליפה:

SELECT EP.class_desc AS PropertyOn,
    DB_NAME() AS DatabaseName,
    EP.name AS ExtendedPropertyDescription,
    EP.VALUE AS ExtendedPropertyValue,
       *
FROM sys.extended_properties AS EP

לפרטים נוספים אודות היכולת :

http://technet.microsoft.com/en-us/library/ms190243(v=sql.105).aspx

אז אל תשכחו לתעד!!!

בהצלחה!

איתי

The following two tabs change content below.
איתי בנימין הוא Microsoft MVP , מומחה בתחום בסיסי הנתונים ופתרונות BI. בין היתר איתי מוביל בחברת מייקרוסופט - ישראל את קהילת ה- BI וה- BIG DATA. לאיתי למעלה מ-10 שנים של ניסיון בבסיסי נתונים ומערכות מידע. בתפקידו הקודם היה מומחה SQL Server בחברת DELL וניהל את צוות היועצים של חברת וראסיטי בתחום Microsoft SQL Server. לאיתי בלוג טכנולוגי פעיל : http://blogs.microsoft.co.il/itaib

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

PL/SQL

PL/SQL Injection – The Beginning

עודד רז פותח בסדרת מאמרים על Pl/sql [...]

צבעים דינמיים ב-SSRS

כאשר לקוח שלי ולא משנה אם הוא מבוסס אורקל או SQL Server חושב על פתרון Reporting אני ישר מציע לו את ה- Sql Server Reporting Services. שתי סיבות עיקריות להצעה שלי: רישוי ויכולות. איתי בנימין מסביר על צבעים דינמים [...]

Oracle Text For Dummies – חלק א

כולכם בוודאי שמעתם את המושג "אורקל טקסט" או "טקסט אינדקס" בהקשר זה או אחר. אם אתם רוצים להכיר עוד קצת (ממש על קצה המזלג) את הפיצ'ר המגניב והמאוד שימושי הזה שבאמת שווה להכיר- הגעתם למקום הנכון! [...]
Copyright 2017 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: