انواع روش‌های سلسله مراتب در TypeORM

1. Nested Set

@Tree('nested-set')

مزایا:

  • سریع برای خواندن (دریافت کل زیردرخت با یک کوئری)
  • بهینه برای عملیات خواندن سنگین
  • بدون نیاز به بازگشت (recursion)

معایب:

  • پیچیده برای درج/حذف/جابجایی
  • نیاز به قفل جدول در عملیات نوشتن

کاربرد: سیستم‌هایی که بیشتر عملیات خواندن دارند (مثل منوهای سایت، دسته‌بندی محصولات)

 

2. Materialized Path 

@Tree('materialized-path')

مزایا:

  • ساده برای درک و پیاده‌سازی
  • نیاز به تغییرات کم در عملیات نوشتن
  • ذخیره مسیر کامل در یک فیلد

معایب:

  • کوئری‌های پیچیده‌تر برای برخی عملیات
  • محدودیت در طول مسیر

مثال: path: "1.5.12.25" (والدها با نقطه جدا شده‌اند)

کاربرد: سیستم‌های مدیریت محتوا، ساختار سازمانی

 

3. Closure Table

@Tree('closure-table')

مزایا:

  • انعطاف‌پذیرترین روش
  • ساده برای عملیات نوشتن
  • پشتیبانی از چندین والد (در برخی پیاده‌سازی‌ها)

معایب:

  • نیاز به جدول اضافی
  • حجم داده بیشتر

ساختار:

  • جدول اصلی: categories
  • جدول ارتباطی: category_closure با فیلدهای ancestor_id, descendant_id, depth

کاربرد: سیستم‌های پیچیده با نیاز به تغییرات مکرر در ساختار