قاعدة أخرى من قواعد السيد Codd وتنص على أنه يمنع وضع أي عمليات حسابية في الجداول.
مرة أخرى --- لا يمكن مثلا في الجداول أن تضع تاريخ ميلاد الإبن ثم تضيف حقلا للعمر تقوم من خلال البرمجة بطرح تاريخ الولادة من التاريخ الحالي وثم التحويل للحصول على عمر الطفل.
عندما يقول Codd ممنوع فهو يقصد أنك تستطيع عمل هذا ولكنك لن تحصل على قاعدة بيانات متكاملة ومتماسكة.
كافة العمليات الحسابية تتم في الإستعلامات...
في الإستعلام السابق الذي وقفنا عنده نريد إجمالي المدفوع من كل أب مقابل مشتريات إبنه
تعالو نرى كيف يتم هذا...
إستعلام جديد أضف الجداول كلها ثم إنقر نقرا مزدوجا على الحقول التالية بالترتيب:
من جدول الآباء:
FatherNum
FatherName
من حدول الأبناء:
SonNum
SonName
نفذ هذا اٌستعلام --- ما هي النتيجة؟ من يقول لي ماذا تعني هذه النتيجة؟؟؟
إرجع إلى التصميم بعد التفكير في السؤال السابق ومحاولة الحل وتعال نحسب تكلفة الشرأء.
لحساب كل ركز (كل) عملية شراء نضرب ItemCost في الكمية المشتراه Qty
في (عرض التصميم) للإستعلامات ستلاحظ أن السطر الأول هو Field أي الحقل ونحن ليس لدينا حقل نحن لدينا عملية حسابية
في عمود فارغ اكتب:
Qty*ItemsCost
لاحظ كيف يعدل الأكسس ...
نفذ الإستعلام،،، ماذا تعني نتيجة هذا الإستعلام؟؟؟ لن يجيب على هذه الأسئلة إلا الذين لديهم كل ما عملناه على ورق !!!
من قائمة (عرض) View إختر مجاميع Totals
ماذا تلاحظ ؟ نعم أتت خدمة جديدة (سطر جديد) عنوانه (إجمالي) وتحت كل حقل ظهرت جملة (تجميع حسب) Group By --- والمجاميع هي خاصية من أوامر لغة SQL وليس آكسس.
جملة Group By تحت FtherName تعني قم (ما اسطتعت) بتجميع الأباء المتشابهين أي لا تظهر الأب أكثر من مرة.
ولكن هناك Group BY او (تجميع حسب) تحت أسم الأب ورقم الإبن وإسم الإبن. وكذلك الحقل الحسابي..
بالمناسبة العملية الحسابية هي حقل ويسمى Calcualted Field أو الحقل الحسابي ومن هذا المنطلق لا نستخدم العمليات الحسابية في الجداول بل في الإستعلامات.
أيدك الآن --- حتى تفهم المنطق من وراء العملية كلها أن ترسم في الدفتر جدولا فيه الحقول الخمسة المشار إليها في الإستعلام السابق أي تكتب فعلا النتيجة النهائية التي نبحث عنها من هذا الشرح.
مرة أخرى...
نريد رقم الأب، إسم الأب، رقم الطفل، إسم الطفل، إجمالي تكلفة مشترياته...
أعلم أن العملية صعبة شرحا بالكتابة،
لنحاول وأنا تحت ضغط الوقت... حيث ما زال هناك الكثير لنتحدث عنه.
لنكمل الإستعلام ثم نعود مرة أخرى ونحاول الشرح بشكل أكثر تفصيلاً لأهمية هذا الدرس
إذا حاولت أن تقوم بالعملية (يدويا) فستلاحظ أنك ستضطر إلى إجراء عمليات حسابية جانبية لبعض الآباء --- لماذا؟ لأن (مثال) الطفل رقم 110 ملقوف قام بإجراء أكثر من عملية شراء لأصناف مختلفة --- صح؟
السؤال (ركــــــــــــــــــــــــــــز) إذا ضربنا الكمية في سعر الصنف نحصل على ... ماذا؟
الطفل 110 أجرى 5 عمليات شراء --- عند ضرب الكمية في سعر الصنف نحصل على ماذا؟ نعم......... نحصل على 5 إجماليات نوضح أكثر
الطفل الملقوف 110
قام بشراء 3 محايات بسعر المحاية 2 درهم الإجمالي 6 دراهم
قام بشراء 2 مسطرة بسعر المسطرة 4 دراهم الإجمالي 8 دراهم
قام بشراء 7 أقلام رصاص بسعر القلم 1 درهم الإجمالي 7 دراهم
قام بشراء 5 سبورات --- كمل للوصول للإجمالي
قام بشراء 9 دفاتر --- كمل للوصول للإجمالي
ولكن لحظة ............... توقف ---- ليس هذا هو المطلوب .....
المطلوب هو ما دفعه الأب ... أي اب الطفل 110 !!! ما هو؟ طبعا ليس عمليات الشراء الخمس بل هو ناتج مجموع العمليات الخمس كلها هو ما دفعه الأب لقاء مشتريات إبنه 110
أي هي ناتج جمع 6 و 8 و 7 و ... و...
لأن الحقل الحسابي الذي صنعناه هو عملية حسابية أريدك أن تختار من القائمة وتستبدل (تجميع حسب) ب Expression أي ناتج عملية حسابية.
إذا قمت بتنفيذ الإستعلام الآن ستحصل على خطأ لأن الآكسس وال MS SQL لن يستطيعوا عمل (تجميع) Group By للعمليات بدون إستخدام قانون آخر للسيد Codd وهو
Aggregate Functions اي دوال التجميع او دوال الاحصاء