דלגו לתוכן

בנו את המודל הלוגי

זמין גם ב-28 שפות

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

Five different dog collars on pegs by a home's front door, each with its own blank metal tag, beside a leash, a brush and a water bowl.
התמונה נוצרה בבינה מלאכותית

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

השאלה שהיחידה הזו עונה עליה: איך הופכים מודל מושגי למודל נתונים לוגי?

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

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

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

ואז אובייקט הצומת. כמה טוב Bella עושה שב, ומתי היא למדה את זה: האם זה מתאר את Bella? לא בדיוק; היא טובה יותר בחלק מהתרגילים מאשר באחרים. האם זה מתאר את שב? לא; כל כלב עושה שב אחרת. זה מתאר את Bella ואת שב יחד, אז זה שייך לתרגיל של כלב: רמת המיומנות ותאריך הלמידה. בגלל זה אובייקט הצומת קיים: יש עובדות ששייכות רק לזוג.

איזה כלב הוא איזה? נסו קודם את השם. יש הרבה כלבים בשם Max, אז השם לא ייחודי. מספר הטלפון של הבעלים? ל-Marcus יש שני כלבים על אותו טלפון, אנשים מחליפים מספרים, וזה מידע אישי של מישהו, שהיה מועתק לכל מערכת שאי פעם מצביעה על כלב. מספר השבב נראה טוב יותר: הוא ייחודי, והוא לא משתנה. אבל לגור חדש אולי עוד אין שבב, ומפתח לא יכול להיות ריק. אז השבב נשאר, כמשהו שהכלב מוכר גם לפיו, והכלב מקבל מזהה כלב (Dog ID) משלו: מספר שעושה עבודה משעממת אחת, להבדיל בין כלב אחד לאחר.

מודל הכלבים עם מפתחות ומאפיינים מודל הכלבים כמודל נתונים מפורט. כל תיבה מציגה את מזהה הרשומה שלה וכמה שדות. בעלים: מזהה בעלים, שם, טלפון, מיקוד, עיר. מגדל: מזהה מגדל, שם, עיר. כלב: מזהה כלב, מוכר גם לפי מספר השבב, מזהה הבעלים ומזהה המגדל, שם, תאריך לידה. גזע, עדיין לא מחובר: מזהה גזע, שם, גודל. תרגיל: מזהה תרגיל, שם, רמת קושי. תרגיל של כלב, בין כלב לתרגיל: מזהה תרגיל של כלב, מזהה כלב ומזהה תרגיל, רמת מיומנות, תאריך לימוד. הערכת תרגיל, מתחת לתרגיל של כלב: המזהה שלה, מזהה התרגיל של הכלב, תאריך, רמת מיומנות, הוערך על ידי. הקווים זהים לקודם: בעלים מחזיק כלבים, מגדל מגדל כלבים (לכלב יש אפס מגדלים או אחד), כלב יודע תרגילי כלב, תרגיל ידוע בתרגילי כלב, ותרגיל של כלב נבדק בהערכות תרגיל. הבעלים של מגדל יודע ידוע ב נבדק ב בעלים מזהה בעלים מזהה רשומה שם טלפון ZIP עיר מגדל מזהה מגדל מזהה רשומה שם עיר כלב מזהה כלב מזהה רשומה מספר שבב מוכר גם בתור מזהה בעלים מזהה מגדל שם תאריך לידה גזע מזהה גזע מזהה רשומה שם גודל תרגיל של כלב מזהה תרגיל של כלב מזהה רשומה מזהה כלב מזהה תרגיל רמת מיומנות תאריך לימוד תרגיל מזהה תרגיל מזהה רשומה שם רמת קושי הערכת תרגיל מזהה הערכת תרגיל מזהה רשומה מזהה תרגיל של כלב תאריך רמת מיומנות הוערך על ידי בדיוק אחד אפס או אחד אחד או רבים אפס או רבים © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

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

המושגי אומר לי מה קיים; הלוגי אומר לי מה זה אומר כנתונים

Section titled “המושגי אומר לי מה קיים; הלוגי אומר לי מה זה אומר כנתונים ”

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

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

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

