الامر نسبي
اذا كانت القيمة عليها طلب كثير, وحسابها مكلف على ال cpu, وتحديث قيمتها قليل, فأقوم بتخزينها (مثال: المعدل الكلي للطالب الجامعي). غير ذلك اقوم بحسابها -على الطائر-
القصد من هذا السؤال جمع خبرات المبرمجين في مجال قواعد البيانات
من الأسس الذي تقوم عليها قواعد البيانات العلائقية أن الحساب لا يخزن في جداول وإنما يجرى الحساب وقت القراءة
ولكي أوضح للسادة المشاهدين سافترض ان لدينا جدولا به الأعمدة التالية (معرف، اسم السلعة ) وجدولا لعمليات البيع (معرف ، اسم السلعة ، كمية )
الآن إذا سلكنا المذهب الأول وهو الحساب على الطائر وأردنا معرفة كمية السلعة في المستودع سيكون الطلب هكذا
select QuInit-sum(QuVendu)
أما على طريقة تخزين الحسابات في قاعدة البيانات فسوف نجعل update لكمية السلع كلما أجرينا عملية بيع
انا في الغالب اقوم بها "على الطائر" لأنها تكون دائما دقيقة ( اعتقد ! )
و لكن في مثالك حيث يتم ذلك في كثير من المرات و يستهلك الكثير من المعالجة اقوم بتخزينها في قاعدة البيانات ( يعني هذه الاستثناء )
و لكن نادر ما ابرمج و ببالي كمية تكلفة cpu و ما الى ذلك ، انا دائما احاول كتابة كود نضيف و جميل ،
و اذا ما دعت الحاجة الى السرعة او توفير وقت cpu اقوم بالتفكير مرتين في كتابة الكود و أحيانا احسب ال BigO في الخوارزمية ( و لكن هذا يحدث نادرا )
في الغالب احسبها على الطائر
فمثلا اذا كان عندي السعر والكمية لا اقوم بجلب النتيجة الاجماليه من قاعدة البيانات بل اقوم بحسابها برمجياً
لانه اذا ذادت الكمية مثلاً ساضطر الى ضرب (الكمية * السعر) وتغيير النتيجة الاجمالية في قاعدة البيانات مرة اخرى وهذه متعبه الى حد ما
دائماً النتائج المتغيرة احسبها على الطائر ولا اعتمد على قاعدة البيانات في هذه الحاله
التعليقات