المؤلف اختار صندوق الإنترنت المفتوح/حرية التعبير لتلقي تبرع كجزء من برنامج Write for DOnations.
مقدمة
إذا كنت تمتلك الكثير من الخبرة في العمل مع قواعد البيانات العلائقية، قد يكون من الصعب تجاوز مبادئ نموذج العلاقات، مثل التفكير من حيث الجداول والعلاقات. قواعد البيانات الموجهة نحو المستندات مثل MongoDB تجعل من الممكن التحرر من الجد rigidity والقيود التي تفرضها النماذج العلائقية. ومع ذلك، المرونة والحرية التي تأتي مع القدرة على تخزين مستندات تلقائية الوصف في قاعدة البيانات يمكن أن تؤدي إلى مخاطر وصعوبات أخرى.
هذه المقالة المفاهيمية تحدد خمس إرشادات شائعة متعلقة بتصميم المخطط في قاعدة بيانات موجهة نحو المستندات وتسلط الضوء على الاعتبارات المختلفة التي يجب أن يأخذها المرء في الاعتبار عند نمذجة العلاقات بين البيانات. ستمر أيضًا بعدة إستراتيجيات يمكن استخدامها لنمذجة هذه العلاقات، بما في ذلك تضمين المستندات داخل المصفوفات واستخدام المراجع الفرعية والأم وأيضًا متى تكون هذه الإستراتيجيات مناسبة للاستخدام.
المبدأ 1 — تخزين معًا ما يحتاج إلى الوصول إليه معًا
في قاعدة بيانات علاقية تقليدية، يتم الاحتفاظ بالبيانات في جداول، ويتم بناء كل جدول بقائمة ثابتة من الأعمدة التي تمثل الصفات المختلفة التي تشكل كيانًا أو كائنًا أو حدثًا. على سبيل المثال، في جدول يمثل الطلاب في جامعة، قد تجد أعمدة تحمل اسم الطالب الأول واسمه الأخير وتاريخ الميلاد ورقم تعريف فريد.
عادةً، يمثل كل جدول موضوعًا واحدًا. إذا أردت تخزين معلومات عن دراسة الطالب الحالية أو المنح الدراسية أو التعليم السابق، قد يكون من المنطقي الاحتفاظ بتلك البيانات في جدول منفصل عن الجدول الذي يحتوي على معلوماتهم الشخصية. ثم يمكنك ربط هذه الجداول للإشارة إلى وجود علاقة بين البيانات في كل منها، مما يشير إلى أن المعلومات التي تحتويها لها ارتباط ذو معنى.
على سبيل المثال، يمكن لجدول يصف حالة المنح الدراسية لكل طالب أن يشير إلى الطلاب برقم هويتهم الطلابية، لكنه لن يخزن اسم الطالب أو عنوانه مباشرة، مما يتجنب تكرار البيانات. في مثل هذه الحالة، لاسترداد معلومات عن أي طالب مع جميع المعلومات عن حسابات التواصل الاجتماعي للطالب، والتعليم السابق، والمنح الدراسية، سيحتاج الاستعلام إلى الوصول إلى أكثر من جدول في وقت واحد ثم تجميع النتائج من جداول مختلفة في واحد.
هذه الطريقة لوصف العلاقات من خلال المراجع تُعرف باسم نموذج البيانات الموجَّه. تخزين البيانات بهذه الطريقة – باستخدام عدة كائنات منفصلة وموجزة ترتبط ببعضها البعض – ممكن أيضًا في قواعد البيانات الموجهة نحو المستندات. ومع ذلك، فإن مرونة نموذج المستند والحرية التي يمنحها لتخزين المستندات المضمنة والمصفوفات داخل مستند واحد تعني أنه يمكنك نمذجة البيانات بشكل مختلف عما قد تفعله في قاعدة بيانات علائقية.
المفهوم الأساسي لنمذجة البيانات في قاعدة بيانات موجهة نحو المستند هو “تخزين ما سيتم الوصول إليه معًا”. “التنقيب أكثر في مثال الطالب، لنقل أن معظم الطلاب في هذه المدرسة لديهم أكثر من عنوان بريد إلكتروني واحد. ولهذا السبب، تريد الجامعة القدرة على تخزين عدة عناوين بريد إلكتروني مع معلومات الاتصال لكل طالب.
في حالة مثل هذه، يمكن أن يكون للمستند مثال على الهيكل التالي:
لاحظ أن هذا المستند المثالي يحتوي على قائمة مضمنة من عناوين البريد الإلكتروني.
تمثيل أكثر من موضوع واحد داخل مستند واحد يميز نموذج بيانات غير معياري. يسمح للتطبيقات باسترجاع ومعالجة جميع البيانات ذات الصلة لكائن معين (هنا، طالب) دفعة واحدة دون الحاجة إلى الوصول إلى كائنات ومجموعات منفصلة متعددة. كما يضمن ذلك الأصلية في العمليات على مثل هذا المستند دون الحاجة إلى استخدام معاملات متعددة المستندات لضمان النزاهة.
تخزين ما يحتاج إلى الوصول إليه معًا باستخدام المستندات المضمنة غالبًا ما يكون الطريقة الأمثل لتمثيل البيانات في قاعدة بيانات على أساس المستند. في الإرشادات التالية، ستتعلم كيف يمكن نمذجة العلاقات المختلفة بين الكائنات، مثل العلاقات واحد لواحد أو واحد لأكثر من واحد، بشكل أفضل في قاعدة بيانات على أساس المستند.
إرشاد 2 — نمذجة العلاقات واحد لواحد باستخدام المستندات المضمنة
العلاقة واحد لواحد تمثل ارتباطًا بين كائنين مختلفين حيث يرتبط كائن واحد بنوع واحد بالضبط.
وما يتمتع به كل طالب هو واحد من بطاقاتهم الدراسية الصالحة في أي نقطة معينة من الوقت. لا تخص واحدة من هذه البطاقات لمجموعة من الطلاب، ولا يمكن للطالب أن يمتلك بطاقات تعريف متعددة. إذا كنت ترغب في تخزين جميع هذه البيانات في قاعدة بيانات نظامية، فقد تبدو من المنطقي أن تمثل العلاقة بين الطلاب وبطاقاتهم الدراسية عن طريق تخزين السجلات الطلابية وبطاقات الهوية في جداول منفصلة التي تترابط بعضها بالمرادفات.
إحدى الطرق الشائعة لتمثيل هذه العلاقات في قاعدة بيانات المستندات هو باستخدام المستندات المدمجة. على سبيل المثال، المستند التالي يوصف طالب يدعى Sammy وبطاقته الدراسية:
لاحظ أن بدلاً من القيمة الواحدة، يحمل هذا المثال المستند المدمج التالي يمثل بطاقة الهوية للطالب، وهي توصفت برقم الهوية، تاريخ إصدار البطاقة، وتاريخ إنتهاء البطاقة. تأتي بطاقة الهوية ببساطة كجزء من المستند الذي يوصف طالب Sammy، 即使في الحقيقة هي جزء من العالم المنفصل. عادةً، التشكيل للنموذج المستندي كهذا لكي تستطيع جميع المعلومات المتصلة بالبحث الواحد هو خيار جيد.
يصبح الأمور أقل بساطة إذا أتت إليك علاقات تربط واحد من الأنواع بالعديد من أنواع أخرى، مثل بعض أعمال البريد الإلكتروني للطلاب، أو المقررات التي يحضرونها، أو الرسائل التي ينشرونها على لوحة المعلومات الطل
المبدأ 3 – نمذجة العلاقات “واحد إلى قليل” باستخدام المستندات المضمنة
عندما يكون الكائن من نوع ما مرتبطًا بعدة كائنات من نوع آخر، يمكن وصفها بأنها علاقة واحد إلى عدة. يمكن أن يمتلك الطالب عدة عناوين بريد إلكتروني، ويمكن أن يحتوي السيارة على عدة أجزاء، أو يمكن أن يتكون طلب التسوق من عدة عناصر. كل هذه الأمثلة تمثل علاقة واحد إلى عدة.
بينما الطريقة الأكثر شيوعًا لتمثيل علاقة واحد إلى واحد في قاعدة بيانات المستندات هي من خلال مستند مضمن، هناك عدة طرق لنمذجة علاقات واحد إلى عدة في مخطط المستندات. عند النظر في خياراتك لكيفية نمذجة هذه بشكل أفضل، على الرغم من ذلك، هناك ثلاث خصائص للعلاقة المعطاة يجب أن تأخذها في الاعتبار:
- الكاردينالية: الكاردينالية هي مقياس لعدد العناصر الفردية في مجموعة معينة. على سبيل المثال، إذا كان للفصل 30 طالبًا، يمكنك القول إن للفصل كاردينالية 30. في علاقة واحد إلى عدة، يمكن أن تختلف الكاردينالية في كل حالة. قد يمتلك الطالب عنوان بريد إلكتروني واحد أو عدة. قد يكون مسجلًا في بضع فصول فقط أو قد يكون لديه جدول مليء بالكامل. في علاقة واحد إلى عدة، سيؤثر حجم “العدة” على كيفية نمذجة البيانات.
- الوصول المستقل: بعض البيانات ذات الصلة سيكون من غير المألوف، إن لم يكن مستحيلا، الوصول إليها بشكل منفصل عن الكائن الرئيسي. على سبيل المثال، قد يكون من غير المألوف استرداد عنوان بريد إلكتروني لطالب واحد دون تفاصيل أخرى عن الطالب. من ناحية أخرى، قد تحتاج الجامعة إلى الوصول إلى الدورات وتحديثها بشكل فردي، بغض النظر عن الطالب أو الطلاب الذين يسجلون لحضورها. ما إذا كنت ستصل إلى مستند ذو صلة بمفرده أم لا سيؤثر أيضًا على كيفية تصميم البيانات.
- ما إذا كانت العلاقة بين البيانات علاقة أحادية إلى متعددة بشكل صارم: فكر في الدورات التي يحضرها طالب مثالي في الجامعة. من وجهة نظر الطالب، يمكنه المشاركة في عدة دورات. قد يبدو هذا على السطح كعلاقة أحادية إلى متعددة. ومع ذلك، نادرًا ما تحضر الدورات الجامعية بواسطة طالب واحد؛ بشكل أكثر شيوعًا، سيحضر نفس الدرس عدة طلاب. في مثل هذه الحالات، العلاقة المعنية ليست حقًا علاقة أحادية إلى متعددة، بل إنها علاقة متعددة إلى متعددة، وبالتالي يجب اتخاذ نهج مختلف لنمذجة هذه العلاقة عما تفعله في حالة علاقة أحادية إلى متعددة.
تخيل أنك تقرر كيفية تخزين عناوين البريد الإلكتروني للطلاب. يمكن لكل طالب أن يمتلك عدة عناوين بريد إلكتروني، مثل واحدة للعمل، وواحدة للاستخدام الشخصي، وواحدة مقدمة من الجامعة. قد يأخذ المستند الذي يمثل عنوان بريد إلكتروني واحد شكلًا مثل هذا:
من حيث العدد، سيكون هناك عدد قليل فقط من عناوين البريد الإلكتروني لكل طالب، حيث من غير المحتمل أن يمتلك الطالب العشرات – ولا حتى المئات – من عناوين البريد الإلكتروني. وبالتالي، يمكن تصنيف هذه العلاقة على أنها علاقة واحد-إلى-قليل، وهو سبب مقنع لدمج عناوين البريد الإلكتروني مباشرة في مستند الطالب وتخزينها معًا. لا يوجد أي مخاطرة بأن يزداد قائمة عناوين البريد الإلكتروني بلا حدود، مما يجعل المستند كبيرًا وغير فعال في الاستخدام.
ملاحظة: احرص على أن هناك بعض المخاطر المرتبطة بتخزين البيانات في المصفوفات. على سبيل المثال، لا يمكن أن يتجاوز مستند MongoDB حجم 16 ميغابايت. بينما من الممكن وشائع دمج مستندات متعددة باستخدام حقول المصفوفات، إذا نمت قائمة الكائنات بلا قيود فقد يصل المستند بسرعة إلى هذا الحد الأقصى للحجم. بالإضافة إلى ذلك، تخزين كمية كبيرة من البيانات داخل المصفوفات المضمنة له تأثير كبير على أداء الاستعلام.
دمج مستندات متعددة في حقل مصفوفة سيكون مناسبًا في العديد من الحالات، ولكن اعلم أنه قد لا يكون دائمًا الحل الأمثل.
بالنسبة للوصول المستقل، من غير المحتمل أن يتم الوصول إلى عناوين البريد الإلكتروني بشكل منفصل عن الطالب. وهذا يمثل سببًا آخر مقنعًا لدمجها داخل مستند الطالب.
الأخير على الموضوع هو ما إذا كان هذا العلاقة حقا علاقة واحد إلى عدة بدلا من علاقة كثير إلى كثير. لأن عنوان البريد الإلكتروني ينتمي إلى شخص واحد، من المنطقي وصف هذا العلاقة كعلاقة واحد إلى عدة (أو ربما أكثر دقة، علاقة واحد إلى قليل) بدلا من علاقة كثير إلى كثير.
هذه الثلاثة افتراضات تقترح أن دمج عناوين البريد الإلكتروني المختلفة للطلاب داخل نفس المستندات التي تصف الطلاب أنفسهم سيكون اختيارا جيدا لتخزين هذا النوع من البيانات. قد يأخذ مستند عينة لطالب مع عناوين البريد الإلكتروني المضمنة هذا الشكل:
باستخدام هذا الهيكل، في كل مرة تسترجع فيها مستند طالب ستسترجع أيضا عناوين البريد الإلكتروني المضمنة في نفس عملية القراءة.
إذا كنت تمثل علاقة من نوع واحد إلى قليل، حيث لا تحتاج المستندات ذات الصلة إلى الوصول بشكل مستقل، فإن دمج المستندات مباشرة مثل هذا هو عادة مرغوب فيه، حيث يمكن أن يقلل من تعقيد المخطط.
كما ذكر سابقا، على الرغم من ذلك، فإن دمج المستندات مثل هذا ليس دائما الحل الأمثل. تقدم القسم التالي مزيدا من التفاصيل حول سبب ذلك قد يكون الحال في بعض السيناريوهات، ويوضح كيفية استخدام المراجع الفرعية كبديل لتمثيل العلاقات في قاعدة بيانات المستندات.
المبدأ 4 – نمذجة العلاقات “واحد إلى عدة” و”عدة إلى عدة” باستخدام المراجع الفرعية
طبيعة العلاقة بين الطلاب وعناوين البريد الإلكتروني لهم أثرت على أفضل طريقة لنمذجة هذه العلاقة في قاعدة بيانات مستندية. هناك بعض الاختلافات بين هذا وبين العلاقة بين الطلاب والدورات التي يحضرونها، لذا ستكون طريقة نمذجة العلاقات بين الطلاب ودوراتهم مختلفة أيضًا.
يمكن أن يتبع مستند يصف دورة واحدة يحضرها الطالب هيكلًا مثل هذا:
لنفترض أنك قررت من البداية استخدام المستندات المضمنة لتخزين معلومات حول دورات كل طالب، كما في هذا المثال:
سيكون هذا مستند MongoDB صالحًا تمامًا وقد يخدم الغرض جيدًا، لكن ضع في اعتبارك ثلاث خصائص العلاقة التي تعلمتها في المبدأ السابق.
الأول هو الكاردينالية. من المحتمل أن يحتفظ الطالب بعدد قليل من عناوين البريد الإلكتروني، لكنه يمكن أن يحضر دورات متعددة خلال دراسته. بعد عدة سنوات من الحضور، قد يكون هناك العديد من الدورات التي شارك فيها الطالب. بالإضافة إلى ذلك، سيحضر هذه الدورات مع العديد من الطلاب الآخرين الذين يحضرون أيضًا مجموعة الدورات الخاصة بهم على مدار سنوات حضورهم.
إذا قررت تضمين كل دورة كما في المثال السابق، فإن وثيقة الطالب ستصبح غير متحكمة بسرعة. مع حجم أكبر من الكرندالية، فإن منهج تضمين الوثيقة تصبح أقل جاذبية.
الاعتبار الثاني هو الوصول المستقل. على عكس عناوين البريد الإلكتروني، من الجيد أن نفترض أن هناك حالات ستحتاج فيها إلى استرجاع معلومات عن الدورات الجامعية بمفرديها. على سبيل المثال، لنقل أن شخصًا ما يحتاج إلى معلومات عن الدورات المتاحة لإعداد كراس السوق. بالإضافة إلى ذلك، ستحتاج الدورات إلى تحديث من وقت لآخر: قد يتغير المدرس الذي يدرس الدورة، قد تتغير جدولها، أو قد تحتاج إلى تحديث المتطلبات السابقة.
إذا كنت تخزن الدورات كوثائق مضمنة ضمن وثائق الطلاب، فإن استرجاع قائمة كاملة بالدورات المقدمة من الجامعة سيصبح عملًا معقدًا. بالإضافة إلى ذلك، ستحتاج في كل مرة تحتاج فيها الدورة إلى تحديث، إلى العودة إلى كل سجلات الطلاب وتحديث معلومات الدورة في كل مكان. كلاهما أسباب جيدتان لتخزين الدورات بمفردها وليس التضمين الكامل.
الشيء الثالث الذي يجب التفكير فيه هو ما إذا كان العلاقة بين الطالب ودورة الجامعة هي في الواقع واحد إلى متعدد أو متعدد إلى متعدد. في هذه الحالة، هو الآخر، حيث أن أكثر من طالب واحد يمكنه حضور كل دورة. جوهرة العلاقة وجوانب الوصول المستقل تشيران ضد تضمين كل وثيقة دورة، بشكل رئيسي لأسباب عملية مثل سهولة الوصول والتحديث. بناءً على طبيعة العلاقة المتعدد إلى متعدد بين الدورات والطلاب، قد يكون من المنطقي تخزين وثائق الدورات في مجموعة منفصلة تحتوي على معرفات فريدة لها.
المستندات التي تمثل الفئات في هذا المجموعة المنفصلة قد تحتوي على بنية مثل هذه الأمثلة:
إذا قررت تخزين معلومات الدورات بتلك الطريقة، ستحتاج إلى إيجاد طريقة لربط الطلاب بالدورات بهذه الطريقة حتى تعرف أيهما من الطلاب يحضرون أي دورات. في حالات مثل هذه حيث عدد العناصر المرتبطة ليس كبيرًا بشكل مفرط، خاصة مع العلاقات من متى لمتى، واحدة من الطرق الشائعة لتحقيق ذلك هي استخدام الإشارات الفرعية.
مع الإشارات الفرعية، سيشير المستند للطالب إلى معرفات العناصر للدورات التي يحضرها الطالب في مصفوفة مدمجة، كما في هذا المثال:
لاحظ أن هذا المثال من المستند لا يزال يحتوي على حقل الدورات
الذي هو أيضًا مصفوفة، ولكن بدلاً من دمج مستندات الدورات الكاملة كما في المثال السابق، فإنه يدمج فقط المعرفات التي تشير إلى مستندات الدورات في المجموعة المنفصلة. الآن، عند استرجاع مستند طالب، لن تكون الدورات متاحة فورًا وستحتاج إلى الاستعلام عنها على حدة. من ناحية أخرى، يعلم الفور أي دورات يجب استرجاعها. كما أنه، في حالة تحتاج أي تفاصيل دورة لتحديث، يكون على الرحل تعديل مستند الدورة نفسه فقط. كل الإشارات بين الطلاب ودوراتهم ستبقى صالحة.
ملاحظة: لا توجد قاعدة صارمة لتحديد متى يكون عدد العناصر في العلاقة كبيرًا جدًا لدمج إشارات الفرعية بهذه الطريقة. قد تختار طريقة مختلفة إما عند عدد أقل أو أكبر من العناصر إذا كان ذلك ما يناسب بشكل أفضل التطبيق المقدم. بعد كل شيء، دائمًا تريد structuring بياناتك لتناسب الطريقة التي يستعلم بها ويقوم بتحديثها تطبيقك.
إذا كنت تقوم بنمذجة علاقة واحد إلى كثير حيث يكون عدد المستندات ذات الصلة ضمن الحدود المعقولة وتحتاج إلى الوصول إلى المستندات ذات الصلة بشكل مستقل، فإنه يفضل تخزين المستندات ذات الصلة بشكل منفصل وتضمين مراجع الأطفال للاتصال بها.
الآن بعد أن تعلمت كيفية استخدام مراجع الأطفال للإشارة إلى العلاقات بين أنواع مختلفة من البيانات، سيقدم هذا الدليل مفهوماً عكسياً: مراجع الوالد.
المبدأ 5 — نمذجة العلاقات واحد إلى كثير غير محدودة باستخدام مراجع الوالد
استخدام مراجع الأطفال يعمل بشكل جيد عندما يكون هناك العديد من الكائنات ذات الصلة لدمجها مباشرة داخل المستند الأصل، ولكن العدد لا يزال ضمن الحدود المعروفة. ومع ذلك، هناك حالات عندما يكون عدد المستندات المرتبطة قد يكون غير محدود وسيستمر في النمو مع مرور الوقت.
على سبيل المثال، تخيل أن مجلس الطلاب في الجامعة لديه منتدى حيث يمكن لأي طالب نشر أي رسائل يريدون، بما في ذلك أسئلة حول الدورات، قصص السفر، إعلانات الوظائف، مواد الدراسة، أو مجرد محادثات حرة. نموذج رسالة في هذا المثال يتكون من موضوع ونص الرسالة:
يمكنك استخدام أي من النهجين المناقشين سابقاً – التضمين ومراجع الأطفال – لنمذجة هذه العلاقة. إذا كنت تقرر التضمين، قد يأخذ مستند الطالب شكلاً مثل هذا:
ومع ذلك، إذا كان الطالب نشيطًا في كتابة الرسائل، فسيصبح مستنده بسرعة طويلًا بشكل لا يُصدق ويمكن أن يتجاوز بسهولة الحد الأقصى للحجم البالغ 16 ميغابايت، لذا فإن عدد العناصر في هذه العلاقة تشير ضد التضمين. بالإضافة إلى ذلك، قد تحتاج الرسائل إلى الوصول إليها بشكل منفصل عن الطالب، كما قد يكون الحال إذا تم تصميم صفحة اللوحة الإعلانية لعرض أحدث الرسائل التي نشرها الطلاب. هذا أيضًا يشير إلى أن التضمين ليس الخيار الأفضل في هذا السيناريو.
ملاحظة: يجب أن تفكر أيضًا في ما إذا كانت رسائل لوحة الإعلانات تُستخدم بشكل متكرر عند استرجاع مستند الطالب. إذا لم يكن كذلك، فإن وجودها جميعًا مضمنًا داخل هذا المستند سيتسبب في عقوبة أداء عند استرجاع ومعالجة هذا المستند، حتى عندما لا يُستخدم قائمة الرسائل في كثير من الأحيان. غالبًا ما يكون الوصول غير المتكرر للبيانات ذات الصلة دليلًا آخر على أنك لا يجب أن تضمّن المستندات.
الآن ضع في اعتبارك استخدام المراجع الفرعية بدلاً من تضمين المستندات الكاملة كما في المثال السابق. ستُخزن الرسائل الفردية في مجموعة منفصلة، ويمكن أن يكون لمستند الطالب الهيكل التالي:
في هذا المثال، يخزن الحقل `message_board_messages
` الآن المراجع الفرعية لجميع الرسائل التي كتبها سامي. ومع ذلك، فإن تغيير النهج يحل فقط أحد المشاكل التي ذكرناها سابقًا في أنه سيكون الآن من الممكن الوصول إلى الرسائل بشكل مستقل. ولكن على الرغم من أن حجم وثيقة الطالب سينمو بشكل أبطأ باستخدام نهج المراجع الفرعية، فقد يصبح مجموعة معرفات الكائنات أيضًا غير قابلة للتحكم نظرًا للبطاقة اللامحدودة لهذه العلاقة. في النهاية، يمكن للطالب كتابة آلاف الرسائل خلال أربع سنوات من دراسته.
في مثل هذه السيناريوهات، يكون الطريقة الشائعة لربط كائن بآخر من خلال المراجع الأصلية. على عكس المراجع الفرعية التي تم وصفها سابقًا، فإنه لم يعد المستند الخاص بالطالب يشير إلى الرسائل الفردية، بل إن المرجع في مستند الرسالة يشير إلى الطالب الذي كتبها.
لاستخدام المراجع الأصلية، ستحتاج إلى تعديل مخطط مستند الرسالة ليحتوي على مرجع للطالب الذي كتب الرسالة:
لاحظ أن الحقل الجديد `posted_by
` يحتوي على معرف الكائن لمستند الطالب. الآن، لن يحتوي مستند الطالب على أي معلومات حول الرسائل التي نشرها:
لاسترداد قائمة الرسائل التي كتبها الطالب، ستستخدم استعلامًا على مجموعة الرسائل وتصفية ضد الحقل `posted_by
`. وجودهم في مجموعة منفصلة جعلها آمنة لترك قائمة الرسائل تنمو دون التأثير على أي من مستندات الطلاب.
ملاحظة: عند استخدام المراجع الأبوية، يمكن زيادة اداء الاستعلام بشكل كبير عند كل مرة تقوم فيها بالتصفية حسب معرف الوثيقة الأبوية من خلال إنشاء فهرس على الحقل الذي يشير إلى الوثيقة الأبوية.
إذا كنت تقوم بنمذجة علاقة واحد إلى متعدد حيث يكون عدد الوثائق ذات الصلة غير محدود، بغض النظر عما إذا كانت الوثائق بحاجة إلى الوصول إليها بشكل مستقل، فمن المستحسن عمومًا تخزين الوثائق ذات الصلة بشكل منفصل واستخدام المراجع الأبوية لربطها بالوثيقة الأبوية.
خاتمة
بفضل مرونة قواعد البيانات الموجهة نحو الوثائق، فإن تحديد أفضل طريقة لنمذجة العلاقات في قواعد بيانات الوثائق يكون أقل دقة منه في قواعد البيانات العلائقية. من خلال قراءة هذه المقالة، تعرفت على تضمين الوثائق واستخدام المراجع الفرعية والأبوية لتخزين البيانات ذات الصلة. لقد تعلمت عن النظر في عدد العلاقات وتجنب المصفوفات غير المحدودة، وكذلك النظر في ما إذا كانت الوثيقة ستتم الوصول إليها بشكل مستقل أو بشكل متكرر.
هذه مجرد بعض الإرشادات التي يمكن أن تساعدك في نمذجة العلاقات النموذجية في MongoDB، ولكن نمذجة شكل قاعدة البيانات ليست شيئًا واحدًا يناسب الجميع. دائمًا ما تأخذ في الاعتبار تطبيقك وكيفية استخدامه وتحديث البيانات عند تصميم الشكل.
لمعرفة المزيد حول تصميم النماذج والأنماط الشائعة لتخزين أنواع مختلفة من البيانات في MongoDB، نشجعك على مراجعة الوثائق الرسمية لـ MongoDB حول هذا الموضوع.
Source:
https://www.digitalocean.com/community/tutorials/how-to-design-a-document-schema-in-mongodb