PDA

View Full Version : سوال در مورد طراحی یک سیستم مدیریت مالی



ihnd4s
جمعه 04 تیر 1395, 09:39 صبح
با سلام و خسته نباشید.

یک سوالی در مورد طراحی دیتابیس برام مطرح شده که با سرچ نتونستم جوابی براش پیدا کنم.

من یک کاربر دارم که اطلاعاتش در جدول user هست.
یک گروه هزینه به عنوان شهریه ثابت دارم. جدول 1
یک گروه هزینه به عنوان شهریه متغییر دارم که ممکنه از یک تا n مورد داخلش هزینه تعریف بشه. جدول 2
و یک گروه هزینه به عنوان هزینه های متفرقه و خدمات اضافه دارم که اونم از یک تا n مورد میتونه هزینه داخلش تعریف بشه. جدول 3

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

در صورتی که جدول جدید برای فاکتور بسازم، اگر به فرض، کاربر من بخواد نصف هزینه را پرداخت کنه و مابقی را در ماه بعد پرداخت کنه باز نیاز به جداول جدیدتری دارم؟

راستش در نرمال سازی دیتابیس مشکل دارم. این مسئله هزینه ها، خدمات و جمع کلش روی فاکتور را نمیتونم پیاده سازی کنم.

کسی نظری، پیشنهادی یا منبعی برای من داره؟
با تشکر.

plague
جمعه 04 تیر 1395, 13:50 عصر
البته من از جنبه های کلی نرمافزار خبر ندارم و فقط چیزی که از چیزای یکه اینجا گفتی برداشت کردم
اگه قراره فاکتور به فاکتور ماهیانه پرداخت کنه میشه گفت که نیاز به تیبلی برای ذخیره فاکتور ماهیانه هستش تا هزینه ها و پرداخت ها بهش متصل بشن
اما اگه هروقت داشت هرچقدر بدهکار بود رو پرداخت کنه دیگه زیاد معنی نداره که بخای فاکتور ماهیانه ذخیره کنی چون نقشی در پرداخت نداره
و فقط یه دسته بندی نمایشی هستش که میتونی همون لحظه که طرف خواست هزینه های فلان ماه رو ببینه کوئری بگیری هزینه های ماه رو به عنوان فاکتور اون ماه نشون بدی بهش

کدوم حالت درسته ؟
باید بر اساس فاکتور ماهیانه پرداخت کنه و فاکتور ها رو پاس کنه ؟
یا هرچقد بدهی کلیش بود رو فارق از ماه پرداخت میکنه ؟

ihnd4s
جمعه 04 تیر 1395, 17:13 عصر
ممنون از وقتی که گذاشتید.
بله دقیقن کاربر هر موقع هر قدر که داشت میتونه پرداخت کنه و فاکتور ماهیانه به نظر من هم چیز اضافه ای هست. در واقع من یک پرداخت ماهیانه دارم که حاصل جمع سه جدول بالا هست، حالا کاربر هر بار میتونه این هزینه را کامل و یا کم کم پرداخت کنه. بستگی به خودش داره البته طبیعیه که هرچی پرداخت نکرد باید به هزینه ماه بعد اضافه بشه.

جداولی که برای این کار نیاز دارم چی هست؟

plague
شنبه 05 تیر 1395, 13:19 عصر
1 - یه جدول نیاز داری که جمع بدهی و پرداخت های کاربر رو نگاه داره
میتونی از همون تیبل یوزر استفاده کنی برای اینکار مثلا یه فیلد اضافه میکنی به اسم debt یه فیلد هم به اسم payments

2 - یه جدول نیاز داری که پرداخت های کاربر رو توش ثبت کنی مثلا user_payments : (id , user_id , amount , date )

هر هزینه ای که برای کاربر ثبت شد توی اون تیبل های 3 گانه مبلغش رو به فیلد debt تیبل یوزر اضافه کن
هر پرداختی هم که ثبت شد توی تیبل user_payments مبلغش رو به فیلد payments تیبل یوزر اضافه کن

اینجوری حساب راحت دستتون هس که کاربر چقد بدهکاره و چقدر بستانکار
من تریگر رو ترجیح میدم برای این کار به جای کوئری نویسی با php ... مثلا برای افزایش مقدار فیلد payments در تیبل users با ثبت هر پرداخت در تیبل user_payments




DELIMITER $$
CREATE TRIGGER new_payment
AFTER INSERT
ON user_payments
FOR EACH ROW
BEGIN
UPDATE users SET payments = payments + NEW.amount WHERE id = NEW.user_id ;

END $$
DELIMITER ;