الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اختلاف الخبراء حيرني أرجو منكم المشاركة (هل نخزن الحسابات في الجدول)

بدأه أحمد أبو عبد البر في 30 أبريل 2012 · 7 رد · 874 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أنا أعمل على مشروع لإدارة المخازن

وأنا أبحث في النت وجدت رايين في البيانات المدخلة في الجداول

الرأي الأول يقول أصحابه إنه لا ينبغي أن تجرى الحسابات المالية إلا في الاستعلام select

الرأي الثاني يقول أصحابه لا بأس بإدخال الحسابات في الجداول بمعنى أنهم يجعلون أعمدة وحقولا خاصة بالحسابات

فما رايكم

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#2

السلام عليكم ...

  1. إن كنت تقصد بالحسابات المالية أي الــ الحقول المحسوربة calculated fields .. فإنه كما ذكرت يوجد العديد من الأسئلة و الآراء عن الموضوع و كلها تندرج تحت عنوان مقارنة الــ Calculating fields on the fly vs storing calculated data :
    1. MySQL -Calculating fields on the fly vs storing calculateddata
    2. How to store calculated fields ?
    3. Calculated Fields, To Store Or Not To Store?, Office 2010
    4. DB Best Practice: Store Calculated field or calculate on the fly?
    5. طبعا تخزين الحقول المحسوبة يؤدي لـ :
      1. ضياع في مساحة التخزين لتخزين بيانات فائضة redundancy .
      2. التعديل المستمر للحقول المحسوبة عندما يتغير أحد الحقول التي يستخدمها الحقل المحسوب , مثلا حقل إجمالي قيمة فاتورة هو مجموع قيم الأسعار في جدول invoice_items و كلما تغير سعر أحدها يجب تعديل حقل الــ total في جدول الفاتورة أي يتطلب الوصول لجدولين مختلفين .

[*]حساب الحقول المحسوبة : يؤدي إلى بطئ في الأداء , bad performance .. لأنه يقوم بعمليات حسابية عند الاستعلام و خصوصا لو كانت من جداول مختلفة .[*]نأتي للمفيد .. و القرار حسب إجابات الأسئلة التالية :

  1. هل لديك مساحة تخزين كبيرة (معظم الــ Hard disk الحالية ذات مساحات كبيرة أما على الويب ربما تكون محدودة ) .
  2. هل يستخدم النظام كثير من الزبائن و بالتالي إجراء الحسابات سيصبح مكلفا ..
  3. هل البيانات الداخلة في الحساب هي من نفس السجل (غالبا لا داعي للتخزين) أم أنها من جداول أخرى (التخزين غالبا أفضل)..
  4. هل حجم البيانات كبير , مثلا لو فرضنا أن النظام يقوم بألف عملية حساب (للحقل) في الثانية و لدينا مليون سجل, هذا يعني أننا سننتظر أكثر ألف ثانية حتى تنتهي العملية (صح؟؟) .
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

سيدي بكل بساطة ...

الأصل أن يتم بناء الجداول بدون حفظ النتائج المحسوبة فيها ... (Normalization) هو حفظ البيانات الأساسية مثل القيمة الأصلية وقيمة تاريخ بدء الاحتساب ونسبة الاستهلاك الشهرية مثلا ... وهي الشيء الصحيح مئة بالمئة ... بحيث يتم احتساب القيمة الدفترية بناءا على معادلة :

select value - (dateDiff("Month",startDate, GetDate)* PRCNT)  Book_Value from Depreciations where ....

ولكن لكل قاعدة شواذ فإذا كان حجم البيانات كبير جدا والتقارير أو الاستفسارات على موضوع معين متكررة ... فإن عملية إعادة احتساب قيمة معينة كالقيمة الدفترية للموجودات (الاصول) تصبح مضيعة للوقت فهي تحدث مرة في الشهر ويتم الاستفسار عنها مئات المرات ... عندها يكون من الأفضل حفظ نتائج الاحتساب في الجداول ... (Denormalization)

فإن وقت استخراج المعلومة أحيانا يطغى على المثالية في طريقة حفظ البيانات وقد يكون على حساب المساحة التخزينية المستهلكة (في حدود المعقول ) ... لدرجة أن هناك من يضطر لوضع رصيد الحساب الكلي لحساب معين على مجموعة الأستاذ اليومي مثلا ويجعل عملية التحديث ابطأ من أجل خدمة سرعة عملية الاسترجاع وبناء التقارير ...