מתיבות לישויות עם מאפיינים שלוש תיבות מושגיות משמאל (משאית, משלוח, מרכז הפצה), כל אחת מחוברת בקו "הופך ל" לישות לוגית מימין שמפרטת את המאפיינים שלה. משאית: מספר צי, VIN, יצרן, דגם, שנת ייצור, לוחית רישוי, קילומטראז' נוכחי, סטטוס. משלוח: מספר הזמנה אצל השותף, תאריך משלוח, חלון זמן מובטח, הגעה בפועל, סטטוס, כולל התקנה, כולל פינוי. מרכז הפצה: שם, כתובת, שוק, טלפון. מושגי: מה קיים לוגי: מה זה אומר כנתונים הופך ל הופך ל הופך ל משאית הרכב משאית מספר צי VIN יצרן דגם שנת ייצור לוחית רישוי קילומטראז' נוכחי סטטוס משלוח הזמנה אחת לנמען אחד משלוח מספר הזמנה אצל השותף תאריך משלוח חלון זמן מובטח הגעה בפועל סטטוס כולל התקנה כולל פינוי מרכז הפצה משם יוצאים המשלוחים מרכז הפצה שם כתובת שוק טלפון ברוב התרשימים שלנו נשארת התיבה הפשוטה: שדות מתרבים, מתיישנים ונושאים פרטים (שם API, תווית, סוג, אורך). © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

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

מאפיינים צריכים לתאר את הישות

Section titled “מאפיינים צריכים לתאר את הישות ”

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

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

ואז צריך לדבר על מזהים ייחודיים

Section titled “ואז צריך לדבר על מזהים ייחודיים ”

מאפיינים מתארים דברים. אבל יש עוד בעיה לפתור: איך אני יודע איזה דבר הוא איזה?

שני נמענים נקראים John Smith. האם זה אותו אדם? אולי; ואולי לא. שם לא מספיק. כתובת? אנשים עוברים דירה. מספרי טלפון משתנים. כתובות אימייל משתנות. אפילו השם של שותף קמעונאי יכול להשתנות.

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

ייחודי. לא משתנה. חסר משמעות. לעולם לא PII.

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

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

חסר משמעות. זה נשמע מוזר בפעם הראשונה ששומעים את זה. למה שארצה מזהה חסר משמעות? כי משמעות משתנה. דמיינו שמישהו בונה מזהה משלוח שמקודדים בו מרכז ההפצה, השותף הקמעונאי, תאריך המשלוח ומספר רץ: PHX-KEY-20261002-0042. זה נראה חכם. ואז הנמען דוחה את המשלוח ליום שישי. משנים את המזהה? אם לא, הוא משקר לנו. אם כן, שינינו את המזהה הייחודי של המשלוח כי אחד המאפיינים שלו השתנה, וכל מערכת ששמרה את המזהה הישן איבדה עכשיו את העקבות שלו. המזהה ניסה לעשות שתי עבודות: לזהות את המשלוח וגם לתאר אותו. אני מעדיף לתת למאפיינים לתאר אותו, ולתת למזהה לעשות עבודה משעממת אחת: לזהות אותו. מזהים משעממים הם מזהים טובים.

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

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

אז הכלל שלי הוא: ייחודי, לא משתנה, חסר משמעות, לעולם לא PII.

מפתחות טבעיים ומפתחות חלופיים

Section titled “מפתחות טבעיים ומפתחות חלופיים ”

לאנשי מסדי נתונים יש שמות לחלק מזה. מפתח טבעי כבר קיים בנתונים העסקיים: מספר השלדה (VIN) של משאית הוא דוגמה טובה. האפליקציה שלנו לא המציאה אותו, וכבר יש לו משמעות. מפתח חלופי (surrogate) נוצר במיוחד כדי לזהות את הרשומה; הוא לא מתאר שום דבר, הוא רק מזהה.

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

לדבר אחד יכולים להיות כמה מזהים שימושיים

Section titled “לדבר אחד יכולים להיות כמה מזהים שימושיים ”

