نموذج دو المتداخل

نموذج المجموعة المتداخلة هو أسلوب لتمثيل مجموعات المجموعات المتداخلة (المعروفة أيضًا بالأشجار أو التسلسلات الهرمية ) في قواعد البيانات العلائقية .

يعتمد هذا النظام على الفترات المتداخلة، التي "تتمتع بمناعة ضد مشكلة إعادة تنظيم التسلسل الهرمي، وتسمح بالإجابة على استعلامات التسلسل الهرمي لمسار السلف بشكل خوارزمي - دون الوصول إلى علاقة التسلسل الهرمي المخزنة". [ 1 ]

تحفيز

لا تستطيع الجبر العلائقي والحساب العلائقي القياسيان ، وعمليات SQL المبنية عليهما، التعبير مباشرةً عن جميع العمليات المطلوبة على التسلسلات الهرمية. ويُعدّ نموذج المجموعات المتداخلة حلاً لهذه المشكلة.

يُعدّ التعبير عن التسلسل الهرمي كعلاقة بين أب وابنه حلاً بديلاً. أطلق جو سيلكو على هذا النموذج اسم " نموذج قائمة التجاور" . إذا كان التسلسل الهرمي ذا عمق غير محدود، فإن نموذج قائمة التجاور لا يسمح بإجراء عمليات مثل مقارنة محتويات التسلسلات الهرمية لعنصرين، أو تحديد ما إذا كان عنصر ما يقع في التسلسل الهرمي الفرعي لعنصر آخر. أما عندما يكون التسلسل الهرمي ذا عمق ثابت أو محدود، فإن هذه العمليات ممكنة، ولكنها مكلفة، نظرًا لضرورة إجراء ربط علائقي واحد لكل مستوى. يُعرف هذا غالبًا باسم " مشكلة قائمة المواد" .

يمكن التعبير عن التسلسلات الهرمية بسهولة عن طريق التحويل إلى قاعدة بيانات رسومية . بدلاً من ذلك، توجد عدة حلول للنموذج العلائقي، وهي متاحة كحل بديل في بعض أنظمة إدارة قواعد البيانات العلائقية .

عندما لا تكون هذه الحلول متاحة أو غير مجدية، يجب اتباع نهج آخر.

تقنية

يعتمد نموذج المجموعة المتداخلة على ترقيم العقد وفقًا لتسلسل اجتياز الشجرة ، حيث يتم زيارة كل عقدة مرتين، مع تخصيص أرقام حسب ترتيب الزيارة، وفي كلتا الزيارتين. ينتج عن ذلك رقمان لكل عقدة، يتم تخزينهما كسمتين. يصبح الاستعلام غير مكلف: إذ يمكن اختبار عضوية التسلسل الهرمي بمقارنة هذين الرقمين. يتطلب التحديث إعادة الترقيم، وبالتالي فهو مكلف. يمكن للتحسينات التي تستخدم الأعداد النسبية بدلًا من الأعداد الصحيحة تجنب إعادة الترقيم، وبالتالي يكون التحديث أسرع، على الرغم من أنه أكثر تعقيدًا. [ 2 ]

مثال

في كتالوج متجر الملابس، يمكن تصنيف الملابس وفقًا للتسلسل الهرمي الموضح على اليسار:

تسلسل هرمي: أنواع الملابس
الترقيم الذي يتم تعيينه بواسطة اجتياز الشجرة
العقدةغادريمين
ملابس122
مِلك الرجال29
للنساء1021
بدلات38
بنطلون45
السترات67
فساتين1116
التنانير1718
البلوزات1920
فساتين سهرة1213
فساتين صيفية1415
التمثيل الناتج

تُعدّ فئة "الملابس" الأعلى في التسلسل الهرمي، وتشمل جميع الفئات الفرعية. ولذلك، تُمنح قيم نطاق يساري ويميني تبلغ 1 و22 على التوالي، حيث تُساوي القيمة الأخيرة ضعف إجمالي عدد العُقد المُمثلة. يحتوي المستوى الهرمي التالي على فئتي "الرجال" و"النساء"، وكلتاهما تتضمن مستويات فرعية يجب أخذها في الحسبان. تُخصص قيم نطاق يساري ويميني لكل عقدة بيانات في كل مستوى وفقًا لعدد المستويات الفرعية التي تحتويها، كما هو موضح في بيانات الجدول.

أداء