ويمكن تلخيص الموضوع أنه إذا كانت سرعة أو كثرة تكرار عملية استرجاع البيانات Query لمعلومة معينة أهم من سرعة تحديثها .. فإنه "يجب" أن توضع النتائج المحسوبة كحقول في الجداول، بشرط أن لا تصبح عملية تحديثها عبئا لا يطاق لقاعدة البيانات.

وهذا يقررة محلل النظم عادة.

1

سنوسي حواري

عمان - الأردن

المدونة

بريد الكتروني: sanousy.howari@gmail.com

سكايب: Sanousy.howari

فيسبوك : facebook

تويتر: Twitter

#4
اقتباس

نأتي للمفيد .. و القرار حسب إجابات الأسئلة التالية :

هل لديك مساحة تخزين كبيرة (معظم الــ Hard disk الحالية ذات مساحات كبيرة أما على الويب ربما تكون محدودة ) .

هل يستخدم النظام كثير من الزبائن و بالتالي إجراء الحسابات سيصبح مكلفا ..

هل البيانات الداخلة في الحساب هي من نفس السجل (غالبا لا داعي للتخزين) أم أنها من جداول أخرى (التخزين غالبا أفضل)..

هل حجم البيانات كبير , مثلا لو فرضنا أن النظام يقوم بألف عملية حساب (للحقل) في الثانية و لدينا مليون سجل, هذا يعني أننا سننتظر أكثر ألف ثانية حتى تنتهي العملية (صح؟؟) .

شكرا لك

أفهم من كلامك أن التخزين أفضل في حالة إدارة المخازن

لأن الحساب سياخذ أطرافه من عدة جداول مثلا جدول الزبائن وجدول السلع

وأيضا في حالة الحقول الكبيرة العدد بالآلاف مثلا سيكون الاستعلام بطيئا

تم تعديل هذه المشاركة بواسطة linuxman في 1 مايو 2012 في 01:14

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#5
اقتباس

ويمكن تلخيص الموضوع أنه إذا كانت سرعة أو كثرة تكرار عملية استرجاع البيانات Query لمعلومة معينة أهم من سرعة تحديثها .. فإنه "يجب" أن توضع النتائج المحسوبة كحقول في الجداول، بشرط أن لا تصبح عملية تحديثها عبئا لا يطاق لقاعدة البيانات.

شكرا لك لقد أوضحت وبينت

فالحاصل من كلامكم أيها السادة

أنه إذا كان الاستعلام أكثر من إدخال البيانات فيحسن تخزين الحسابات

وإن كان التحديث وإدخال البيانات أكثر من الاستعلام فلا يحسن التخزين

تم تعديل هذه المشاركة بواسطة linuxman في 1 مايو 2012 في 09:28

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#6

دائما يقولون ... لا تبحث عن تحسين الأداء إلا عندما تجد مشاكل في الأداء ...

فالطبيعى قم بعمل قاعدة بيانات Normalized ( لا تقم بتخزين بيانات محسوبه)... فإن وجدت مشاكل في الأداء .. إبدأ بالنظر في هذه النقطه ...

#7
__Unknown كتب:

دائما يقولون ... لا تبحث عن تحسين الأداء إلا عندما تجد مشاكل في الأداء ...

فالطبيعى قم بعمل قاعدة بيانات Normalized ( لا تقم بتخزين بيانات محسوبه)... فإن وجدت مشاكل في الأداء .. إبدأ بالنظر في هذه النقطه ...

بيانك رائع يا سيدي .. فعلا لخصت كل ما قلته أنا بسطرين رائعين ... هو ذا!!

1

سنوسي حواري

عمان - الأردن

المدونة

بريد الكتروني: sanousy.howari@gmail.com

سكايب: Sanousy.howari

فيسبوك : facebook

تويتر: Twitter

#8

جزاكم الله خيرا (السنوسي والمجهول وحسام)

فعلا لقد وضحتم المسألة وأنا ساخذ بنصيحتكم أي سأقوم ببناء القاعدة على أساس الطبيعي وهو في الحقيقة ما تعلمته في السكيول

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…