PDA

View Full Version : سوال: نحوه محاسبه در پشت پرده



hosseinbarnamenevis
دوشنبه 08 بهمن 1397, 19:25 عصر
سلام
ما جدولی داریم مانند جداول جسابداری که شامل ستون های زیر است

به عنوان مثال
ردیف، نام شخص، مبلغ بدهکار، مبلغ بستانکار، مبلغ باقیمانده

داده نمونه جدولمون
1- سید، 1000 / 0 / 1000
2 - سید، 1000 / 0 / 2000
3- سید، 5000 / 0 / 7000
4- سید، 0 / 3000 / 4000

حالا اگه ردیف 2 حذف بشه باید باقیمانده هم تغییر کنه

1- سید، 1000 / 0 / 1000
3- سید، 5000 / 0 / 6000
4- سید، 0 / 3000 / 3000

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

رامین مرادی
سه شنبه 09 بهمن 1397, 08:13 صبح
باقیمانده رو یه ستون در جدول در نظر نگیرید. این فیلد عملیاتی هست و شما بر اساس داده های موجودتون در هر لحظه محاسبه ش کنید. و درحالت نمایش نتیجه رو نشون بدید.

ژیار رحیمی
سه شنبه 09 بهمن 1397, 19:55 عصر
سلام باقیمانده یه مقدار محاسباتی هست نمیشه در دیتابیس ذخیره کرد.الان که ذخیره کردی مشکل پیش آماده .وقتی سندی حذف یا وریرایش بشود کل باقیمانده های ذخیره شده باید اصلاح شود که در کل این پیاده سازی اصلا مناسب نیست.

hosseinbarnamenevis
جمعه 12 بهمن 1397, 23:36 عصر
شما فکر کنید حجم زیادی ردیف داشته باشیم. مشکل ساز نمیشه؟ سرعت اجرا کم نمیشه؟

رامین مرادی
شنبه 13 بهمن 1397, 08:43 صبح
شما فکر کنید حجم زیادی ردیف داشته باشیم. مشکل ساز نمیشه؟ سرعت اجرا کم نمیشه؟


اونقدری محسوس نیست که مشکل ساز بشه.مخصوصا نوع داده هاتون رو هم اگه درست انتخاب کنید خود اس کیو ال میتونه محاسبه هم کنه نیاز نیست سمت برنامه انجام بدید.
تو روش خودتون باید برفرض مثال هزارتا رکورد وجود داشت و ردیف اولتون تغییر میکرد باید 999 رکورد دیگتون رو ویرایش میکردید .:متفکر:
حالا خودتون فکر کنید ببینید کدوم روش صلاح کارتونه.

farhad_shiri_ex
شنبه 13 بهمن 1397, 11:07 صبح
سلام
ما جدولی داریم مانند جداول جسابداری که شامل ستون های زیر است

به عنوان مثال
ردیف، نام شخص، مبلغ بدهکار، مبلغ بستانکار، مبلغ باقیمانده

داده نمونه جدولمون
1- سید، 1000 / 0 / 1000
2 - سید، 1000 / 0 / 2000
3- سید، 5000 / 0 / 7000
4- سید، 0 / 3000 / 4000

حالا اگه ردیف 2 حذف بشه باید باقیمانده هم تغییر کنه

1- سید، 1000 / 0 / 1000
3- سید، 5000 / 0 / 6000
4- سید، 0 / 3000 / 3000

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

به هرحال در این روش که شما یک فیلد محسباتی را در یک جدول ذخیره کرده باشید، هم یکسری منافع خواهد داشت و اینکه حتما باید این فیلد را از جدول خارج کنید! تا کارائی بهتری نصیبتان شود نمی تواند کاملا درست باشه! بنابراین هم چالش هایی را دربر خواهد داشت وهم منافعی کاملا بستگی به نحوه برنامه نویسی و نوع نرم افزار شما وخیلی عوامل دیگه بستگی داره.
ولی اگر هم نخواهید این فیلد مانده را از جدول تون خارج کنید، وبعد از هر بار تغییر رکوردهای وابسته را هم به روز کنید!
در صورتی که نرمال سازی پایگاه داده را حداقل تا 2 لایه ویا بیشتر به خوبی انجام داده باشید و اعمال قوانین یکپارچگی داده ها را در فیلد های مورد نظر و در جداول مورد نظر اعمال کرده باشید به راحتی خود SQLServer این عملیات به روز رسانی را براتون انجام میده وشما نگران نوشتن محاسبات مجدد در سمت محیط کد نویسی نخواهید بود.
البته حتما سعی کنید که این قوانین را بادقت اعمال کنید و حتما از مجموع عواملی که در بازدهی SQLServer دخالت دارند هم نهایت استفاده را ببرید مثل ایندکس های کلاستری و فایل استریم ها و پارتیشن بندی و ....
درباره سرعت هم به راحتی می توانید از ابزارهای Profiler استفاده کنید تا هم estimate plan وهم actual plan ها را نسبت به عملیاتهای I/O در SQLServer پیش بینی کنید تا بتونید قوانین و یا حتی کوئری ها و خیلی اعمال مرتبط با جداول را پایه ریزی کنید تا بهترین نتیجه را دریافت کنید!
البته از مجموع تریگرها و CDC ها به همراه SQL Server Integration Service ها هم برای این اهداف استفاده کنید. البته پیچیدگی هم بسیار زیاد خواهد شد و البته در صورت استفاده نادرست بازدهی هم مطمنا پایین خواهد بود

Mahmoud Zaad
شنبه 13 بهمن 1397, 12:58 عصر
با سلام
استفاده نکردن از فیلد محاسباتی فقط کدنویسی های بی فایده و غیر ضروری را افزایش میده و روش مطمئنی هم نیست. اولا به قول جناب مرادی فرض کنید 1000 ردیف داشته باشیم شما باید یکسری محاسبات انجام دهید تا مبلغ مانده در هر سطر بدست بیاید بعد دوباره رکوردها رو آپدیت کنید. یعنی در هر صورت محاسبات تعیین مانده در هر سطر باید انجام شود. در روش شما فقط یک کار اضافه (یعنی آپدیت هر رکورد) هم باید انجام شود. یک اشتباه کوچک ممکن است حسابهای کاربران و مشتریان آنها را خراب کند که شما را به دردسر می اندازد.

ضمنا روشهایی برای نمایش رکوردها وجود دارد مثلاً صفحه بندی اطلاعات در گرید که سرعت نمایش را بالا می برد.

hosseinbarnamenevis
یک شنبه 14 بهمن 1397, 20:59 عصر
ممنون از دوستان بابت راهنمایی
مثالی ندارین برای بروزرسانی در صورتی که ما فیلد محاسباتی رو داشته باشیم و نخوام پاک کنم؟