PDA

View Full Version : مشکل در نگهداری تغییرات کاربر در بانک



mom alone
پنج شنبه 29 اسفند 1387, 08:04 صبح
با سلام من می خاستم تغییراتی که کاربران بر روی داده ها می دن رو نگه داری کنم با پیشنهاد یه نفر این کارو کردم
که برای هر رکورد یک ستون فلگ گذاشتم اما با مشکل پریماری کی بر خوردم
چون اگه کاربر 2 بار داده رو تغییر بده دو رکورد یک سان به وجود می آیند با فلگ یکسان
من می خوام کلیدم یه ستون به نام kodmember باشه اما و قتی تغییرات ایجاد می شه یه ردیف دیگه ایجاد می کنم با همان کد و فلک یک (به خاطر همین کلید رو دو ستون kodmember و flag گذاشتم اما در تغییرات بعدی باز به مشکل بر می خورم
مثال نام کد فلگ
علی 1 0 ثبت رکورد جدید
محسن 2 0 ثبت رکورد جدید
علی 1 1 تغییر رکورد اول برای با اول
علی 1 1 تغییر رکورد اول برای بار دوم


تو رو خدا کمک کنید

seven7777777
پنج شنبه 29 اسفند 1387, 09:45 صبح
دوست عزیز سلام

لطفا منظورتون رو واضح تر بگین . گذاشتن یک flag برای هر رکورد چه خاصیتی داره ؟
اگه قرار نیست بفهمید چه ستونی تغییر کرده خوب همون رکورد قبلی رو Update کن و نیازی نیست یه رکورد جدید درست کنی !!!
اصلا این تغییر رو برای چی نگهداری می کنی ؟
=========================
{{{ اما در مجموع هر چی رو بخوای اینجوری نگهداری کنی مشکلت با فیلد datetime حل میشه چون هیچ تاریخ و زمان شبیهی نداریم }}}
=========================
سوال و نیازتو کامل بگو تا بچه ها کمکت کنند .
موفق باشی

mom alone
پنج شنبه 29 اسفند 1387, 13:13 عصر
من یه برنامه نوشتم که تعدادی کاربر بر روی یک سری جدول می تونن تغییرات ایجاد کنن
اما می خاستم admin بتونه تمام تغیرات رو مشاهده کنه و در صورت نیاز اون تغییر رو برگردونه به حالت اول

Mohammad.Saheb
پنج شنبه 29 اسفند 1387, 22:55 عصر
براي كار سر داستي
بيا و يه فيلد Date هم به جدول اضافه كن و كليدت رو سه فيلده كن
اگه كار حرفه اي ميخواي هم برو يه جدول ديگه بنام مثلا LogTbale درس كن و با تريگر بيا دستورات DDL بانكت رو تو اون جدول ثبت كن

seven7777777
پنج شنبه 29 اسفند 1387, 22:59 عصر
دوست خوبم چیزی که شما می خوای چند مورد رو در بر می گیره :
1. در تمام جداول قراره یک فیلد flag باشه ؟
2. اگر فقط یک فیلد flag داریم ، مدیر از کجا می فهمه چه تغییری رخ داده ؟
3. فیلد flag فقط میگه تغییر رخ داده ولی تعداد اونو نمی تونه مشخص کنه ؟
4. با وجود یه فیلد flag مقدار قبلی رو از گجا میاره که تغییراتو برگردونه ؟
5 . و ...
به هر حال از شواهد پیداست شما نیاز به یک فایل log دارید . به نظر من بهتره که یه جدول با 5 ستون تشکیل بدی ( البته نظر شخصیه ) که یک فیلد مربوط به کد کاربر ، یک فیلد مربوط به جدولی که تغییر کرده ، یک فیلد مربوط به فیلدی که تغییر کرده ، یک فیلد برای مقدار قبلی فیلد تغییر کرده و یکی هم برای تاریخ و زمان تغییر .
اینجوری یک فایل log حسابی داری .
در ضمن غصه سرعت و فضا رو هم نخور مثل بنز کار می کنه .

shahab_ss
جمعه 30 اسفند 1387, 08:16 صبح
روشی که من پیشنهاد میکنم :

به ازاء هر جدول یک جدول با همان مشخصات قبلی داشته باشید + کد کاربر،تاریخ انجام عملیات،و نوع عمل انجام شده.
توضیح : در جدول ،Log کد کاربر + تاریخ را بعنوان کلید در نظر بگیرید.

به این ترتیب که قبل از انجام هرگونه عمل روی هر سطر از هر جدول ، شما دقیقاً همان سطر را در جدول مشابه درج میکنید و به همراه آن کد کاربر ، تاریخ فعلی و نوع عمل انجام شده را ثبت میکنید.



به نظر من بهتره که یه جدول با 5 ستون تشکیل بدی ( البته نظر شخصیه ) که یک فیلد مربوط به کد کاربر ، یک فیلد مربوط به جدولی که تغییر کرده ، یک فیلد مربوط به فیلدی که تغییر کرده ، یک فیلد برای مقدار قبلی فیلد تغییر کرده و یکی هم برای تاریخ و زمان تغییر .درصورتی که یک رکورد بطور کامل حذف بشه این روش کمی مشکل پیدا میکنه.

seven7777777
جمعه 30 اسفند 1387, 09:27 صبح
من هم با نظر دوستمون موافقم اما اگه بتونی یه جوری جدول log رو سازماندهی کنی که یک جدول باشه فکر کنم بهتر و حرفه ای تر باشه .
مثلا یک جدول دیگه بسازی و تغییراتی که کاربر می تونه انجام بده رو اونجا بذاری و بعد در جدول log خودت کد مربوط به نوع تغییر رو قرار بدی !!!
{{{ البته هر چی فکر می کنم روش shahab_ss راحت تر و بهتره :لبخند:}}}