السلام عليكم جميعاً
لو كان عندي جدولين
ACCOUNT (account_no,balance,PIN,client_id,blocked)
TRANSACTION(account_no,date,time,type,amount)
لما يسحب من الرصيد لازم يحسب مجموع سحوباته في هذا اليوم بحيث لو كانت وصلت مبلغ معين يمنعه من السحب
Select AMOUNT from TRANSACTION where ((ACCOUNT_NO=something) and (DATE=today) and (TYPE=withdrawal))
بعدين يجمع ناتج هذا الاستعلام ويشيك (إلى الآن ماعندي مشكلة)
ولكن أيضاً قد يطلب الشخص إنه يشوف آخر عشرة عمليات بغض النظر عن نوعها(سحب, إيداع ,تحويل..)
شرح المشكلة:
لما في كل مرة ينفذ فيها الشخص عملية يروح يخزن في جدول TRANSACTION بيكون هذا الجدول كبير وبما إننا مانحتاج إلا آخر 10 فممكن نقول لو كان عدد العمليات الموجودة 10 وأضفنا عملية جديدة احذف أقدم عملية (كيف أسويها؟؟)
لكن بتظهر مشكلة السحب اليومي لأنه ممكن تنحذف سجلات خاصة بسحوبات اليوم وبالتالي لما أحسب مجموع السحوبات في هذا اليوم ممكن يكون بعضها قد انحذف
لحل ذلك فكرنا بإضافة خانتين لجدول ACCOUNT هما :
DAILY_WITHDRAWAL
LAST_DATE_WITHDRAWAL
وبالتالي فإنه كل مرة يسوي فيها سحب من الرصيد فإننا نشيك أولاً:
If (LAST_DATE_WITHDRAWAL= today) then
If (DAILY_WITHDRAWAL+value>something) then
Msg(cannot)
else
DAILY_WITHDRAWAL = DAILY_WITHDRAWAL + value
BALANCE= BALANCE -value
End if
Else
LAST_DATE_WITHDRAWAL=today
DAILY_WITHDRAWAL=value
BALANCE= BALANCE-value
End if
وبعدين بنحدث هذه الخانات
فكرنا نسوي كذا علشان بس نقلل من حجم القاعدة ومايصير فيها أشياء ما نستخدمها
هل هذه الطريقة جيدة؟ هل فيها عيب من عيوب تصميم قواعد البيانات؟ إذا لأ ياليت تساعدوني في كتابة الاستعلامات بطريقة صحيحة .. ونأسف للإطالة
ملاحظة: كل ماكتبته عبارة عن psudu-code وليست أكواد صحيحة