سؤال

أقوم بإنشاء برنامج يقوم المستخدم ببناء الدلائل فيه (ليس في 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 تأتي مع نوع من التجريد لنظام الملفات، حتى لا يكون هناك حيث أود أن تبدأ. ثم فئة فرعية أنه إذا كنت في حاجة إليها.

وأتوقع الدلائل على أنها مجموعة من الأشياء التي هي الدلائل أو الملفات، على سبيل المثال.

ويمكنك استخدام متر في اتجاه شجرة بنية بيانات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top