لاحظت الكثير من الأخوة مبرمجين قواعد البيانات بذات المبتدئين في هذا المجال الكثير من الملاحظات التي يجب أن يعاد فيها النظر :
أولا تصميم قاعدة البيانات :
الكثير من الأخوة والأخوات عند ما يبدءون بتصميم قاعدة البيانات هناك العديد من الأخطاء التي ترتكب عند تصميم الجداول :
في إحدى مشاريع للطالبات لاحظت عند تصميم الجداول وهوا مشروع مكتبة لاحظت ما يلي :
تم إنشاء الجداول على النحو التالي :
جدول الطلاب ومنه :
رقم الطالب – اسم الطالب – الكلية – ..............................
في جدول الكليات .
رقم الكلية – اسم الكلية .
في جدول الاستعارات
رقم الطالب - اسم الطالب - اسم الكتاب – تاريخ الاستعارة - .........................
أنبه هنا للأخوة والأخوات الذين يستخدمون هذا الأسلوب في بناء الجداول أن هذا الأسلوب غير صحيح ويكمن الخطأ في جدول الاستعارات , الخطأ هوا تكرار اسم الطالب في جدول الاستعارات رغم أن اسم الطالب هوا موجود في جدول الطلاب , في تصميم قواعد البيانات يعتبر هذا الخطأ فادح على الرغم من أن العمل سيكون هنا ناجح , إذا لماذا الخطأ .
أولا في جدول الطلاب لنفترض أني قد حجزت اسم الطالب بطول 50 بايت من نوع نص .
في جدول الاستعارات سوف اكرر نفس اسم الحقل وكذلك طوله , وبذلك قد حجزت مساحة لكل حقل وهي 50 بايت وبالتالي فأن كان هذا الجدول كثير الحركة سيتكرر لدي كم هائل من البيانات والمساحات الغير لازمة مما يسبب بطئ في عملية البحث والتعامل مع الجدول هذا بالإضافة إلى أنه سيكون هناك زيادة في حجم قاعدة البيانات نتيجة للتكرار لنأخذ مثال على ذلك :
قام احد الطلاب مثلا ولنفترض انه محمد الحاصل هذا الطالب سوف يقوم عن طريقي البرنامج بتوثيق الاستعارة الخاصة به في جدول الاستعارات على النحو التالي :
في جدول الطلاب :
رقم الطالب اسم الطالب -----------
1 محمد الحاصل
2 محمد الحاج
3 نسرين
في جدول الاستعارة والذي سيكون فية العمل دائما :
رقم الطالب اسم الطالب اسم الكتاب -----
1 محمد الحاصل شبكات الحاسوب
3 نسرين ذكاء اصطناعي
1 محمد الحاصل أوراكل
2 محمد الحاج أوراكل دفلوبر
1 محمد الحاصل فيجول بيسك
2 محمد الحاج شبكات
نلاحظ في جدول الاستعارة تكرار اسم الطلاب ( محمد الحاصل – محمد الحاج ) . كيف يمكن حل هذه المشكلة
طالما أني مسجل أسماء الطلاب في جدول الطلاب إذا لا داعي منطقيا أن أكرر اسم الطالب في جدول الاستعارة لذلك سوق أقوم على هذا الأساس بتعديل جدول الاستعارة على النحو التالي :
رقم الطالب اسم الكتاب -----
1 شبكات الحاسوب
3 ذكاء اصطناعي
1 أوراكل
2 أوراكل دفلوبر
1 فيجول بيسك
2 شبكات
من خلال الجدول المعدل كيف اعرف أسماء الكتب الذي قام محمد الحاصل باستعارتها
بكل بساطة برقم الطالب كيف :
لاحظ أن رقم الطالب محمد الحاصل هوا رقم 1 لذلك بمجرد النضر لجدول الاستعارات ابحث عن رقم 1 وشوف ايش من كتاب أخذ : ليكون الناتج لدينا :
رقم الطالب اسم الكتاب ------
1 شبكات الحاسوب
1 أوراكل
1 فيجول بيسك
طبعا لا يمكن لأي طالب أن يكون رقمه 1 في جدول الطلاب غير محمد الحاصل لذلك بالتأكيد علينا أن نجعل رقم الطالب مفتاح أساسي.
بنفس المبدأ أيضا لازال هناك خطأ في الجدول ( حاول التعرف على هذا الجدول ونوع الخطأ دون أن تواصل القراءة )
الخطأ في جدول الاستعارة أيضا وهذا الخطأ مقارب للخطأ السابق وهوا أن اسم الكتاب في جدول الاستعارة بيتكرر مرة تلو الأخرى لاحظ :
رقم الطالب اسم الكتاب -----
1 شبكات الحاسوب
3 ذكاء اصطناعي
1 أوراكل
2 أوراكل دفلوبر
1 فيجول بيسك
2 شبكات الحاسوب
حيث التكرار متمثل ( أوراكل – شبكات ) إذا ما هوا الحل : يتمثل الحل بأن نتعامل مع الكتب برقم الكتاب كما هوا حاصل في حالة الطلاب في جدول الاستعارة حيث نتعامل مع الطالب برقمه بس كان هناك جدول خاص بالطلاب إذا لابد من أن يكون هناك جدول للكتب على النحو التالي :
رقم الكتاب – اسم الكتاب – المؤلف – دار النشر – نوع الكتاب – ترميز الكتاب – حالة الاستعارة -............
طبعا رقم الكتاب مفتاح أساسي (لن أتحدث عن أساسيات قواعد البيانات على الأقل حاليا وسوف أفترض أن الأغلب لدية هذه الأساسيات ) .
سوف أضع بيانات الكتب على النحو التالي :
رقم الكتاب – اسم الكتاب – المؤلف – دار النشر – نوع الكتاب – ترميز الكتاب – حالة الاستعارة -......
1 شبكات سامي شعاع كمبيوتر 12/12 نعم
2 ذكاء اصطناعي سامي شعاع كمبيوتر 13/12 نعم
3 أوراكل سامي شعاع كمبيوتر 14/12 نعم
4 أوراكل دفلوبر سامي شعاع كمبيوتر 15/12 نعم
5 فيجول بيسك سامي شعاع كمبيوتر 16/ 12 نعم
وهكذا . بعد إنشاء الجدول يجب أن نقوم بتعديل جدول الاستعارات على النحو التالي
رقم الطالب - رقم الكتاب - تاريخ الاستعارة – ......................
1 1 ---
3 2 ---
1 3
2 4
1 5
2 1
وبما أن رقم الكتاب والطالب مفتاح أجنبي في جدول الاستعارة إذا لا يوجد مشكلة في تكرار الرقم . قد يقول قائل طيب إيش الفائدة طالما أن هناك تكرار في أرقام كل من الطلاب والكتب في جدول الاستعارة
للإجابة على هذا السؤال :
أولا رقم الطالب أو الكتاب طول البيانات له أقل من طول بيانات اسم الطالب واسم الكتاب, وبالتالي نكون قد تخلصنا من كم كبير من حجز المساحات للحقول.
ثانيا في عملية البحث : البحث عن طريق الحقول المرقمة أسرع بآلاف المرات من الحقول النصية .
ثالثا وهوا الأهم أنه يمكن الوصول إلى أي حقل من حقول أي جدول عن طريق حقل المفتاح الأساسي .
رابعا سهولة التحديث والتعديل والحذف.
خامسا سهولة التعديل وتطوير الجدول من إضافة حقل أو مسحة أو...... الخ .
كان هذا مثال مبسط لما رأيت من أخطأ والمثال السابق فقط مجرد مثال يمكنك القياس علية على حالات أخرى وأهم ما أقصده في هذا الموضوع هوا الفكرة وليس المثال.
الشيء الثاني بناء العلاقات :
بعد عمل ألازم من إنشاء الجداول....الخ تبقي العلاقات بين الجداول وهذا موضوع جدا مهم لذوي مجال البرمجة:
أولا لابد لنا جميعا أن نعرف أساسيات قواعد البيانات ولماذا العلاقات بالذات بين الجداول . وكما أشرت سابقا أني لست بصدد ألأساسيات, وإنما لحل المشاكل التي يقع بها بانوا قواعد البيانان.
أنا حاليا لا أعتمد على العلاقات عن طريق برنامج قاعدة ألبيانات في إدارتها يعني كيف:
لنأخذ قاعدة بيانات ولنفترض أنها أكسس .
أن كنت تصمم برنامج بالأكسس فواصل عملك أما إن كنت تستخدم برنامج أخر مثل فيجول vb.Net أو vb.6 الإصدار السابق أو غيرة من اللغات البرمجية الأخر ركز معي في هذه النقاط المهمة.
لاتدع برنامج قواعد البيانات هوا الذي يدير قاعدة البيانات معني الكلام :
في حال قمت بوضع تاريخ التسجيل مثلاً وحجزت له نوع بيانات تاريخ في قاعدة البيانات .
أو قمت بإضافة رقم التلفون والحقل طبعا رقمي .
أو الأهم انك قمت بإدخال رقم طالب في جدول يمثل الحقل مفتاح أجنبي لا يوجد لهذا الرقم أصل في جدول الطلاب يعني انه غير موجود .
في الحالة الأخيرة من أين ستظهر رسالة الخطأ التي تخبرك بأن هذا الرقم ليس له مرجع . بالتأكيد من قاعدة البيانات لماذا بسبب وجود العلاقة بين جدول الطلاب مثلا وجدول الحسابات .
وهنا أنوه انه يمكنك أن تضع هذا الاحتمال في ذهنك وتحاول معالجة في أللغة البرمجية مثلا في فيجول بيسك
كيف .
لا تدع المستخدم له الحرية في وضع الاحتمالات يعني أن يضع بيانات غير موجودة . بأسلوبك الخاص إما ن تظهر له أسماء الطلاب مثلا عند تسجيل استعارة لطالب أظهر للمستخدم Combo تحتوي على كود الإكمال التلقائي فيها أسماء الطلاب ثم عند الحفظ أحفظ في جدول الاستعارة بالرقم الذي يشير إلية هذا الاسم وهوا رقم الطالب .
أقصد من هذا أنه طالما أني أستطيع أن أتحكم بقاعدة البيانات إذا لا داعي أن أدعها هي تقوم بالتحقق حتى أسهل عملية الاتصال والتعامل مع قاعدة البيانات بسرعة عالية هذا يفيد في حال كانت القاعدة تعمل على شبكة أو عليها ضغط . فلماذا لا أدع التحقق على فقط .
حقل التاريخ يمكن أن أقوم بإلزام المستخدم بإدخال صيغة صحيحة من البرنامج حتى يتم الحفظ في قاعدة البيانات بالشكل الصحيح لذلك لا يشترط أن يكون نوع الحقل تاريخ مثلا قد أدعة Char بطول 10 ليكون تنسيق التاريخ 01/01/2005 وهنا سوف ألزم المستخدم بالخضوع لهذه الصيغة وبالتالي سوف اخفف على قاعدة البيانات التحق من صحة إدخال التاريخ . السبب أني أقوم أنا بالنيابة عنها .
من هذا المنطلق أستطيع أن أتخلص حتى من نوع البيانات كيف .
قبل سنة عملت برنامج يتخاطب مع قواعد بيانات Oracle و Microsoft Sql Server و Microsoft Access في نفس أللحظه بحيث يكون هناك خيار يحدد نوع قاعدة البيانات ويفحص في أي من القاعدة التي تقوم أنت باختيارها . كانت المشكلة الأساسية لدي هي أن الاستعلامات ونوع البيانات بالذات تختلف من قاعدة لأخرى لذلك فكرت بعمل خوارزمية تقول بتوليد الاستعلام بناء على نوع قاعدة البيانات لكن مشكلة البطئ كانت في ذهني بذات في الخوارزمية لماذا ادع البرنامج يولد استعلامات فكرت أن أدع جميع الحقول في جميع قواعد البيانات من نوع Varchar لكون الكل تدعم هذا النوع .
وعملت تحكم كامل بالقاعدة من حيث وضع رقم فقط في حقل رقم الحساب وإدارة العلاقات وتتبع الأخطاء
وهي متعبة نوعا ما لكن خرجت بحل .
هذا الموضوع بالذات يحتاج مهارة عالية حتى لا تقع في مشكلة البطيء أو حتى مشكلة أنك نسيت أنقطة تحقق ما في البرنامج لذلك سيكون لديك أخطأ مهوله .
في هذا الموضوع يسهل عليك تتبع الأخطاء ومعالجتها أيضا هذا غير انك سوف تفهم كل نقطة في كودك ويفتح لك الكثير من مفاهيم التعامل مع قاعدة البيانات لتكون أكثر منطقية في وضح حلول المشاكل التي تواجهك وحتى ولو كانت مؤقتة. سوف أغلق هذا الموضوع مؤقتا حتى لا تدخل هناك شوائب في المفهوم .
في الموضوع القادم سوف اشرح طريقة التعامل مع هذا الأسلوب بالكود من ناحية الاتصال – التعامل مع البيانات .... الخ بالكود وباستخدام Ado
إلى اللقاء B)