בניית דוחות בפריוריטי – מפתחות

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

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

מבחינתינו, מפתח הוא אוסף של עמודות בטבלה כלשהי במערכת. ישנם כמה סוגי מפתחות ולכל סוג התכונות הייחודיות המאפיינות אותו  החלוקה העיקרית במפתחות מבחינה בין 3 סוגים עיקריים: מפתח Unique (יוניק), Auto-Unique (אאוטו-יוניק) ו Non-Unique (נון-יוניק). לכל עמודה במפתח יש מספר ייחודי שנקרא "עדיפות".

  • מפתח Unique – אנחנו נסמן אותו ב U. הגדרת קבוצת עמודות כמפתח U אומרת שצירוף מסויים של ערכים בעמודות המפתח יכול להופיע רק פעם אחת ויחידה בטבלה. לדוגמא: CUSTOMERS.CUSTNAME (עמודה CUSTNAME מטבלת CUSTOMERS) – מספר הלקוח. עמודה יחידה במפתח U של טבלת הלקוחות ולכן כל מספר לקוח יכול להופיע רק פעם אחת ויחידה בטבלה. דוגמא נוספת ניקח מטבלת כותרות התעודות הכספיות – INVOICES . כל התעודות הכספיות (מכירות ורכש יחד) מאוחסנות בה. מפתח ה U שלה מורכב משתי עמודות: IVNUM – מספר התעודה הכספית, ו TYPE – עמודה המייצגת את סוג התעודה באמצעות אות אנגלית גדולה. צירוף של שני ערכים בעמודות אלו לא יכול לחזור על עצמו. הלכך לא יכולות להיות שתי רשומות בטבלה עם אותו מספר תעודה ואותו טיפוס, אך בהחלט יכולות להיות שתי רשומות או יותר עם אותו מספר אך עם טיפוסים שונים לדוגמא שתי חשבוניות IV00019, חשבונית אחת עם טיפוס C ואחת עם טיפוס P. זה אפשרי כי הזוג (IV00019, C)  שונה מהזוג (IV00019, P) ולכן המערכת מאפשרת רשומות כאלו בבסיס הנתונים. האם ייתכנו שתי רשומות עם אותו TYPE ? ודאי!! כי לכל חשבוניות הספק המרכזות יש את אותו ערך בעמודת ה TYPE ומה שמבדיל בינהן הוא מספר החשבונית. מספר נקודות נוספות ביחס למפתח U:
    • לכל טבלה במערכת חייב להיות מפתח U אחד לפחות
    • טבלה יכולה להכיל יותר ממפתח U אחד. לדוגמא בטבלת העובדים – USERSB יש שני מפתחות U (לא להתבלבל עם שתי עמודות במפתח אחד). מפתח אחד מבוסס על עמודת USERID – מספר עובד, ומפתח שני מבוסס על עמודת תעודת זהות – IDNUMBER.קל להבין שעמודות הללו מאחסנות ערכים ייחודיים  לכל עובד בחברה.
  • מפתח Auto-Unique – נסמן אותו ב A. מפתח זה הינו מפתח Unique לכל דבר ועניין בתוספת של כמה תכונות:
    • מפתח A מכיל עמודה אחת ויחידה
    • עמודת מפתח ה A היא תמיד מטיפוס INT – מספר שלם.
    • בכל טבלה ייתכן רק מפתח A יחיד.
    • יש טבלאות ללא מפתח A. 

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

  • מפתח Non-Unique – נסמן אותו ב N. בדיוק כמו מפתח U למעט התכונות הבאות:
    • הוא אינו ייחודי, צירוף העמודות במפתח יכול לחזור על עצמו.
    • טבלה לא חייבת להכיל מפתחות N.

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

