אוביקטי מסד הנתונים

כל אחד מבסיסי הנתונים של SQL Server מכיל אובייקטים אשר משמשים לאגירת מידע וסידורו. אובייקטים אלו כוללים טבלאות, עמודות , אינדקסים, מראות(views), אילוצים, חוקים, ברירות מחדל , נהלים שמורים Triggers, Extended   Stored Procedures - ו  Stored Procedures .

טבלאות

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

כאמור ב-  SQL Server שתי קבוצות טבלאות :

  1.   SYSTEM TABLES
  2.  USER TABLES  

טבלאות המערכת כוללות מידע אודות  SQL Server והאובייקטים השונים שלו. טבלאות משתמש כוללות מידע הרלבנטי למשתמש ספציפי.

באופן כללי כל טבלה מייצגת סוג מסוים של אובייקט. לדוגמא באיור 1.5 טבלת המוצאים לאור (pub_info) מכילה סט טבלאות  כאשר כל טבלה מכילה מידע אודות חברת הוצאה לאור. טבלת המחברים (authors) מכילה מידע המתייחס לקבוצת מחברים. באופן דומה טבלת המכירות מכילה סט עמודות  ( רשומות ) אשר מתייחסות למידע אודות מכירות ספרים.

עמודות

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

לדוגמא: טבלת המחברים (authors) בבסיס הנתונים " מפרסמים" (pubs) מכילה את השדות הבאים:

פירוט השדה
ת"ז של המחבר au_id
שם המשפחה של המחבר Au_lname
שם פרטי של המחבר Au_fname
מס' טלפון של המחבר phone
כתובת המחבר address
עיר המחבר city
מדינה של המחבר state
חוזה המחבר contract
טבלה 1.2

 

לכל עמודה בטבלה המוגדרת ב-SQL Server חייב להיות שדה המציין את סוג ערכי העמודה (datatype ).בטבלה 1.3 מפורטים סוגי השדות המוגדרים ב-SQL Server.

פירוט הטיפוס
טיפוס בינארי Binary
ערכי אמת/שקר Bit
 null ערך ערכי אמת/שקר או Bit null
טיפוס מסוג תו Char
טיפוס לציון ערכי זמן/תאריך Datatime
 null ערך טיפוס לציון ערכי זמן/תאריך או Datatime null
ייצוג דצימלי Decimal
null ערך ייצוג דצימלי או Decimal null
טיפוס נקודה צפה Float
טיפוס לייצוג תמונות Image
ייצוג מספרים טבעיים Int
ייצוג ערכי מטבע Money
 unicode ייצוג תווי Nchar
   unicode ייצוג טקסט   Ntext