من المتوقع أن تكون الاستعلامات التي تستخدم مجموعات متداخلة أسرع من الاستعلامات التي تستخدم إجراءً مخزنًا لاجتياز قائمة مجاورة، ولذا فهي الخيار الأسرع لقواعد البيانات التي تفتقر إلى بنى الاستعلامات التكرارية الأصلية، مثل MySQL 5.x. [ 3 ] مع ذلك، من المتوقع أن يكون أداء استعلامات SQL التكرارية مماثلاً لاستعلامات "البحث عن العناصر التابعة المباشرة"، وأسرع بكثير لاستعلامات البحث المتعمق الأخرى، ولذا فهي الخيار الأسرع لقواعد البيانات التي توفرها، مثل PostgreSQL ، [ 4 ] وOracle ، [ 5 ] و Microsoft SQL Server . [ 6 ] كان MySQL يفتقر إلى بنى الاستعلامات التكرارية، ولكنه أضاف هذه الميزات في الإصدار 8. [ 7 ]

العيوب

نادرًا ما يُستخدم هيكل شجرة قاعدة بيانات ديناميكي لا نهائي. يُعدّ نموذج المجموعة المتداخلة مناسبًا عندما يكون عنصر الشجرة وسمة أو سمتين هما البيانات الوحيدة، ولكنه خيار غير مناسب عند وجود بيانات علائقية أكثر تعقيدًا لعناصر الشجرة. عند تحديد عمق ابتدائي عشوائي لفئة "المركبات" ووجود عنصر فرعي من "السيارات" مع عنصر فرعي من "مرسيدس"، يجب إنشاء علاقة جدول مفتاح خارجي ما لم يكن جدول الشجرة غير مُنمذج بطبيعته. قد لا تشترك سمات عنصر شجرة مُنشأ حديثًا في جميع السمات مع عنصر أب أو ابن أو حتى عنصر شقيق. إذا تم إنشاء جدول مفتاح خارجي لجدول سمات "النباتات"، فلن يتم ضمان سلامة بيانات سمات العنصر الفرعي "الأشجار" وعنصره الفرعي "البلوط". لذلك، في كل حالة يتم فيها إدراج عنصر في الشجرة، يجب إنشاء جدول مفتاح خارجي لسمات العنصر لجميع حالات الاستخدام باستثناء أبسطها.

إذا لم يكن من المتوقع تغيير بنية الشجرة بشكل متكرر، فيمكن إنشاء تسلسل هرمي مُنظّم بشكل صحيح لجداول السمات في التصميم الأولي للنظام، مما يؤدي إلى عبارات SQL أبسط وأكثر قابلية للنقل؛ وتحديدًا تلك التي لا تتطلب عددًا عشوائيًا من الجداول التي يتم إنشاؤها أو حذفها برمجيًا أثناء التشغيل لإجراء تغييرات على الشجرة. بالنسبة للأنظمة الأكثر تعقيدًا، يمكن تطوير التسلسل الهرمي من خلال النماذج العلائقية بدلًا من بنية شجرة رقمية ضمنية. يُعد عمق العنصر مجرد سمة أخرى وليس أساسًا لبنية قاعدة بيانات كاملة. كما ورد في كتاب "أنماط SQL المضادة" : [ 8 ]

تُعدّ المجموعات المتداخلة حلاً ذكياً، وربما أكثر من اللازم. كما أنها لا تدعم سلامة البيانات المرجعية. يُفضّل استخدامها عندما تحتاج إلى الاستعلام عن شجرة بشكل متكرر أكثر من حاجتك إلى تعديلها. [ 9 ]

لا يسمح النموذج بوجود فئات رئيسية متعددة. على سبيل المثال، يمكن أن يكون "البلوط" فرعًا من "نوع الشجرة"، وكذلك من "نوع الخشب". لذا، يجب إنشاء تصنيف أو نظام وسم إضافي لاستيعاب ذلك، مما يؤدي بدوره إلى تصميم أكثر تعقيدًا من النموذج الثابت البسيط.

تُعدّ المجموعات المتداخلة بطيئة جدًا في عمليات الإضافة، لأنها تتطلب تحديث قيم المجالين الأيمن والأيسر لجميع السجلات في الجدول بعد الإضافة. وهذا قد يُسبب ضغطًا كبيرًا على قاعدة البيانات، حيث يُعاد كتابة العديد من الصفوف وإعادة بناء الفهارس. مع ذلك، إذا أمكن تخزين مجموعة من الأشجار الصغيرة في جدول بدلًا من شجرة واحدة كبيرة، فقد ينخفض ​​الحمل الزائد بشكل ملحوظ، إذ يكفي تحديث شجرة صغيرة واحدة فقط.

لا يعاني نموذج الفترات المتداخلة من هذه المشكلة، ولكنه أكثر تعقيدًا في التنفيذ، وأقل شيوعًا. ومع ذلك، لا يزال يعاني من مشكلة جدول المفتاح الخارجي العلائقي. يخزن نموذج الفترات المتداخلة مواقع العقد كأعداد نسبية معبر عنها كحاصل قسمة (n/d).

الاختلافات

