تخزين التسلسل الهرمي المجلد في قاعدة البيانات العلائقية

StackOverflow https://stackoverflow.com/questions/719278

سؤال

لدي أشياء تمثل مجلدات وأتساءل عما إذا كان ينبغي تمثيلها في قاعدة البيانات.

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

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

هل كانت مفيدة؟

المحلول

الفكرة شيء مثل هذا (المرجع الذاتي):

CREATE TABLE FileSystemObject ( 
    ID int not null primary key identity,
    Name varchar(100) not null,
    ParentID int null references FileSystemObject(ID),
    constraint uk_Path UNIQUE (Name, ParentID),
    IsFolder bit not null
)

نصائح أخرى

نلقي نظرة على ERD في منتصف هذا صفحة. وبعد تسمح لك عامل التسلسل الهرمي في طاولة منفصلة لدعم تصنيفات متعددة.

اسأل نفسك أولا ما هو الغرض من الحفاظ على التسلسل الهرمي في قاعدة البيانات وما هي وظيفة تكسبها بذلك. ثم اسأل النظر في العمل والصيانة التي تدخل في القيام بذلك.

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

خادم SQL لديه hierarchyid نوع البيانات الذي يحتوي على دعم لهياكل هرمية. يعمل فقط في النسخة الكاملة، مانع لك.

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