ייצוג ערך מספרי Numeric
null ערך ייצוג ערך מספרי או Numeric null
null ייצוג מספר ממשי, נקודה צפה או ערך  Real null and float null
(מספר שלם (2 בתים Small int
טקסט חופשי Text
(מספר טבעי (בית אחד Tiny int
טבלה 1.3

אינדקסים

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

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

אינדקס נוצר כבסיס נתונים עצמאי - אובייקט מהטבלה המקורית.

SQL Server משתמש בשני סוגים עקרים של אינדקסים:

  1. CLUSTERED
  2. NON CLUSTERED

Clustered indexes  : כופים על SQL Server  לאגור את המידע בטבלת הבסיס תוך שימוש באותו מבנה ארגוני של Clustered indexes . כתלות בשיטת הגישה למידע, איחסון פיזי של המידע בצורה ממוינת יכולה להוביל לשיפורי ביצועים משמעותיים. יתכן רק clustered index  אחד עבור טבלה נתונה.

Nonclustered indexes  : אינן משנים את הצורה בה המידע אגור בטבלת המקור. אינדקס מסוג זה כולל עמודה אחת או יותר יחד עם מחוון (pointer) למידע אשר אגור בטבלת הבסיס. אינדקסים הללו הנם ברירת המחדל של SQL server . יתכנו עד כ- 250 אינדקסים כאלו עבור כל טבלה למרות שבפועל לא רצוי להשתמש בכמות כה רבה של אינדקסים.



איור 1.5

איור 1.5 ממחיש את ההבדלים בין שתי מתודיקות האינדקסים .

תצוגות

תצוגת SQL Server הנה טבלה וירטואלית. התצוגה לא קיימת כטבלה עצמאית אלא שמורה כתוצאה של שאילתא אשר מקושרת ומתייחסת לטבלה אחת או יותר מטבלאות המקור.

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



איור 1.6


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

Constarints - אילוצים

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

SQL Server תומך בחמשה סוגי אילוצים:

  1. מפתח ראשי (primary key) : מבטיח מצב שבו לכל השורות בטבלה קיים מפתח אחד ויחיד אשר איננו בעל ערךNULL   . בנוסף, שימוש במפתח ראשי יוצר אינדקס ייחודי לטבלה.
  2. מפתח זר (foreign key):   משמש לייחודיות יחסית. לעיתים המפתח הזר מכונה " ייחודיות יחסית מוצהרת" (DRI) . מפתח זר קושר עמודה אחת או יותר בטבלה עם המפתח הראשי אשר הוגדר בטבלה אחרת. אילוצי מפתח זר מבטיחים יחסים ספציפיים בין שני קבצים. לדוגמא, נשתמש במפתח זר כדי לוודא שכל השורות בטבלה ממוינת הינן בעלות שורה מתאימה בטבלה הצהרתית (Header table) ממוינת.
  3. מפתח ייחודי ((unique key : מונע מהעמודה להכיל ערך כפול או זהה. למעשה נועד למנוע כפילויות. אילוץ ייחודי לא יכול להיות מוגדר על עמודה שהינה חלק ממפתח ראשי. בדומה לאילוץ מפתח ראשי שימוש באילוץ מפתח ייחודי מוודא אמינות ועצמאות ישויות וגם מהווה לבסוף אינדקס. בכל אופן, בניגוד למפתח ראשי, אילוץ מפתח ייחודי מאפשר ערכי NULL  .
  4. אילוץ בדיקה (check):  מחייב אמינות תחום הערכים (domain integrity  ) על ידי קביעת תחום ערכים אשר יכולים להיות  מוכנסים לעמודה. לדוגמא, ניתן להשתמש באילוץ  בדיקה כדי לוודא שעמודה מקבלת ערכים בתחום  1 - 100 . עמודה יכולה להיות בעלת אילוץ בדיקה אחד או יותר.
  5. בעל ערך שאינו Null (Not aNull ): משתמשים באילוץ זה כדי לודא שעמודה לא מכילה אף ערך Null  .

קטע הקוד הבא מציג טרנזקציה פשוטה של SQL  אשר משמשת ליצור טבלת עובדים בבסיס המידע של חברת ההוצאה לאור.

Create Table [dbo].[authors] (
[au_id]	[id]	Not Null, 
[au_lname]	[varchar]	(40)	Not Null,
[au_fname]	[varchar]	(20)	Not Null,
[phone]		[char]	(12)	Not Null
Constraint  [DF__authors__phone__09de7bcc] Default ('UNKNOWN'),  
[address]	[varchar]	(40)	Null,
[city]		[varchar]	(20)	Null,
[state]		[char]	(2)	Null,
[zip]		[char]	(5)	Null,
[contract]		[bit]		Not Null,
Constraint [UPKCL_auidind] Primary Key Clustered
(
[au_id]
),
Check (([au_id] Like '[0-9] [0-9] [0-9] - [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]')),
Check (([zip] Like '[0-9] [0-9] [0-9] [0-9] [0-9]'))
)

הדוגמא הנ"ל מראה את השימוש באילוצים השונים. ראשית, אילוץ מפתח ראשי זוכה לשימוש בעמודת ה au_id . אילוץ זה מוודא שכל השורות תהיינה מזוהות על ידי au_id  שונה שאיננו Null   .  שנית, ניתן לראות את האילוץ not a  Null    אשר מופיע au_lname  , au_fname  ועמודת החוזה אשר מונעים הכנסת  ערכי Null   לעמודות הללו.

ניתן לראות שאילוץ ברירת המחדל מופיע בעמודת הטלפון כדי להחליף את הערך "לא ידוע" במקום בו מוכנסת שורה אך לא מופיע ערך עבור מספר טלפון. לבסוף ניתן לראות שאילוץ הבדיקה מופיע בעמודות ה au_id   ובעמודת ה- zip  . בשני המקרים אילוץ הבדיקה משמש לכפות על עמודה קבלת ערכים מספריים בלבד.

Rules – חוקים

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

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

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

Defaults – ברירות מחדל

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

Triggers – מאורע אוטומטי

זהו תהליך מובנה המופעל אוטומטית כאשר טבלת SQL Server  מעודכנת  תוך שימוש ב -Update , Insert   או Delete  . בדומה לתהליך מובנה  מאורע אוטומטי  מכיל סט של פקודותTransact SQL . משתמשים במאורע אוטומטי כאשר רוצים לכפות על בסיס נתונים חוקים מורכבים  יותר מאשר חוקי הטבלה הבסיסיים.

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

 Stored procedures -  פרוצדורות שמורות

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

כיוון ששפת SQL  הנה שפה לא פרוצדורלית תחביר ניב ה -Transact  מכיל מספר הרחבות של SQL  כולל שימוש במילות מפתח לבקרה .הדבר מאפשר לפרוצדורות שמורות ב SQL Server להכיל לוגיקה מורכבת ולבצע מגוון רחב של משימות.

כאשר פרוצדורה שמורה עוברת תהליך הידור , SQL Server מיעל  את תכנית הגישה למידע אשר בה משתמשת הפרוצדורה שמורה. האופטימיזציה הזאת, מאפשרת לפרוצדורות שמורות ביצועים טובים. פרוצדורות שמורות יכולות להחזיר פרמטרים, סט תשובות, קודים או ליצור  סימונים (cursors  ) . פרוצדורה שמורה אחת יכולה להיות בשימוש ע"י מספר משתמשים. פרוצדורה שמורה יכולה לקבל לכל היותר 1024 פרמטרים והיא יכולה  להיות מופעלת על מערכות SQL Server מקומיות או מרוחקות.

פרוצדורות שמורות נכתבות ועוברות תהליך של ניפוי שגיאות (debugging  ) תוך שימוש בשפות כגון Visual Basic  או Visual c++  . כל פונקציה אשר מבוצעת תוך שימוש בפרוצדורה שמורה חייבת להיות רשומה ב SQL Server תוך שימוש בפרוצדורה שמורה מסוג  sp_addextendedproc.

 

  חזרה לתחילת הפרק


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