1. Nested Set
('nested-set')
مزایا:
- سریع برای خواندن (دریافت کل زیردرخت با یک کوئری)
- بهینه برای عملیات خواندن سنگین
- بدون نیاز به بازگشت (recursion)
معایب:
- پیچیده برای درج/حذف/جابجایی
- نیاز به قفل جدول در عملیات نوشتن
کاربرد: سیستمهایی که بیشتر عملیات خواندن دارند (مثل منوهای سایت، دستهبندی محصولات)
2. Materialized Path
('materialized-path')
مزایا:
- ساده برای درک و پیادهسازی
- نیاز به تغییرات کم در عملیات نوشتن
- ذخیره مسیر کامل در یک فیلد
معایب:
- کوئریهای پیچیدهتر برای برخی عملیات
- محدودیت در طول مسیر
مثال: path: "1.5.12.25" (والدها با نقطه جدا شدهاند)
کاربرد: سیستمهای مدیریت محتوا، ساختار سازمانی
3. Closure Table
('closure-table')
مزایا:
- انعطافپذیرترین روش
- ساده برای عملیات نوشتن
- پشتیبانی از چندین والد (در برخی پیادهسازیها)
معایب:
- نیاز به جدول اضافی
- حجم داده بیشتر
ساختار:
- جدول اصلی:
categories - جدول ارتباطی:
category_closureبا فیلدهایancestor_id,descendant_id,depth
کاربرد: سیستمهای پیچیده با نیاز به تغییرات مکرر در ساختار