صمّم حتى الشكل الطبيعي الثالث، ثم تراجع
متاح أيضًا بـ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)

الوحدة 5 من 6 في فصل نمذجة البيانات من أجل المعنى، الفصل 2 من دورة Data Architect. كل وحدة قائمة بذاتها. السابق: ضع البيانات حيث تنتمي · التالي: حوّل النموذج إلى Salesforce
السؤال الذي تجيب عنه هذه الوحدة: متى ينبغي أن أبتعد عن قصد عن نموذج مطبَّع نظيف؟
في الوحدة السابقة، قلت لك أن تصمّم وفق الشكل الطبيعي الثالث.
والآن سأقول لك أن تكسره.
أحيانًا.
هذا تمييز مهم. هناك فرق كبير بين أن تبني نموذج بيانات فوضويًا عن غير قصد، وأن تلغي تطبيع نموذج نظيف عن قصد. إذا لم تفهم أين تنتمي البيانات أصلًا، فنسخها إلى مكان آخر ليس معمارية. إنه مجرد تكرار.
لكن بمجرد أن أفهم النموذج المنطقي النظيف، أستطيع أن أتخذ قرارًا واعيًا بتشكيل البيانات بطريقة مختلفة للأشخاص والأنظمة التي تستهلكها.
صمّم حتى الشكل الطبيعي الثالث حيثما أمكن. ثم تراجع عند الضرورة.
لاحظ ما لا تقوله تلك العبارة. لا تقول إن الشكل الطبيعي الثالث أسهل فهمًا. أحيانًا يكون أصعب: النموذج المطبَّع بالكامل قد يبعثر فكرة عمل واحدة على خمسة كائنات، وعلى من يستخدمونه أن يعيدوا تجميعها في رؤوسهم. التطبيع يخبرني أين تنتمي كل حقيقة. لكنه لا يعد بأن ذلك هو الشكل الأسهل في القراءة أو الاستخدام أو إعداد التقارير. ولهذا بالضبط يكون التراجع مهارة تصميم وليس فشلًا.
ابدأ بنمذجة الحقيقة. ثم قرر كيف ينبغي أن تُقدَّم تلك الحقيقة.
اجلس، ابقَ، نمذِج
Section titled “اجلس، ابقَ، نمذِج ”لنعد إلى الكلاب، وهذه المرة نتخذ بعض الخيارات المقصودة.
السلالة: قائمة اختيار، أم جدول خاص بها؟ مرّرها على الأسئلة التي سأعطيك إياها لاحقًا في هذه الوحدة. هل هناك أكثر من عمود واحد من المعلومات؟ نعم: الحجم، على الأقل. كم عدد القيم؟ تعترف نوادي تربية الكلاب ببضع مئات من السلالات (نادي American Kennel Club وحده يسرد 205)، وهذا أكثر بكثير من قاعدتي التقريبية البالغة نحو 20. لذلك تستحق السلالة جدولها الخاص، ويشير كل كلب إلى سلالته. وهذا يحسم السؤال الذي حملناه منذ الوحدة 1: السلالة مربع قائم بذاته.
مستوى المهارة: قائمة اختيار. قيد التعلّم، جيد، خبير. ثلاث تسميات، لا شيء آخر يُقال عنها، ولن تتغيّر. هذا بالضبط ما وُجدت قائمة الاختيار من أجله.
كم حيلة يعرف كل كلب؟ الإجابة موجودة بالفعل في النموذج: عُدّ سجلات حيلة الكلب الخاصة بالكلب. لكن المدرّب يريد ذلك الرقم في كل تقرير، ليرتّب به ويصفّي عليه، دون بناء تقرير عبر جدولين. لذلك أتراجع، وأحتفظ بعدد الحيل المتقنة (Tricks Known) على الكلب مباشرة. هذه نسخة. الحقيقة ما زالت تعيش في حيلة الكلب؛ والعدد تمثيل لها، ويجب أن يبقى متوافقًا معها. يمنحنا Salesforce طريقة نظيفة لفعل ذلك بالضبط، وسنراها في الوحدة 6.
والآن المفاجأة: مدرسة الكلاب بدأت تقبل القطط. ماذا نفعل؟ خيار أول: نضيف جدول قطط بجوار جدول الكلاب، وحيلة القط بجوار حيلة الكلب. كل شيء يتضاعف: نسختان من كل شاشة، ونسختان من كل تقرير، ويوم يقبلون الأرانب، ثلاث نسخ. الخيار الآخر: نتراجع خطوة ونلاحظ أن للقط مالكًا، وربما مربّيًا، وسلالة، وتاريخ ميلاد، ومع بعض الصبر، حيلة أو اثنتين. الحقائق نفسها والعلاقات نفسها التي للكلب. لذلك نعمّم: الحيوان الأليف (Pet)، مع النوع (Species)، كلب أو قط. كل سلالة تنتمي أيضًا إلى نوع، وهناك يعيش النوع حقًا: اللابرادور كلب. والحيوان الأليف يحمل نسخة منه، عن قصد، لكي تبدأ كل شاشة وكل تقرير بسؤال «كلب أم قط؟» دون الرجوع إلى السلالة. نسخة مقصودة أخرى، وفي الوحدة 6 تحصل على وظيفة خاصة بها.
هذا هو التصميم من أجل التغيير، وهو مفاضلة. عمّم مبكرًا جدًا، وسيصبح كل شيء «شيئًا» غامضًا بحقل نوع لا يفهمه أحد. أنا أعمّم عندما يأتيني العمل فعلًا بالنوع الثاني، ويشترك الاثنان في كل شيء تقريبًا، كما تفعل الكلاب والقطط هنا. لو احتاجت القطط إلى حقائق مختلفة جدًا، لفكرت مرتين.
والآن الأنواع نفسها من الخيارات في Steve Trucking، حيث المخاطر أكبر.
النموذج الأنظف ليس دائمًا النظام الأفضل
Section titled “النموذج الأنظف ليس دائمًا النظام الأفضل ”تخيّل طاقمًا عند محطة. للتوصيلة أغراضها. وللتركيب قائمة تحقق. وكل خطوة تحتاج إلى صور. والمستلم يوقّع.
النموذج المطبَّع جميل: التوصيلة ← بند التوصيلة ← قائمة تحقق التركيب ← الصورة، كلٌّ في مكانه.
ثم أجلس مع الأشخاص الذين يستخدمونه فعلًا. يُغلق الطاقم نحو عشر محطات يوميًا، في ممرات المنازل، وكثيرًا بلا إشارة. إذا كان نموذجي الجميل يرسلهم عبر متاهة من الشاشات والقوائم المرتبطة لإنهاء محطة واحدة، فلديّ مشكلة معمارية.
نموذج البيانات ليس الشيء الوحيد الذي نصمّمه.
نحن نصمّم نظامًا.
أحيانًا تفوز تجربة المستخدم
Section titled “أحيانًا تفوز تجربة المستخدم ”هذا أحد الأسباب التي تجعلني أحيانًا أبتعد عن نموذج مطبَّع تمامًا: تجربة المستخدم.
ربما يمكن تقنيًا أن يكون مفهوم ما كيانًا قائمًا بذاته، لكن فصله يضيف تعقيدًا لا يقدّم إلا قيمة ضئيلة. ربما يكون أب بعدة مستويات من الأبناء نظيفًا أكاديميًا لكنه بائس في الإدخال والصيانة. ربما يكون المفهوم صغيرًا ومستقرًا ويُستخدم في الغالب للاختيار.
هنا أتوقف عن السؤال فقط: «أين تنتمي هذه الحقيقة نظريًا؟» وأبدأ في السؤال: «كيف سيُستخدم هذا النظام فعلًا؟»
هذا لا يعني أن كل شكوى من نقرة إضافية تسطّح النموذج. بل يعني أن سهولة الاستخدام مُدخل معماري مشروع.
أحيانًا تفوز التقارير
Section titled “أحيانًا تفوز التقارير ”التقارير سبب شائع آخر.
كل شريك تجزئة يريد بطاقة أداء: التوصيلات في موعدها حسب المنطقة، وحسب الشهر. في النموذج النظيف، تعرف التوصيلة مركز توزيعها، ويعرف المركز منطقته. تقنيًا، نستطيع التنقل عبر ذلك.
لكن هل تستطيع أداة التقارير؟ هل يستطيع الأشخاص الذين يبنون تقاريرهم بأنفسهم؟ هل يستطيعون الإجابة عن السؤال دون معمارية تقارير أعقد من السؤال نفسه؟
عندها قد أنسخ المنطقة أو أشتقها إلى التوصيلة، أقرب إلى المكان الذي تُستهلك فيه.
الآن أدخلت التكرار. لذلك أحتاج إلى سؤال آخر: من يملك الحقيقة؟
إذا تغيّرت القيمة في المصدر، فماذا يحدث لنسختي؟ هل ينبغي أن تتغيّر؟ أم ينبغي أن تحتفظ بما كان صحيحًا عندما حدثت التوصيلة؟ هذان متطلبان مختلفان.
إلغاء التطبيع لا يزيل التعقيد.
بل ينقله.
علاقة بحث أم قائمة اختيار؟
Section titled “علاقة بحث أم قائمة اختيار؟ ”هذا مثال أصغر يصادفه مسؤولو Salesforce طوال الوقت. يحتاج المستخدم إلى الاختيار من مجموعة قيم. هل أنشئ كيانًا آخر وأرتبط به، أم أستخدم قائمة اختيار؟
خذ حالة التوصيلة: مجدولة، محمّلة، خرجت للتوصيل، على وشك الوصول، تم التوصيل، تم التركيب، استثناء، مُرتجعة. قائمة قصيرة ومستقرة من التسميات. قائمة الاختيار هي بالضبط ما أريده.
والآن خذ نوع المحطة: توصيل فقط، توصيل مع تركيب، توصيل مع نقل القديم. هذا يحمل معلومات خاصة به: كم تستغرق المحطة، وما المهارات التي يحتاجها الطاقم، وأي قائمة تحقق للتركيب تنطبق. إنه يتغيّر بشكل مستقل، والعمل هو الذي يديره. هذا كيان، لا تسمية.
إذا أنشأت كائنًا لكل مفهوم يمكن نظريًا تطبيعه، فقد أبني نظامًا جميلًا تقنيًا لا يستمتع أحد باستخدامه. وإذا حوّلت كل مفهوم إلى قائمة اختيار لأن ذلك سهل، فقد أحشر نفسي في زاوية بسرعة كبيرة.
لذلك أسأل: هل له معلومات خاصة به؟ علاقات؟ هل يتغيّر بشكل مستقل؟ هل يحتاج إلى أن يُدار بوصفه بيانات؟ هل يمكن أن يحتاج العمل منه في النهاية إلى أكثر من تسمية؟
هذه هي الأسئلة التي أطرحها فعلًا في جلسة التصميم.
هل هناك أكثر من عمود واحد من المعلومات؟ إذا احتاجت القيمة إلى وصف، أو مدة، أو قائمة مهارات، أو مالك، فلم تعد تسمية.
كم عدد القيم؟ قاعدتي التقريبية نحو 20. بعد 20 قيمة، تبدأ قائمة الاختيار في الانهيار، ويحين وقت التفكير في كائن. الولايات، وهي خمسون، استثناء نتعايش معه، والدول أسوأ؛ بصراحة، هل يحب أحد قوائم اختيار الدول؟ أظنها مزعجة.
هل تُنشأ القيم بمرور الوقت، ومن ينشئها؟ إضافة قيمة إلى قائمة اختيار تغيير في الإعدادات، وهذا يعني مسؤول نظام. إذا كان العمل يضيف قيمًا كل أسبوع، والأشخاص الذين يضيفونها ليسوا مسؤولي أنظمة، فقائمة الاختيار تضع طلب دعم أمام كل قيمة جديدة.
هل يحتاج الناس إلى التصفية وإعداد التقارير عليها؟ قوائم الاختيار رائعة لذلك. علاقات البحث ليست بالنظافة نفسها. كل علاقة بحث تضيف قفزة: نوع التقرير لا يتبع إلا سلسلة قصيرة من الكائنات المرتبطة (نوع التقرير المخصص يسمح بأربع علاقات كائنات على الأكثر)، وتتحول الشاشة إلى قوائم مرتبطة داخل قوائم مرتبطة، ويصبح الكود أعقد.
كثيرًا ما تبدأ قائمة القيم حياتها قائمةَ اختيار، ومع الوقت تستحق أن تصبح كائنًا مستقلًا. دعها تستحق ذلك.
أحيانًا يغيّر النطاق الإجابة
Section titled “أحيانًا يغيّر النطاق الإجابة ”تصميم يعمل بشكل جميل مع بضعة آلاف من السجلات قد يتصرف بشكل مختلف جدًا مع الملايين.
لذلك لا تنظر إلى المخطط وحده. اعرف الأرقام.
تُجري Steve Trucking نحو مليون توصيلة سنويًا، وتنمو بنسبة 30% سنويًا. كل توصيلة تجمع نحو ثمانية تحديثات للحالة. هذا ثمانية ملايين سجل حالة هذا العام، ونحو 13.5 مليون سنويًا بحلول العام الثالث. أضف أربعة أو خمسة ملايين صورة سنويًا.
النموذج نفسه. معمارية مختلفة جدًا.
سنتعمق أكثر بكثير في المعمارية على نطاق واسع. أما الآن، فتذكّر: الحجم يمكن أن يغيّر قرارًا في نمذجة البيانات. العلاقة الصحيحة منطقيًا ليست تلقائيًا التصميم المادي الأفضل عند كل نطاق.
المستهلكون المختلفون يريدون أشكالًا مختلفة
Section titled “المستهلكون المختلفون يريدون أشكالًا مختلفة ”حتى الآن كنا نفكر في النظام التشغيلي. المنسّقون يوزّعون التوصيلات على المسارات. والطواقم تُغلق المحطات. والنظام يتغيّر مع سير العمل.
لكن العمل يريد أيضًا تحليل سنوات من التاريخ. أي الشركاء والمناطق يتأخرون؟ كيف تغيّر زمن التوصيل؟ كم مرة تحتاج عمليات التركيب إلى زيارة ثانية؟
قد يريد النظام التحليلي المعلومات نفسها منظّمة بشكل مختلف. ستسمع مصطلحات مثل مستودع البيانات (data warehouse)، وجدول الحقائق (fact)، والبُعد (dimension)، والمخطط النجمي (star schema). لن نفصّلها هنا؛ ففي Steve Trucking هذا هو مستودع Snowflake، وسنعود إليه لاحقًا في الدورة.
أما الآن: قد يحتاج المستهلكون المختلفون إلى أشكال مختلفة من الحقيقة نفسها.
الذكاء الاصطناعي يضيف مستهلكًا آخر
Section titled “الذكاء الاصطناعي يضيف مستهلكًا آخر ”والآن هناك مستهلك آخر: الذكاء الاصطناعي.
يرسل مستلم رسالة نصية: «أين توصيلتي؟» قد يبحث مساعد ذكاء اصطناعي عن هذا:
التوصيلة 10427، المسار 3312، المحطة 7، الشاحنة 117، النافذة 13:00–15:00.
التطبيق التقليدي سعيد تمامًا باتباع تلك العلاقات. لكن لكي يجيب المساعد المستلمَ، يحتاج إلى سياق مُجمَّع من عدة أماكن:
غسالة الصحون من Redrock هي المحطة السابعة على مسار اليوم من مركز توزيع Phoenix. الشاحنة على بُعد ثلاث محطات، وما زلت ضمن نافذتك من 13:00 إلى 15:00.
أخذنا معلومات من عدة كيانات مرتبطة وجمعناها في تمثيل أكثر تسطّحًا وغنيّ بالسياق لمستهلك واحد بعينه.
هذا لا يعني أنني أدمّر نموذجي المطبَّع. وبالتأكيد لا يعني «الذكاء الاصطناعي يحب البيانات المسطّحة، فضع كل شيء في كائن واحد عملاق.» لا تفعل ذلك.
مصدر الحقيقة يبقى نظيفًا. والذكاء الاصطناعي يحصل على تمثيل مبني للوظيفة التي يؤديها. إنها الفكرة نفسها التي رأيناها للتو مع التحليلات:
مصدر واحد للحقيقة يمكن أن يدعم أشكالًا متعددة للاستهلاك.
سنتعمق أكثر بكثير في التأريض بالبيانات (grounding) والاسترجاع لاحقًا في الدورة.
لا تصنع حقائق متعددة
Section titled “لا تصنع حقائق متعددة ”هناك خطر هنا.
إذا نسخت المنطقة إلى التوصيلة من أجل التقارير، وأرسلت نسخة مسطّحة إلى Snowflake، وبنيت نسخة غنية بالسياق لمساعد الذكاء الاصطناعي، فأيها الصحيحة؟
هذا السؤال يحتاج إلى إجابة. أريد أن أعرف أين تعيش القيمة المرجعية المعتمدة. وكل ما عداها تمثيل لتلك الحقيقة لغرض ما.
ذلك المكان هو نظام السجل (system of record). يمكن أن تكون النسخ غير المطبَّعة جيدة: شاشة المحطة، وبطاقة الأداء، وSnowflake، وسياق الذكاء الاصطناعي، كلٌّ منها يؤدي وظيفته أفضل بشكل مبني من أجله، والرجوع إليها لا بأس به. لكن عندما يتغيّر شيء ما، يبدأ التغيير في نظام السجل، وهو عادةً النموذج العلائقي، ويتدفق إلى الخارج نحو كل نسخة. لا أحد يصحّح المنطقة في Snowflake، ولا يعدّل سياق الذكاء الاصطناعي يدويًا. صحّحها في المصدر، ودع التغيير يتدفق.
ويكون ذلك أهم ما يكون عندما تتغيّر البيانات. إذا انتقل مركز توزيع إلى منطقة أخرى اليوم، فهل ينبغي أن تُظهر توصيلات الشهر الماضي المنطقة الجديدة؟ ربما. وربما لا. من أجل التاريخ، قد أحتاج إلى المنطقة التي كانت صحيحة عندما حدثت التوصيلة. لم تعد هذه مشكلة مزامنة. إنها قرار عمل.
لهذا لا ينبغي أبدًا أن يحدث إلغاء التطبيع بالمصادفة. كل حقيقة مكررة تثير أسئلة عن الملكية والمزامنة والتاريخ والثقة. إنه التفكير بالمفاضلة من الفصل 1: اعرف ما الذي تشتريه (شاشة أسهل، وتقرير أبسط، وسياق أفضل للذكاء الاصطناعي) وما الذي تدفعه (بيانات مكررة، ومزامنة، وملكية أعقد للحقيقة). ولأننا بدأنا من نموذج منطقي نظيف، نستطيع أن نشير إلى كل نسخة ونقول: «أعرف أن هذا ينتمي إلى هناك. وأضع تمثيلًا له هنا بسبب هذا المتطلب.» هذا قرار نستطيع مراجعته وتحدّيه وتدوينه، ليعرف المعماري التالي السبب.
ما الذي يقرره المعماري هنا
Section titled “ما الذي يقرره المعماري هنا ”عندما أفكر في إلغاء التطبيع، فأنا أقرر:
- أين يعيش المصدر المرجعي المعتمد لكل حقيقة عمل.
- هل يسبب النموذج النظيف مشكلات حقيقية للمستخدمين أو التقارير أو النطاق أو الأداء.
- هل يستحق تمثيل أبسط التكرار، وكيف تبقى النسخة جديرة بالثقة.
- هل ينبغي أن تتغيّر القيم التاريخية عندما يتغيّر المصدر الحالي.
- هل تحتاج التحليلات أو الذكاء الاصطناعي إلى شكل للبيانات مختلف عن النظام التشغيلي.
نقطة الانطلاق لا تتغيّر أبدًا: اعرف أين تنتمي الحقيقة. ثم، عندما تبرّر المتطلبات ذلك، شكّلها من أجل تقديمها.
بعد ذلك، يعود Salesforce إلى الصورة. سنحوّل ما صمّمناه إلى نموذج بيانات مادي.
للاستزادة
Section titled “للاستزادة ”- Build Powerful Reports with Custom Report Types (opens in a new tab)، Salesforce Admins، 24 يونيو 2019 (بالإنجليزية، تم التحقق في 2026-10-12): نوع التقرير المخصص «يمكن أن يمتد إلى 4 علاقات كائنات.»
- Unleash the hounds, terriers and lapdogs: American Kennel Club recognizes 3 more breeds (opens in a new tab)، PBS NewsHour، 2 يناير 2026 (بالإنجليزية، تم التحقق في 2026-10-12): «يعترف AKC بـ 205 سلالات، منها هذه السلالات الثلاث الجديدة.»
- للمتعة: FCI Breeds Nomenclature (opens in a new tab)، Fédération Cynologique Internationale (بالإنجليزية، تم التحقق في 2026-10-12): قائمة السلالات لدى الاتحاد الدولي، في عشر مجموعات. تصفّحها وسترى لماذا استحقت السلالة جدولها الخاص.
