بنية البيانات المستخدمة لبنية الدليل؟
-
05-07-2019 - |
سؤال
أقوم بإنشاء برنامج يقوم المستخدم ببناء الدلائل فيه (ليس في Windows، في تطبيقي) وفي هذه المجلدات توجد مجلدات فرعية وما إلى ذلك؛يجب أن يحتوي كل مجلد إما على مجلدات أو مستندات.ما هو أفضل هيكل بيانات للاستخدام؟لاحظ أنه يمكن للمستخدم تحديد مجلد فرعي والبحث عن المستندات الموجودة فيه وفي مجلداته الفرعية.ولا أريد تحديد المجلدات أو مستويات المجلدات الفرعية.
المحلول
وهذا هو ما أقوم به:
وكل سجل في قاعدة البيانات حقلين: ID وParentID. معرفات هي 4-5 حرفا (Base36، من الألف إلى الياء: 0-9 أو شيئا من هذا القبيل). معرفات الأم هي سلسلة من الهيكل الكامل للوالدين ...
وهكذا ...
وهذا الهيكل:
Root
Folder1
Folder2
Folder3
Folder4
Folder5
Folder6
هل تكون ممثلة مثل هذا:
ID ParentID Name
0000 NULL ROOT
0001 0000 Folder1
0002 0000 Folder2
0003 00000002 Folder3
0004 0000 Folder4
0005 00000004 Folder5
0006 000000040005 Folder6
وأنا أحب هذا الهيكل لأنه إذا كنت بحاجة إلى العثور على كافة الملفات ضمن مجلد أستطيع أن أفعل استعلام مثل:
SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1
لحذف المجلد وكافة أبنائه:
DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'
لنقل مجلد وأبنائها، لديك لتحديث كافة السجلات التي تستخدم نفس الأم، إلى الأصل الجديد.
<اقتباس فقرة>وأنا لا أريد أن linit المجلدات أو مستويات المجلدات الفرعية
اقتباس فقرة>وهناك قيود واضحة لهذا هو أن عدد من المجلدات الفرعية تقتصر على حجم الحقل ParentID الخاص بك.
نصائح أخرى
يمكنني التفكير في بعض الطرق التي يمكنك من خلالها تنظيم هذا الأمر، ولكن لا شيء يمكن أن يتفوق على ما هو واضح:
استخدم نظام الملفات الفعلي.
وأود أن أوصي B + شجرة .... يمكنك بسهولة استخدام الفهرسة (صفحة، المجلد الخ) وجميع.
B + شجرة http://commons.wikimedia.org/wiki/File:Btree بابوا نيو غينيا
لمزيد من المعلومات: http://ozark.hendrix.edu/~burch/ خدمات العملاء / 340 / القراءة / شجرة باير / index.html و
وأنا أعلم أن مسألة يسأل خصيصا لهيكل البيانات ولكن ...
إذا كنت تستخدم لغة وجوه المنحى ربما يمكنك استخدام نمط تصميم المركبة التي هي مناسبة بشكل مثالي لهذا النوع من شجرة هرمية مثل هيكل. تحصل على ما يطلبون.
ومعظم اللغات OO تأتي مع نوع من التجريد لنظام الملفات، حتى لا يكون هناك حيث أود أن تبدأ. ثم فئة فرعية أنه إذا كنت في حاجة إليها.
وأتوقع الدلائل على أنها مجموعة من الأشياء التي هي الدلائل أو الملفات، على سبيل المثال.
ويمكنك استخدام متر في اتجاه شجرة بنية بيانات