ساختار بانک اطلاعاتی

سلام . برای یک اپلیکشن ساده که یک صندوق باشه که از یه سری هم خانه ایی ماهیانه مبلغی رو دریافت کنه و هزینه هایی رو که انجام شده رو ذخیره کنه و میزان باقی مانده ی صندوق رو نشون بده هزینه ها مثلا شامل خرید ها میشه تا اجاره و ماهیانه گزارش بده . برای طراحی دیتابیسش راهنمایی می خوام چه جدول هایی با چه فیلد هایی احتیاج دارم ؟

خیلی ساده‌اش این می‌شه. مبالغ واریزی به صورت مثبت و هزینه‌ها به صورت منفی ثبت می‌شه.
Transactions
user_id:FK , amount:Integer, purpose_id:FK

Users
username:String

Purposes
title:String

1 پسندیده

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

آخرین موجودی رو به همراه زمانش توی رکورد یوزر ثبت کنید و محاسبات رو بعد از اون زمان و بر اساس مقدار ثبت شده شروع کنید.
برای جدا کردن تراکنش‌ها می‌تونید یه فیلد بولین اضافه کنید که نشون بده که هر رکورد واریزی هست یا نه. یا حتی کلا دو جدول جدا درنظر بگیرید. البته جداکردنشون به دوتا جدول معمول نیس مگر اینکه فیلد‌هاشون متفاوت باشن

1 پسندیده

ببخشید من فکر کنم اشتباه متوجه شدم. اون مورد آخرین موجودی اگر درمورد هر کاربره که همونطور که گفتم پیاده می‌تونه بشه. اگر در مورد مانده‌ی «کل صندوقه» در اینصورت می‌تونین آخرین مانده و آخرین زمان رو توی یه جدول دیگه (یا توی یه key-value store) ذخیره کنین.

1 پسندیده

ببینید . بزارید من سیستمی که می خوام رو ساده تر بیان کنم
یه سیستم که یه سری افراد توش هستند
آدم شماره ۱ - آدم شماره ۲ - آدم شماره ۳ - …
ادمین دنک ها رو به سیستم وارد می کنه .
ممکنه در یک حساب یک نفر در یک دنگ نباشه . مثلا ساندویچ خریدن شماره ۲ اونشب نبوده .
یه صندوق وجود داره که هر کس سر ماه یه چیزی واریز می کنه برای خورد و خوراک … یه خرج هایی هم هست کلی انجام میشه . مثلا قراره یک پلی استیشن بخرن . اون وقت بقیه به صندوق n تومن بدهکار میشن.
چه جوری سیستم می تونه ماه به ماه حساب ها رو ببنده و حالا یه سری ها رو بکنه “بدهکار از قبل” n تومن و نشینه برای هر گزارش از اول حساب کتاب کنه . برای هر ماه باید یک جدول درست بکنم ؟ راهکارش رو می خوام بدونم .

یه سوال دیگه وقتی شما بخوایین کارهاتون شمسی باشه - آیا تاریخ شمسی رو در بانک اطلاعاتی ذخیره می کنید یا میلادی رو به شمسی تبدیل می کنید یعنی میلادی در بانک ذخیره بشه اما سیستم تبدیل کنه و شمسی نمایش بده.

امیدوارم درست متوجه شده باشم.
مثل قبلی مقادیر با مثبت و منفی نمایش داده می‌شه.
ارتباط یک به چند مستقیم یوزر با تراکنش‌ها برای مبالغ واریزی استفاده می‌شه. در کنارش می‌شه از این ارتباط برای ثبت کسی که خرید رو وارد کرده استفاده کرد.
دیاگرام ساده‌اش این می‌شه


برای تثبیت گزارش‌ها هم یه جدول به اسم reports درست کن و به کاربر مرتبطش کن و مقادیر و تاریخ رو ثبت کن.
درمورد زمان هم همیشه تاریخ میلادی و زمان بر حسب utc رو ثبت کن. اگه از ریلز استفاده می‌کنی خودش اینکارو انجام می‌ده. موقع نمایش فقط تبدیل به شمسی کن.

1 پسندیده

ممنون

حالا می مونه ۲ تا مشکل

۱- وقتی یه نفر خرید می کنه ُ فرض کن ۵ تا هم خونه ایی هستند . امشب یکی خرید کرده اما دو نفر خونه نبوده اند . پس نبایند دنگ خرید امشب رو بدند .
۲- چی کار کنیم که هر دفعه از اولین سطر جدول تراکنش ها شروع به محاسبه نکنه . خرید های ماه فروردین انجام شده حسابش هم بسته شده . یه سری بدهی ممکنه وجود داشته باشه که ماه بعد منتقل بشه . یعنی چه راهکاری برای بسته شدن حساب ها به صورت ماهیانه پیشنهاد می کنید ؟

۱. هر تراکنش (طبق عکس) می‌تونه چندین کاربر بدهکار داشته باشه (از یک نفر تا همه کاربرها).

۲. همون گزارش‌ها هم به نظرم همینکارو می‌کنه. هر ماه حسابش با تاریخ بسته‌شدنش و مقدار موجودی و این که متعلق به چه کاربریه توی جدول reports ذخیره می‌شه.