כל אחד מבסיסי הנתונים
של SQL Server מכיל אובייקטים אשר משמשים
לאגירת מידע וסידורו. אובייקטים אלו
כוללים טבלאות, עמודות , אינדקסים,
מראות(views), אילוצים, חוקים, ברירות
מחדל , נהלים שמורים Triggers, Extended Stored
Procedures - ו
Stored Procedures .
טבלאות
כל בסיס נתונים של SQL Server
כולל לכל הפחות טבלה אחת. הטבלאות
הינן אמצעי שמירת המידע העיקרי של SQL Server.טבלה הינה למעשה סט
עמודות סדורות. כל סט עמודות בדרך
כלל מיוחס כשורה .
כאמור ב- SQL Server שתי קבוצות
טבלאות :
-
SYSTEM TABLES
-
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 משתמש בשני סוגים עקרים של
אינדקסים:
-
CLUSTERED
-
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 תומך בחמשה סוגי
אילוצים:
-
מפתח ראשי (primary key) :
מבטיח מצב שבו לכל השורות בטבלה קיים
מפתח אחד ויחיד אשר איננו בעל ערךNULL . בנוסף, שימוש
במפתח ראשי יוצר אינדקס ייחודי לטבלה.
-
מפתח זר (foreign key): משמש
לייחודיות יחסית. לעיתים המפתח הזר
מכונה " ייחודיות יחסית מוצהרת" (DRI)
. מפתח זר קושר עמודה אחת או יותר
בטבלה עם המפתח הראשי אשר הוגדר
בטבלה אחרת. אילוצי מפתח זר מבטיחים
יחסים ספציפיים בין שני קבצים.
לדוגמא, נשתמש במפתח זר כדי לוודא שכל
השורות בטבלה ממוינת הינן בעלות
שורה מתאימה בטבלה הצהרתית (Header table) ממוינת.
-
מפתח ייחודי ((unique key
:
מונע מהעמודה להכיל ערך כפול או זהה.
למעשה נועד למנוע כפילויות. אילוץ
ייחודי לא יכול להיות מוגדר על עמודה
שהינה חלק ממפתח ראשי. בדומה לאילוץ
מפתח ראשי שימוש באילוץ מפתח ייחודי
מוודא אמינות ועצמאות ישויות וגם
מהווה לבסוף אינדקס. בכל אופן, בניגוד
למפתח ראשי, אילוץ מפתח ייחודי מאפשר
ערכי NULL .
-
אילוץ בדיקה (check): מחייב
אמינות תחום הערכים (domain integrity ) על
ידי קביעת תחום ערכים אשר יכולים
להיות מוכנסים לעמודה. לדוגמא,
ניתן להשתמש באילוץ בדיקה כדי לוודא
שעמודה מקבלת ערכים בתחום 1 -
100 . עמודה יכולה להיות בעלת אילוץ בדיקה אחד או יותר.
-
בעל ערך שאינו Null (Not aNull
): משתמשים באילוץ זה כדי לודא
שעמודה לא מכילה אף ערך Null .
קטע הקוד הבא מציג
טרנזקציה פשוטה של SQL אשר משמשת
ליצור טבלת עובדים בבסיס המידע של
חברת ההוצאה לאור.
|
Create Table [dbo].[authors] (
[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,
[contract] [bit] Not Null,
Constraint [UPKCL_auidind] Primary Key Clustered
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.