يُعاني استخدام نموذج المجموعة المتداخلة كما هو موضح أعلاه من بعض القيود في الأداء أثناء عمليات اجتياز الشجرة. على سبيل المثال، تتطلب محاولة العثور على العقد الفرعية المباشرة لعقدة أصلية تقليم الشجرة الفرعية إلى مستوى محدد كما في مثال كود SQL التالي:

حدد العقدة الفرعية ، والعقدة اليسرى ، والعقدة اليمنى من الشجرة كـ "الأصل" ، والشجرة كـ " الأصل " حيث تقع العقدة اليسرى للعقدة الفرعية بين العقدة اليسرى للأصل والعقدة اليمنى للأصل ، ولا يوجد ( -- لا توجد عقدة وسطى SELECT * FROM Tree as Mid WHERE العقدة الوسطى اليسرى بين العقدة اليسرى للأصل والعقدة اليمنى للأصل ، والعقدة اليسرى للعقدة الفرعية بين العقدة الوسطى اليسرى والعقدة الوسطى اليمنى ، والعقدة الوسطى غير موجودة في ( العقدة الأصلية ، العقدة الفرعية ) ) و العقدة اليسرى للأصل = 1 -- فهرس العقدة الأصلية اليسرى المعطى

أو بعبارة أخرى:

حدد العقدة الفرعية ، والعقدة اليسرى ، والعقدة اليمنى المميزة من الشجرة (Tree as Child , Tree as Parent ) حيث تكون العقدة اليسرى للشجرة الأبوية أصغر من العقدة اليسرى للشجرة الفرعية ، والعقدة اليمنى للشجرة الأبوية أكبر من العقدة اليمنى للشجرة الفرعية . ثم قم بتجميع النتائج حسب العقدة الفرعية ، والعقدة اليسرى ، والعقدة اليمنى للشجرة الفرعية ، مع تحديد العقدة اليسرى للشجرة الأبوية كأقرب سلف .

ستكون عملية البحث أكثر تعقيدًا عند البحث عن أبناء على عمق يزيد عن مستوى واحد. وللتغلب على هذا القيد وتبسيط عملية اجتياز الشجرة، تمت إضافة عمود إضافي إلى النموذج للحفاظ على عمق العقدة داخل الشجرة.

العقدةغادريمينعمق
ملابس1220
مِلك الرجال291
للنساء10211
بدلات382
بنطلون453
السترات673
فساتين11162
التنانير17182
البلوزات19202
فساتين سهرة12133
فساتين صيفية14153
التمثيل الناتج

في هذا النموذج، يمكن إيجاد الأبناء المباشرين بالنظر إلى عقدة أصلية باستخدام كود SQL التالي :

SELECT Child.Node , Child.Left , Child.Right FROM Tree as Child , Tree as Parent WHERE Child.Depth = Parent.Depth + 1 AND Child.Left > Parent.Left AND Child.Right < Parent.Right AND Parent.Left = 1 -- معطى فهرس العقدة اليسرى للعقدة الأب

انظر أيضاً

مراجع

  1. "ترميز شجرة الفترات المتداخلة في لغة SQL"، فاديم تروباشكو؛ شركة أوراكل. النسخة الأصلية متاحة على الرابط التالي: https://web.archive.org/web/20111119165033/http://sigmod.org/publications/sigmod-record/0506/p47-article-tropashko.pdf
  2. هازل، دانيال (2008). "استخدام الأعداد النسبية لتصنيف المجموعات المتداخلة". arXiv : 0806.3115 [ cs.DB ].
  3. كواسنوي (29 سبتمبر 2009)، "قائمة التجاور مقابل المجموعات المتداخلة: MySQL" ، شرح موسع ، تم الاطلاع عليه في 11 ديسمبر 2010
  4. كواسنوي (24 سبتمبر 2009)، "قائمة التجاور مقابل المجموعات المتداخلة: PostgreSQL" ، شرح موسع ، تم الاطلاع عليه في 11 ديسمبر 2010
  5. كواسنوي (28 سبتمبر 2009)، "قائمة التجاور مقابل المجموعات المتداخلة: أوراكل" ، شرح موسع ، تم الاطلاع عليه في 11 ديسمبر 2010
  6. كواسنوي (25 سبتمبر 2009)، "قائمة التجاور مقابل المجموعات المتداخلة: خادم SQL" ، شرح موسع ، تم الاطلاع عليه في 11 ديسمبر 2010
  7. "MySQL :: دليل مرجعي لـ MySQL 8.0 :: 13.2.15 WITH (تعبيرات الجداول الشائعة)" . dev.mysql.com . تم الاطلاع عليه بتاريخ 2021-09-01 .  
  8. بيل، كاروين (2010-06-17). أنماط SQL المضادة . ص 328. 
  9. بيل، كاروين. أنماط SQL المضادة . ص 44.