עדיפות בין מפתחות.  המפתחות מסודרים בינם לבין עצמם בעדיפויות ככל שהעדיפות גבוהה יותר מספרה קטן יותר. לא להתבלבל עם עדיפות העמודות בתוך המפתח. המערכת מעדיפה לגשת לשליפת נתונים מהטבלאות לפי המפתח עם העדיפות הגבוהה ביותר האפשרית מבחינתה, אם יש לה נתונים על יותר ממפתח יחיד. לדוגמא, בטבלת TRANSORDER, טבלת תנועות המלאי קיימים מפתחות ה N הבאים: מפתח N אחד בעדיפות 4 – ORDI מספר שורת ההזמנה, ומפתח N נוסף בעדיפות 5, זוג העמודות (CURDATE, PART) – פריט ותאריך בהתאמה. כאשר המערכת מנסה לשלוף נתונים מטבלת TRANSORDER ויש בידה גם מספר שורת הזמנה וגם פריט ותאריך תנועה  היא תבחר להשתמש ב ORDI – המפתח בעל העדיפות הגבוהה יותר.   אם לטבלה יש מפתח A אזי הוא תמיד בעדיפות 1. מפתח N לא יכול להיות בעדיפות גבוהה יותר ממפתח U.

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

כדי לראות מהם המפתחות המוגדרים לטבלה מסויימת ניתן לפתוח את מסך מילון הטבלאות ב מנהל המערכת > מחוללים > טבלאות > מילונים ודו"חות – טבלאות > מילון טבלאות. מסך הבן "עמודות הטבלה" מפרט את עמודות הטבלה על טיפוסיהן, רוחבן וכו. מסך הבן "מפתחות" מפרט את מפתחות הטבלה אך יש באופן התצוגה שלו משהו מטעה. כל עדיפות מפתח מציין מפתח אחד מתוך כלל המפתחות של הטבלה. מספר עדיפות המפתח חוזר על עצמו עבור כל עמודה במפתח. העמודות מפורטות לפי עדיפות עמודה. דוגמא: פתחו את המסך ושלפו את טבלת PORDERITEMS פירוטי הזמנות הרכש. ועברו לפירוט המפתחות. השורה הראשונה מציגה מפתח A המבוסס על עמודת ORDI, עדיפות המפתח מופיעה בשדה השני "עדיפות" , מספרה 1 ועדיפות העמודה ORDI בתוך המפתח היא 1 (היא גם העמודה היחידה בתוכו). לעומת זאת מפתח ה U היחיד של הטבלה מפורט בשורות 2 ו3. העמודות ORD ו KLINE חולקות את אותה עדיפות מפתח ולכן הן שייכות לאותו מפתח. בתוך המפתח העדיפות של עמודת ORD הוא 1 ושל KLINE הוא 2. ניתן לראות עוד מפתחות רבים מסוג N על טבלה זו אשר הים מרובי עמודות.

לסיום, אם תעברו למסך הבן "עמודות" תוכלו לראות פירוט של עמודות הטבלה PORDERITEMS. ייתכן שהתיאור העברי רומז לכם על תפקידה של העמודה. אם היינו ניגשים לבנות דוח על בסיס פירוט זה של עמודות הטבלה, היינו נתקלים בקשיים רבים. נסו להציג בדוח  את עמודת PART (פריט), CURRENCY (מטבע) או USER (משתמש). כל מה שתראו בדוח הוא מספרים חסרי משמעות. מספרים אלו אינם הנתונים כפי שאנו מכירים אותם מן המסכים. אלו עמודות המאחסנות את מפתחות ה A של הרשומות בטבלאות הפריטים, המטבעות והמשתמשים.  כלומר תפקידה של עמודת PART בטבלת PORDERITEMS הוא לאחסן את ה A של הפריט הנבחר כפי שהוא מופיע בטבלת המוצרים  ותו לא. כל שאר נתוני הפריט, קרי מספרו, תיאורו וכו. מגיעים מטבלת המוצרים עצמה שגם לה במקרה קוראים PART. 

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

0
0