نقل قول: پیاده سازی درخت در SQL
سلام. من تنها موردی که تاحالابهش برخورده بودم(البته شبیه این زیاده) ، مربوط به موجودیت درس در یک دیتابیس مدرسه بود.یا همون Rerefrencing
به این صورت که هر درسی میتونه چند تا پیش نیاز داشته باشه و اون درس هم میتونه باز پیش نیاز درسای دیگه باشه
به این صورت میشه پیادش کرد
Id Name Parentid
به این صورت که id کلید اصلی ماخواهد بود و parent id کلید خارجی ماست که به کلید اصلی همین جدول جاریمون رفرنس پیدا میکنه.که میتونه null باشه.البته اولین رکورد(ریشه) باید parentid ش null باشه چون فعلا رکوردی ثبت نشده:چشمک:
نقل قول: پیاده سازی درخت در SQL
خوب اگه هر گره به چند گره دیگه اشاره کنه، نمیشه با این حالت پیمایش کرد.
نقل قول: پیاده سازی درخت در SQL
من دقیقامتوجه منظورتون نمیشم.
تو اون مثال هر گره ای میتونه چندین زیر گره یاهمون child داشته باشه و خودش هم میتونه child چندین گره باشه
و میتونید با join همین جدول باخودش کل اطلاعات رو پیمایش کنید
نقل قول: پیاده سازی درخت در SQL
سلام رفیق،
برای ذخیره درخت تو جدول باید یک فیلد ChildID و یک فیلد ParentID داشته باشی بعد یک Join بین ChildID (که کلید اصلی هست) و ParentID (که کلید خارجی هست) ایجاد کنی که به Self Referential Join مشهور هست. بعد توی Application باید به روش بازگشتی درخت رو پیمایش کنی:
private void TraverseNode(TreeNode node)
{
foreach nd in node.nodes
//do what you want
end loop
foreach nod in node.nodes
TraverseNode(nd) // این خط خود تابع را صدا می زند یعنی بازگشتی
end loop
}
تابع بالا شبه کد هست که ابتدا باید گره ریشه رو پاس بدی بقیه Node ها رو خودش پیمایش می کنه.
نقل قول: پیاده سازی درخت در SQL
این منطق رو از درس ساختمان داده ها می دونستم. تصور من اینه که SQL قاعدتا توابع خاص خودش رو برای پیمایش درخت داره و میشه با کوئری و Select کردن ها ستونها رو پیمایش کرد. والا احتمالا پیچیدگی الگوریتم بالا در دیتابیس نباید جالب باشه
نقل قول: پیاده سازی درخت در SQL