PDA

View Full Version : سوال: ذخیره TreeView در داخل یک جدول دیتابیس



hojjatshariffam
یک شنبه 04 مهر 1389, 15:44 عصر
سلام دوستان من
من میخوام اطلاعات یک تری ویو رو اخل دیتابیس ذخیره کنم
1- بطوری که فقط یک جدول لازم باشه
2- سطوح تری ویو نا محدود باشه (یعنی هر چند تا که لازم باشه فرزند داشته باشه یک پدر)
3- الگوریتمی پیشنهاد بشه که با یک بار سلکت روی جدول کل TreeView با همه پیچیدگی آرایشی که داره پر بشه

ضمنا فکر کنم با چند تلنگر در مورد معماریش متوجه بشم و نیاز به کد ندارم ، فقط ایده میخوام
متشکرم

mohsen_csharp
یک شنبه 04 مهر 1389, 17:58 عصر
من بارها این کارو انجام دادم
باید تو جدولت یه parent Code داشته باشی که به کد پدر هر فیلد اشاره کنه.
مسلما سطح اول درخت دارای Parent code ، null خواهد بود.
روش ذخیره و بازیابی هم با توابع بازگشتی انجام میشه.

hojjatshariffam
دوشنبه 05 مهر 1389, 12:33 عصر
من بارها این کارو انجام دادم
باید تو جدولت یه parent Code داشته باشی که به کد پدر هر فیلد اشاره کنه.
مسلما سطح اول درخت دارای Parent code ، null خواهد بود.
روش ذخیره و بازیابی هم با توابع بازگشتی انجام میشه.
ممنون دوست من
در مورد ذخیرش که فکر نکنم مشکلی باشه چون در هر لحظه برای هر نود ، parent Code اون رو تو یه متغیر نگه میداریم و تا به نود دیگری نرسیدیم اون کد پدر ماست یعنی میشه از یه لیست استفاده کرد که کار یک پشته رو انجام بده ولی در مورد بازیابیش چطور ؟چون الزاما که اینا پشت سر هم تو جدول نیستند که تک تک ببینیم که آیا نود جاری فرزد کدوم نود قبلیه بلکه ممکنه یک فرزند قبل از پدرش از دیتا بیس خارج بشه
آیا باید شماره سطح هم ذخیره کنیم و سطح به سطح از جدول پایگاه داده فچ کنیم یا راه حلی دیگه داره؟
شما مد نظرتون برای توابع بازگشتی فکر کنم بیشتر برای نوشتنش بود تا خوندنش ، بله؟

mohsen_csharp
سه شنبه 06 مهر 1389, 18:46 عصر
با سلام
فرقی نمی کنه هم برای ذخیره و هم برای بازیابی از توابع بازگشتی استفاده می شود.
اگه سطح نود رو ذخیره کنی کار ساده تر میشه

hojjatshariffam
سه شنبه 06 مهر 1389, 19:51 عصر
با سلام
فرقی نمی کنه هم برای ذخیره و هم برای بازیابی از توابع بازگشتی استفاده می شود.
اگه سطح نود رو ذخیره کنی کار ساده تر میشه
ممنون میشم بازیابیشئ یکم توضیح بدین

Alirezanet
چهارشنبه 07 مهر 1389, 00:16 صبح
من هم همین مشکلات رو داشتم و سال پیش اینکارو کردم ... ولی نه با دیتابیس !
از Xml به عنوان دیتابیس استفاده کردم !
خیلی هم خوب جواب داد فقط یک مقدار حجم فایل زیاد میشه !
موفق باشید

mehdi.mousavi
چهارشنبه 07 مهر 1389, 00:35 صبح
من بارها این کارو انجام دادم باید تو جدولت یه parent Code داشته باشی که به کد پدر هر فیلد اشاره کنه.

سلام.
لزوما نیازی به استفاده از این روش نیست. این راهی که شما می فرمایید نیز یک روشه که بهش میگن Adjacency Technique. روشهای دیگری نیز وجود داره، از جمله:


Path Technique
Nested Sets (که بهش LR Method هم میگن، L مخفف Left و R مخفف Right).

بسته به شرایط شاید بهتر باشه روشهای دیگه رو پیاده سازی کنید.

موفق باشید.

پاورقی: برای آشنایی با متودهای فوق، خوندن مقالات زیر رو توصیه می کنم:

Hierarchies (trees) in SQL Server 2005 (http://blogs.msdn.com/b/anthonybloesch/archive/2006/02/15/hierarchies-in-sql-server-2005.aspx)
Storing/Retrieving Hierarchies In SQL Server Database (http://weblogs.ASP.NET/aghausman/archive/2009/03/16/storing-retrieving-hierarchical-data-in-sql-server-database.aspx)
Handling Recursive Hierarchies in SQL Server (http://www.tbig.com.au/forums/bi-monkey/3646-handling-recursive-hierarchies-sql-server.html)
Recursive Hierarchies (http://kamfonas.com/id3.html)