PDA

View Full Version : نگهداری تغییرات رکورد ها در یک جدول



amirpz
دوشنبه 04 دی 1391, 13:26 عصر
چه طور میشه تغییرات رکوردهای یک جدول رو نگهداری کرد طوریکه کاربر بتونه تغییرات یک موجودیت خاص رو بر اساس زمان های مختلف ببینه؟

من چند تا راه حل مختلف پیدا کردم :

1- هر بار که اطلاعات هریک از فیلدهای یک رکورد تغییر می کنه اون رو به عنوان یک رکورد جدید در همون جدول ذخیره می کنیم. باید یک فیلد جداگانه وجود داشته باشه که بوسیله اون بتونیم این رکوردها رو به هم وصل کنیم. این فیلد باید از جنس کلید اصلی این جدول باشه و همین طور یک فیلد تاریخ و زمان تغییر رو نشون بده

2- هر بار که اطلاعات هریک از فیلدهای یک رکورد تغییر می کنه اون رو به عنوان یک رکورد جدید در همون جدول ذخیره می کنیم با این تفاوت که این دفعه فقط اطلاعات فیلد تغییر کرده ذخیره بشه و باقی فیلدهای دست نخورده یک مقدار نول ، خالی یا یک مقدار پیش فرض داشته باشند. طبیعتاً مثل راه حل اول به دو فیلد یکی برای اتصال این رکوردها به همدیگه و دیگری برای زمان و تاریخ تغییر نیاز داریم.

3- باید یک جدول جداگانه داشته باشیم که در این جدول مشخص شده کدام فیلد از کدام رکورد جدول اول در چه زمانی با چه مقداری جایگزین شده (شخصاً فکر می کنم از نظر دردسر پیاده سازی به صرفه نباشه)

4- استفاده از فایل گزارش همراه پایگاه داده که تغییرات دیتابیس در آن ذخیره می شه. (نمی دونم چه جوری)

سئوال من اینه که :
آیا راه حل های دیگه ای هم هست ؟
کدومیکی به نظرتون بهترین راه حله و چرا؟
اگه خودتون تجربه انجام همچین کاری رو دارین بهم بگین از چه روشی استفاده کردین و مزایا و معایب و محدودیت هاش چی بود؟

amirpz
دوشنبه 04 دی 1391, 14:12 عصر
یک مسأله مهم دیگه هم هست که من به اون اشاره نکردم و اونم اینه که می خوایم بدونیم کدوم کاربر تغییر مورد نظر رو اعمال کرده و اینکه رکوردهای اطلاعات کاربران هم می تونه به هیمن شکل تغییر کنه.

ferdin
دوشنبه 04 دی 1391, 22:31 عصر
سلام

من پیشنهاد می دم که از یک تیبل جدا مثلا LogTable1 استفاده کن ، هر بار که یک ردیفی به table1 اضافه و یا ویرایش می شه همونو دقیقا تو تیبل لاگ اضافه کن و اسم کاربر هم جز فیلدات باشه ، بعدا که می خوای یک موردو پیگیری کنی می تونی با مقایسه هر ردیف با ردیف بالاییش متوجه موارد تغییر یافته بشی . شاید بگی که این به صرفه نیست اما بسته به نوع استفاده ای که قراره این تیبل برات داشته باشه بر می گرده ، اگه فقط باید یک لاگ باشه خود من ترجیح می دم که تیبل جدا داشته باشم برای لاگ.

amirpz
سه شنبه 05 دی 1391, 19:58 عصر
سلام از بابت اینکه وقت گذاشتید و جواب دادید ممنوم.
من خودم هم فکر می کنم این بهترین راه حل باشه ولی موضوع اینه که تعداد جداولی که باید این عمل رو روی هر کدوم از اونا انجام بدم زیاده. من این سئوال رو روی وب سایت stack overflow هم پست کردم. بعد از خوندن جوابهای اونا تصمیم نهایی رو می گیرم.

http://stackoverflow.com/questions/14030940/saving-track-of-changes-made-by-users-in-a-multi-user-sql-database