פבר16
Written by:
ronen ariely
16/02/2012 07:27 
מבט כללי על היחסים בין האלמנטים השונים במסד הנתונים:
מסדי הנתונים של SQL כוללים אלמנט בשם Database Diagram המאפשר לנו לבנות דיאגראמות לצפייה ועבודה (עדכון ובנייה) של אלמנטים שונים במסד הנתונים כגון טבלאות והקשרים בין הטבלאות.
נעבור בקצרה בבלוג זה על הדרך בה נוכל להקים דיאגראמות שונות לעזרה בניהול הקשרים של הטבלאות שלנו.
ניגש לתוכנת ה SSMS ל Object Explorer ונפתח את הסימון + ליד הדיאגראמות הנוכחיות שיש לנו במסד הנתונים:

* ניתן לראות בתמונה שבכל שרת אני מחזיק מסד נתונים כללי של עזרים שונים. דבר זה מומלץ תמיד. מסד זה כולל פונקציות ופרוצדורות שמורות בעיקר לשימוש כללי.
עם הלחיצה על סימון ה + בפעם הראשונה נקבל את הודעת האזהרה הבאה. על מצנתלהמשיםך יש לאשר אותה כמובן.

עתה נוכל לבנות דיאגרמה חדשה.
כפתור ימני על הכותרת של רשימת הדיאגראמות (ראה תמונה מעל) ונבחר ב new database diagram
אשף בניית הדיאגרמה יפתח לנו ויציג את חלון הדיאגרמה למטה ומעליו חלון הכולל את כל הטבלאות שלנו. נבחר את כל הטבלאות שאנו רוצים להציג ונעזר בכפתור Add על מנת להוסיף אותם אל הדיאגרמה שלנו.
* ניתן להעזר ב ctrl במקלדת על מנת לבחור מספר טבלאות ביחד או פשוט להכניס לדיאגרמה שלנו טבלה אחרי טבלה.
לצורך המדריך אני רוצה להראות אפשרות מלאה של ניהול וצפייה בקשרים בין הטבלאות. לכן אני אבנה דיאגרמה של כמה טבלאות שאני יודע שהן כבר מקושרות בינן (כאמור וכפי שנראה בתמונות אני מבצע את ההדגמה על מסד הנתונים הלימודי AdventureWorksLT2008R2 שניתן להוריד באינטרנט).
כדי לבחור טבלאות עם קשרים נריץ את השאילתה הבאה למציאת כל הקשרים שיש לנו מבסד הנתונים:
SELECT
f.
name
AS
ForeignKey,
OBJECT_NAME(f.parent_object_id)
AS
TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id)
AS
ColumnName,
OBJECT_NAME (f.referenced_object_id)
AS
ReferenceTableName,
COL_NAME(fc.referenced_object_id,fc.referenced_column_id)
AS
ReferenceColumnName
FROM
sys.foreign_keys
AS
f
INNER
JOIN
sys.foreign_key_columns
AS
fc
ON
f.OBJECT_ID = fc.constraint_object_id
INNER
JOIN
sys.objects
AS
o
ON
o.OBJECT_ID = fc.referenced_object_id
GO
נציג רק 3 מהטורים של תוצאת השאילתה (פשוט כדי שנוכל להכניס את הטבלה לעמוד):
ForeignKey | TblName | RefTblName |
FK_CustomerAddress_ Address_AddressID | CustomerAddress | Address |
FK_SalesOrderHeader_ Address_ShipTo_AddressID | SalesOrderHeader | Address |
FK_SalesOrderHeader_ Address_BillTo_AddressID | SalesOrderHeader | Address |
FK_CustomerAddress_ Customer_CustomerID | CustomerAddress | Customer |
FK_SalesOrderHeader_ Customer_CustomerID | SalesOrderHeader | Customer |
FK_SalesOrderDetail_ Product_ProductID | SalesOrderDetail | Product |
FK_Product_ProductCategory_ ProductCategoryID | Product | ProductCategory |
FK_ProductCategory_ ProductCategory_ ParentProductCategoryID_ ProductCategoryID | ProductCategory | ProductCategory |
FK_ProductModelProductDescription_ ProductDescription_ ProductDescriptionID | ProductModelProductDescription | ProductDescription |
FK_Product_ProductModel_ ProductModelID | Product | ProductModel |
FK_ProductModelProductDescription_ ProductModel_ProductModelID | ProductModelProductDescription | ProductModel |
FK_SalesOrderDetail_ SalesOrderHeader_SalesOrderID | SalesOrderDetail | SalesOrderHeader |
ניתן לראות שהטבלה CustomerAddress מקושרת ל 2 טבלאות נוספות: Address, Customer לכן לצורך מדריך קצר זה נוכל לבחור את שלושת טבלאות אלו ולבנות דיאגרמה של שכבת הלקוחות למשל.
כל טבלה שאנו מוסיפים לדיאגרמה תעלם מחלון הטבלאות (מכיוון שכבר הוכנסה) ונוכל להמשיך לבחור טבלאות נוספות. לאחר שבחרנו את כל הטבלאות שאנו רוצים לראות נסגור את חלון הטבלאות ונתחיל לסדר את הדיאגרמה שלנו בצורה נוחה לעבודה.
בתמונה הבאה ניתן לראות שבחרתי את 3 הטבלאות שרצינו לנהל והוספתי לדיאגרמה.

כפי שניתן לראות הטבלאות שבחרנו עם הקשרים שלהם מוצגות תלנו כבר בסיום השלב הראשון. כל פעולה שנבצע על הדיאגרמה כרגע החל מהקטנת חלון הצפייה ועד DDL (שינויים באלמנטים במסד הנתונים) ישמרו לנו בדיאגרמה לניהול עתידי.
לאחר שנסיים לבנות את הדיאגרמה שלנו לשביעות רצוננו נשמור את הדיאגרמה בשם ייחודי בעזרתו נוכל תמיד לזהות איזה טבלאות וקשרים מנהלת דיאגרמה זו. למשל לבחירה הנוכחית נוכל לקרוא CustonersRelationsDiagram
חלק מהאפשרויות הנוספות לניהול שיש לנו:
הצגת שמות הקשרים בין הטבלאות
כפתור ימני על המשטח של הדיאגרמה -> בחירה ב show relationship labels

הקטנה והגדלה של הדיאגמה
ניתן להיעזר בגלילה של העכבר + ctrl
הוספת קשרים בין טבלאות
כפתור ימני של העכבר על הטבלה אליה רוצים להוסיף קשר