מזהה הרשומה הפנימי הוא לא בהכרח המזהה שכל מערכת אחרת משתמשת בו. Steve Trucking עשויה לזהות משלוח באופן פנימי עם מזהה שנוצר אוטומטית. כל שותף קמעונאי מכיר את אותו משלוח לפי מספר ההזמנה שלו: Keystone במניפסט ה-CSV שלה, Redrock ב-API שלה, Brightwave בהודעות ה-EDI שלה. ושמונה השנים של ההיסטוריה ב-RouteDesk, כלי השיבוץ הישן, משתמשות במזהי המשלוח של RouteDesk עצמו.

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

קשרים תלויים במזהים ייחודיים

Section titled “קשרים תלויים במזהים ייחודיים ”

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

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

מודל נתונים מפורט וממוקד מודל נתונים מפורט וממוקד של Steve Trucking בשלוש קבוצות. כל ישות מציגה את מזהה הרשומה שלה (מזהה ייחודי פנימי שנוצר), כל מה שהיא מוכרת גם בו, וכמה שדות מפתח. שותף קמעונאי (שם, כתובת לחיוב, סטטוס) מפעיל מרכזי הפצה ושולח משלוחים. משלוח מוכר גם לפי מספר ההזמנה אצל השותף ומזהה המשלוח ב-RouteDesk; הוא נשלח אל נמען (שם, כתובת, טלפון, דוא"ל), יוצא ממרכז הפצה (שם, כתובת, שוק) ומכיל פריטי משלוח (מוצר, כמות, כולל התקנה). צוות עובד בשיבוצי צוות, ומשאית (מוכרת גם לפי VIN ומספר צי) משמשת בשיבוצי צוות, שיש להם תאריך התחלה ותאריך סיום. נתוני לקוחות נתוני תנועות נתוני ייחוס מפעיל שולח נשלח אל יוצא מ מכיל עובד ב משמש ב שותף קמעונאי מזהה שותף קמעונאי מזהה רשומה שם כתובת לחיוב סטטוס נמען מזהה נמען מזהה רשומה שם כתובת טלפון דוא"ל משלוח מזהה משלוח מזהה רשומה מספר הזמנה אצל השותף מוכר גם בתור מזהה משלוח ב-RouteDesk מוכר גם בתור תאריך משלוח חלון זמן מובטח סטטוס פריט משלוח מזהה פריט משלוח מזהה רשומה מוצר כמות כולל התקנה שיבוץ צוות מזהה שיבוץ צוות מזהה רשומה תאריך התחלה תאריך סיום מרכז הפצה מזהה מרכז הפצה מזהה רשומה שם כתובת שוק צוות מזהה צוות מזהה רשומה שם סטטוס משאית מזהה משאית מזהה רשומה VIN מוכר גם בתור מספר צי מוכר גם בתור יצרן דגם לוחית רישוי סטטוס בדיוק אחד אפס או אחד אחד או רבים אפס או רבים © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

בשלב הזה אולי אתם חושבים: “Salesforce נותנת מזהה לכל רשומה.” נכון, ונגיע לזה. אם הנתונים חיים ב-Salesforce, כל רשומה מקבלת מזהה ש-Salesforce יוצרת. הוא מוצפן למראה וקשה לקריאה, אז בדרך כלל אנחנו גם חושפים שדה מזהה שאנשים יכולים להשתמש בו, כמו מספר משלוח D-000184227, שדה Auto Number. אנשים חושבים הרבה פעמים שהמספר הזה הוא המזהה של הרשומה, אבל הוא לא: המזהה של Salesforce עדיין נמצא שם מתחת. למערכת חיצונית או למסד נתונים, Oracle או SQL Server, יש גם מזהים ייחודיים משלהם. אבל הארכיטקטורה עשויה לכלול בסוף את Salesforce, את ה-ERP הפיננסי, את Snowflake, את Data 360, את המערכות של השותפים ומערכות שעוד לא קיימות. המודל הלוגי מתאר את הנתונים העסקיים בלי לגרום לכל החלטה להיות תלויה בטכנולוגיה אחת. איך Salesforce מממשת אותו פיזית זה שלב מאוחר יותר.

כשאני הופך מודל מושגי למודל לוגי, אני מחליט:

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

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