حل – كيف نبني شجرة تصنيفات متسلسلة داخل قاعدة البيانات

كمحلل أنظمة , أو مطور قد تواجهك مشكلة عند تحليل قاعدة البيانات والتي تتعلق بكثرة الصفوف المعتمدة على بعضها البعض مثل عمل تصنيفات للمواضيع لها تصنيفات رئيسية أو تطبيقات شجرية مثل شجرة العائلة أو الرسم الشجري أو عمل بريد رسائل (إرسال وإستلام) أو ماشابه وبالتأكيد تتبادر الكثير من الحلول , ولكن كباحثين عن الجودة , دائما ما نفكر في السرعة والكفاءة.

كيف نبني شجرة تصنيفات داخل قاعدة البيانات

هنا نطرح حلا من لحل المشكلة , الأمر ليس مقعدا كل ماعلينا هو عمل ثلاثة حقول بشكل رئيسي
حقل الأب , حقل سلسلة الآباء , حقل مستوى العمق

مثال : إنشاء جدول “tree”  بالحقول الرئيسية

CREATE TABLE `tree` (
`tree_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tree_parent_id` int(10) unsigned NOT NULL,
`tree_parents_path` varchar(200) DEFAULT NULL,
`tree_deep_level` int(10) unsigned DEFAULT ‘0’,
PRIMARY KEY (`tree_id`)
)

وبالتالي نقوم بإدخال القيم بالشكل التالي كمثال

INSERT INTO `tree` (`tree_id`,`tree_parent_id`,`tree_parents_path`,`tree_deep_level`VALUES (NULL , 0 , , 1);  — tree_id= 1INSERT INTO `tree` (`tree_id`,`tree_parent_id`,`tree_parents_path`,`tree_deep_level`VALUES (NULL , 1 , ‘1’, 2 );— tree_id= 2

INSERT INTO `tree` (`tree_id`,`tree_parent_id`,`tree_parents_path`,`tree_deep_level`VALUES (NULL , 2, ‘1.2’, 3);— tree_id= 3

INSERT INTO `tree` (`tree_id`,`tree_parent_id`,`tree_parents_path`,`tree_deep_level`) VALUES (NULL , 3, ‘1.2.3’, 4);— tree_id= 4

بمعنى أننا نقوم بإدخال `tree_parent_id`الأب الرئيسي للصف وفي حال كان الصف هو الرئيسي فإن القيمة تكون “0”

أما عن سلسلة الآباء `tree_parents_path` فنقوم بإدخال سلسلة الآباء بالترتيب والتفرع الأصلي , فمثلا الصف رقم 3 يأتي من سلسلة آباء ‘1.2’ ولكن الأب الرئيسي هو ‘2’

مستوى العمق `tree_deep_level` وهو يدل على أي مستوى الإبن الحالي موجود قد نستغني عنه عن طريق حساب (عدد سلسلة الآباء + 1)
ولكنه ممكن أن يفيد للبحث السريع في القاعدة عن مستوى معين من الآبناء

ومن هنا يمككنا تصميم شجرة في قاعدة البيانات والإستفادة من معلومات الصف للدلالة على الآباء بشكل مباشر دون الحاجة للبحث في كل الجدول عن سلسلة الآباء

أما على صعيد البرمجة فيمكننا الإستعانة بال Recursive في حال إحتجنا للتعامل مع سلسلة الآباء , الذي سنتكلم عنه لاحقا في حال كان هناك إهتمام بالأمر

دمتم بود , إلى تدوينة آخرى

شارك هذا الموضوع: