نوشته شده توسط
Mahmoud Zaad
سلام
چیزی که به نظر من می رسه و البته تست نشده، شما در این مورد کلاً نباید رکوردی رو حذف یا ویرایش کنید. یعنی اولاً یه فیلد داشته باشید که نشان دهنده وضعیت رکورد باشه به این صورت که 0 برای رکورد فعال، 1 برای رکورد ویرایش شده و 2 برای رکورد حذف شده. حالا هر تغییر یا حذفی که اتفاق افتاد از یک طرف فیلد وضعیت در رکورد مورد نظر رو ویرایش یعنی اون فیلد وضعیت رو به 1 یا 2 تغییر بدید. از طرف دیگه اگر رکورد ویرایش بود یک رکورد جدید با اطلاعات جدید ثبت کنید و فیلد وضعیتش رو 0 قرار بدید. تا اینجای کار اگر ما رکوردهایی که فیلد وضعیتشون 0 هست رو سلکت کنیم، درخت فعلی یعنی آخرین تغییرات کاربر به دست میاید و سابقه تغییرات رو هم داریم.
برای حالتی که میخواهید تغییرات قبلی رو ببینید 2 حالت وجود داره یکی اینکه مثل حالت Undo , Redo باشه و با هر بار Back زدن، یک تغییر قبلی نمایش داده بشه. که در اینجا میشه با استفاده از id رکورد تمام رکوردهایی که idشون کمتر و مساوی با رکورد فعلی هست و فیلد وضعیتشون مساوی 0 هست(به جز رکورد جاری) رو نمایش داد و همینطور برای رکوردهای کمتر.
ولی یه حالت هم وجود داره که کاربر امروز یه درختی رو ذخیره کنه بعد فردا چند رکورد رو ویرایش کنه و چند تا رو حذف کنه و کل این تغییرات رو بعنوان یک درخت جدید ذخیره کنه. یعنی شما وقتی Undo میزنید یکی یکی تغییرات رو نمایش نده و یکدفعه برگرده به قبل از اون 10 تغییر. اینجا میشه از تاریخ کمک گرفت یا یک فیلد جدید. به اینصورت که یک دکمه ذخیره نهایی باشه و وقتی اولین بار اطلاعات ذخیره میشه همه رکوردها مقدارشون 1 باشه. در سری های بعدی تغییرات و حذف و اضافه ها رو پیدا کنیم و مقدار این فیلد رو برای اونها 2 بگذاریم و ...
البته میگم تست نشده ولی امتحان کنید ضرر نداره!