قواعد المشاركة في المنتدى

(منتدى مبرمجي لغة جافا JAVA) الموضوع:في أحد يعرف لبرنامج Dr.java بواسطة: (سكون الكون) :: (قسم الاعلانات) الموضوع:شركات كاميرات مراقبة فى مصر جودة عالية مصر اسكندرية بواسطة: (مصرتكنولوجي) :: (قسم الاعلانات) الموضوع:كاميرات مراقبة المدارس اسعار كاميرات مراقبة مصر بواسطة: (مصراوي 2015) :: (منتدى الأكسس) الموضوع:احتاج مساعدتكم في اضافة الصورة في التقرير بواسطة: (سهم الماجد) :: (منتدى الأكسس) الموضوع:كيفة انشاء هذا الاستعلام بواسطة: (startnet) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:مشكلة بحفظ البيانات في قاعدة البيانات بواسطة: (مصلح الحريصي) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:سبب عدم رغبتي في تعلم الفيجوال دون نت قد تجدون الأمر مضحك بواسطة: (مصلح الحريصي) :: (قسم الاعلانات) الموضوع:كاميرات مراقبة أقل أسعار أجود أنواع شركه مصر تكنولوجى أسكندرية بواسطة: (مصرتكنولوجي) :: (منتدى مبرمجي لغة جافا JAVA) الموضوع:ارجوكم بدي مساعدتكم بواسطة: (وردة الذكريات) :: (منتدى Microsoft Visual Basic) الموضوع:برجاء المساعدة في انشاء هذا الايتعلام بواسطة: (huissenegylab2015) :: (قسم الاعلانات) الموضوع:كاميرات مراقبة الصيدليات فوائدخصائص كاميرات مراقبة مصر بواسطة: (مصراوي 2015) :: (منتدى Microsoft Visual Basic) الموضوع:مساعده في المشكلة بواسطة: (ابو حمد) :: (قسم الاعلانات) الموضوع:شركة دعاية و اعلان في مصر بواسطة: (faisal tamara) :: (منتدى الأكسس) الموضوع:تعديل لبرنامج اجازات الموظفين بواسطة: (shaymaasoftware) :: (قسم الاعلانات) الموضوع:عروض شركة تكنوفيجن للخدمات المتكاملة و حلول الانترنت بواسطة: (TeVision4) :: (قسم الاعلانات) الموضوع:كاميرات مراقبة أحدث أنواع أقوى عروض شركه مصر تكنولوجى بواسطة: (مصرتكنولوجي) :: (منتدى الأكسس) الموضوع:شرح بالفديو فكرة انشاء برنامج اكسس تجريبى لمدة معينه او فترة صلاحية بفكرة بسيطة بدون اكواد بواسطة: (xhanyx) :: (قسم الاعلانات) الموضوع:وكالة تمارا للطباعه بافضل الخامات وارخص الاسعار بواسطة: (faisal tamara) :: (منتدى الأكسس) الموضوع:[طلب كود] عدم ادراج سجل جديد الا بعد مرور فترة من الزمن بواسطة: (mohdhtm) :: (قسم الاعلانات) الموضوع:كاميرات مراقبة عروض2015 الساجدون بواسطة: (مصراوي 2015)


راديو القرآن

المواضيع المثبته: (منتدى Microsoft Excel) الموضوع:open office بواسطة: (ramies) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:المواضيع والدروس التعليمية في الدوت نيت - ابدأ من هنا بواسطة: (fmo_82) :: (منتدى برمجة التقارير) الموضوع:أداة لطباعة اي DataGridView بواسطة: (jbsa) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:طريقة تخزين أي نوع ملفات في Access DataBase ومشاهدتها وتشغيلها بواسطة: (jbsa) :: (قسم الدروس و الدورات) الموضوع:تعلم معي البرمجة بالفيجوال بيسك .. بواسطة: (كوثــــــــــــر) :: (قسم التعاميم والشكاوي) الموضوع:الرتب في المنتدى بواسطة: (عبدالله جابر شقليه) :: (منتدى مبرمجي ASP) الموضوع:برنامج اختبارات للجامعات بواسطة: (عبدالله جابر شقليه) :: (منتدى برمجة الألعاب) الموضوع:مقدمة في برمجة الـ (3D) الألعاب...جـ2 بواسطة: (NubiaPrince) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:كتب اوراكل (عربي) ...حمل... بواسطة: (عبد الرحمن) :: (قسم الدروس و الدورات) الموضوع:دورة شاملة في VB.Net المستوى الأول بواسطة: (مهند عبادي) :: (منتدى ADO.NET العام) الموضوع:البدء مع ADO.NET بواسطة: (HnHn) :: (منتدى Microsoft Visual Basic) الموضوع:أكبر مشاركة فيجوال بيسك بواسطة: (SkyLight) :: (قسم الدروس و الدورات) الموضوع:برمجة بصمة الاصبع مع الدوت نت Microsoft FingerPrint Reader بواسطة: (FunctionSys) :: (منتدى الكتب و المقالات) الموضوع:أرغب فى تعلم Microsoft Access وإحترافه بواسطة: (Prince4ever) :: (أخبار التكنولوجيا) الموضوع:القبض على أسامة بن لادن بواسطة: (وليد القدسي) :: (منتدى تصميم صفحات الويب) الموضوع:أرشيف الدروس المصورة بواسطة: (alanees) :: (منتدى الأكسس) الموضوع:برنامج ارسال الرسائل بين المستخدمين على الشبكه بواسطة: (startnet) :: (منتدى برمجة الألعاب) الموضوع:استراتيجية انتاج و تسويق الالعاب بواسطة: (مصطفي البارودي) :: (منتدى تحليل و تصميم نظم المعلومات) الموضوع:ما هو تحليل النظم System analysis بواسطة: (jbsa) :: (منتدى تصميم صفحات الويب) الموضوع:الجافا سكريبت في كتاب بواسطة: (amricost)

إضافة رد إضافة موضوع جديد

> قاعدة بيانات مستشفى,مشرووع تخرج
Bookmark and Share
تقييم الموضوع Label معدل التقيم:0
مشاركةالجمعة,01/ربيع الثاني/1430 هـ,02:04 مساءً
المشاركة #1

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 3
سجل في:الجمعة,01/ربيع الثاني/1430 هـ,01:42 مساءً
الدولة:السعودية
رقم العضوية: 81403



ياااااااااااااناس تكفون ساعدونى مطلوب اعمل مشروع قاعدة بيانات مستشفى وما عرفت افيدونى انا تونى طالبة فى معهد ومطلوب اسوى مشروع تخرج لمستشفى


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالسبت,02/ربيع الثاني/1430 هـ,12:48 صباحاً
المشاركة #2

مشرف منتدى فيجول بيسك
الرتبة في المنتدى:عقيد

أيقونة المجموعة

المجموعة: مشرفي الأقسام
المشاركات: 719
سجل في:الثلاثاء,16/رمضان/1426 هـ,09:55 مساءً
الدولة:السعودية
رقم العضوية: 6012



استخدم البحث قبل كتابة أي موضوع
اتبع الرابط
سورس كود برنامج إدارة مستشفى,أكثر من 100 شاشه ، 30 تقرير ---- رائع جدا

وشكرا
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,04/ربيع الثاني/1430 هـ,05:48 صباحاً
المشاركة #3

الرتبة في المنتدى:ملازم أول

أيقونة المجموعة

المجموعة: أعضاء فعالين
المشاركات: 211
سجل في:الثلاثاء,08/ذو القعدة/1427 هـ,01:46 مساءً
الدولة:السعودية
رقم العضوية: 15928



البرنامج رائع فعلا ولكن عند تشغيل البرنامج يطلب اسم المستخدم وكلمة المرور ودخلت على قاعدة البيانات وعرفت المستخمين وكلمة السر لكل واحد ولكن عندما اجرب المستخدمين وكلمة السر لا يعمل ودائما يعطيني رسالة خطأ


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,04/ربيع الثاني/1430 هـ,08:41 صباحاً
المشاركة #4

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 2
سجل في:الاثنين,04/رجب/1429 هـ,05:38 صباحاً
الدولة:سوريا
رقم العضوية: 58935




السلام عليكم
الى الاخت اللي طالبة مشروع مشفى
مشاركة بواسطة: InternetMaster Nov 4 2003, 10:45 PM
مرحبا،،،

يبدو أنني ممن إنضم لهذا الموقع متأخراً بعض الشيء حيث لم أسمع به من قبل، ويظهر من قراءتي لبعض المشاركات أنني قد فقدت فترة إزدهار هذا الموقع!!

بعد إنضمامي ببضعة أيام ومحاولاتي للإجابة على بعض أسئلة زوار الموقع إتضح لدي أن هناك خللاً في المفاهيم الأساسية لقواعد البيانات.

وعليه فقد طلب مني بعض الأخوة في هذا الموقع شرح الأسس العلمية لقواعد البيانات وحيث أن لدي وقتا لعمل هذا حتى 15 رمضان فسأحاول جهدي أن أضع بين أيدي زوار الموقع ومنسوبيه خبرة أكثر من 20 عاما في البرمجة. وسركز على جزئية قواعد البيانات بالدرجة الأولى.

وحتى تتسق الأمور من منظور صحيح أرغب ممن سيتابعنا أن يلتزم بما جاء في هذه الدروس السريعة حتى يصل معنا بمشيئة الله إلى المفاهيم الصحيحة لقواعد البيانات.

كل ما أطلبه ممن يستفيدو من هذه الشروحات المتواضعة هو دعوات صادقة لي في هذه الأيام المباركة، أم من لم يستفد فآمل منه أن يتقبل إعتذاري على إضاعة وقته.

فبإسم الله نبدا وعليه نتوكل.

تحياتي،،،

مرحبا،،،

في البداية آمل ممن يقرأ هذه الوريقات أن يتنبه إلى أنني وضعت هذه الدروس في قسم Access لكثرة عدد الزوار في هذا القسم، وعليه فالشرح هنا يتحدث عن قواعد البيانات بالدرجة الأولى وليس عن نوع واحد فقط، عند تعلمك للأسس الصحيحة لقواعد البيانات تصبح البرامج التالية في منتهى السهولة والبساطة.

Access
FoxPro
Clipper
DBase

Microsoft SQL
Oracle
Sybase

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

مرة أخرى كل ما سيتم وضعه هنا هو عن قواعد البيانات التي تساعد الجميع على الفهم وليس التطبيق والتقليد والمحاولة والخطأ.

وعليه فبإمكان من يقرأ هذه الدروس أن يدل عليها الأخوة في الأقسام الأخرى مثل أوراكل وساي بيز وميكروسوف أس كيو إل.

تحياتي،،،

مرحبا،،،

من خبرة سابقة في تقديم المحاضرات في بعض المؤتمرات والمحافل الرسمية والدورات التدريبية... قد تفاجأ عزيزي القارىء من طلباتي التالية:

إذا أردت إحتراف قواعد البيانات فعليك إتباع التالي:

أغلق الحاسب الآلي !!
احصل على مساحة ودفتر كبير بسلك وبراية ومجموعة من أقلام الرصاص وآله حاسبة !!
إقرأ الفاتحة وإبدأ بإسم الله الرحمن الرحيم.

إذا راودتك نفسك أن تفتح الأكسس وتقوم بالتطبيق فلن تفهم شيئا !!
إذا راودتك نفسك أن تسأل أي سؤال يبدأ بكيف؟ فلن تفهم شيئا !!

في نظرية التعلم هناك سؤالين الأول كيف والآخر لماذا؟

كيف؟ سهلة جدا إعمل كذا وكذا ثم كذا وكذا!! هذا لا يصنع منك إلا مقلدا !!
لماذا؟ تتطلب فكرا وعمقا وهدوءا، وهذا ما سنفعله في هذه السلسة من الشروحات، هو محاولة إيصال مفهوم لماذا؟

لماذا ننشأ هذا الجدول؟ لماذا بهذه الطريقة؟ لماذا الإستعلام وما هي أهميته؟ وهكذا
ليس كيف ننشأ جدول بل لماذا نصع هذا الجدول عوضا عن ذاك !!!

مرة أخرى،، لا حاسب، لا آكسس لا إس كيو إل، لا شيء، في هذه الدروس ستكون أنت الأكسس، أي انت من سيقوم بعمل الأكسس او SQL او أوراكل.

إذا نجحت بتوفيق الله ان أجعل من تفكيرك وعقلك أن يقوم بعمل أي برنامج لقواعد البيانات بعدها سيكون كل ما هو مطلوب منك الإجابة على كيف أعمل هذا في الأكسس أو كيف أعمله في أوراكل وتصبح العملية في منهى البساطة والسهولة والسلاسة، لماذا؟

لأنه عندها سيكون لديك كافة الأسس العلمية لقواعد البيانات.

تحياتي،،،

مرحبا،،،

قواعد البيانات !!! لاحظ كلمة البيانات، والبيانات هي مجموعة لا معنى لنا من الأرقام والكلمات... البيانات أي شىء مثل كلمة "ربح" كلمة "خسارة" رقم "2000" وهكذا...

البيانات لا تعني شيئا هذه أول خاصية من كلمة بيانات أنها لا تعني أي شىء، والبيانات لا يستفاد منها إطلاقا !!

الخاصية الثانية لكلمة بيانات هي الحجم، حيث أن البيانات دائما تعني الكثرة والضخامة من حيث العدد !!

وهذا يضع كلمة بيانات في موقع سىء حيث أنها ضخمة وكثيرة ومتشعبة وفي نفس الوقت لا معنى لها.

كلمة قاعدة تعني تنظيم الشىء على أسس، وهذا ما يتم في قواعد البيانات، هو تنظيمها ومن ثم تحليلها... لماذ؟

لماذا نقوم بتحليل وتنظيم البيانات؟ الإجابة هي... لتحويل البيانات إلى معلومات !!!

مممممم

من خلال معالجة البيانات تتحول إلى معلومات --- قاعدة أساسية في غاية الأهمية، الهدف إذا هو تحويل البيانات إلى معلومات. السؤال البيديهي لماذ نقوم بهذه العملية؟

لماذا نحول البيانات إلى معلومات؟
لسببين أساسيين:

الأول: هو إتخاذ القرارات.
الثاني: التخطيط

قاعدة بيانات تشمل تعداد سكان المملكة العربية السعودية. كبيانات لا قيمة لها، ولكن عند معالجة البيانات وتحويلها إلى معلومات يصبح لدينا التالي مثلا:

عدد الأطفال في تحت العشرة سنين 30% هي معلومة تتطلب التخطيط لبناء مدارس

مثال آخر أرباح السنة المالية الحالية 35% هنا لدينا معلومة نستطيع أن نتخذ عليها قرارا "إتخاذ القرارات" مثل توزيع راتب إضافي لمنسوبي الشركة.

وهكذا... لا ننسى أنه يتوجب تحويل البيانات إلى سلسلة من المعلومات المتدفقة للمساعدة على إتخاذ القرارات والتخطيط.

====

سيكون مشروعنا هو بناء قاعدة بيانات لإدارة مستوصف -- مرة أخرى لا تنس عزيزي القارىء --- لن نستخدم أي برنامج ولن نستخدم أي حاسب آلي على الإطلاق.

من سيقوم بالتطبيق على الحاسب الآلي لن يفهم شيئا --- صدقوني.

الآن أطلب منك عزيزي القارىء مزيدا من التركيز...

قواعد البيانات تندرج تحت مصطلح علمي للبرمجة أسمه Tier 3 أي الطبقات الثلاث.

حتى وإن كان ما سبق خطأ وهو تصميم قديم، لكني أطلب منك عزيزي القارىء أن تحفظها حتى لو كانت خطأ "الطبقات الثلاثة"

الطبقة الأولى First Tier
وهي ما يسمى بالمقدمة أو واجهة المستخدم User Interface

الطبقة الثانية Second Tier
وهي ما يسمى بطبقة المنطق والقوانيين Logic Interface

الطبقة الثالثة Third Tier
وهي ما يسمى بالخلفية Back End وهي طبقة ؟؟؟ قواعد البيانات !!


لماذا ازعجتك عزيزي القارىء بهذه المصطلحات؟
لأسباب بسيطة وصغيرة جدا:

قم بنسيان النماذج في الأكسس
قم بنسيان التقارير في الأكسك

النماذج والتقارير الموجودة في الآكسس ليست للإحتراف وليست للبرامج القوية أو قواعد البيانات الحقيقية.

لماذا هذه الزحمة؟؟؟

لأنه لا يوجد شيء في قواعد البيانات أسمه نماذج أو تقارير، النماذج والتقارير تصنع في الطبقة الأولى وليس الثالثة. الطبقة الثالثة لقواعد البيانات بينما الطبقة الأولى هي للنماذج والتقارير.

للمعلومية وقد يسعفنا الوقت لشرح المزيد لاحقا:

الطبقة الأولى --- نستخدم Visual Basic .NET
الطبقة الثانية --- نستخدم Visual C++ .Net
الطبقة الثالثة --- نستخدم Microsoft SQL أو Oracle أو Sybase

لماذا الآكسس و FoxPro و Dbase و Clipper و MySQL يستخدمون الطبقات الثلاثة مع بعضها البعض في محتوى واحد؟

الإجابة هي لأن هذه التطبيقات للإستخدام الشخصي فقط !!! وليس لصناعة قواعد بيانات للسوق. إلا في حالات شاذة جدا مثل أن يكون عدد المستخدمين صغير أقل من 10 أشخاص فقط.

لا تخف من فقدان النماذج التقارير في الآكسس وغيرها -- صدقني لا قيمة لها إذا أردت أو تطمح للإحتراف.

آخر هذه المشاركة:
هناك كلمتان في غاية الأهمية وقطعا تعرفهما Client و Server
قواعد البيانات دائما وأبداً على Server -- الطبقة الثالثة
الواجهات والنماذج والتقارير دائما وأبدا على Client -- الطبقة الأولى "يشذ عن هذا تطبيقات الإنترنت" وهذا موضوع آخر فيما بعد بمشيئة الله.

المسافة بين Client وال Server دائما غير معروفة، قد تكون 5 سم او 10 آلاف كيلو متر، إنتبه لهذه النقطة جيدا --- أعيد مرة أخرى المسافة بينهما غير معروفة -- سنتكلم عن هذا.

تحياتي،،،

مرحبا،،،

آآآآآآآآآآآآآآه --- أين نحن الآن؟

عند بداية تصميم أي قاعدة بيانات نبدأ بمعرفة أين يقع Client وأين يقع Server

ثم...

نجيب على الأسئلة التالية:

ما أهمية التواجد المستمر !! Availability إحفظ هذا المصطلح جيدا ويعني أن الطبقة الثالثة وهي طبقة قواعد البيانات -- كم يسمح لها أن تنهار؟؟؟ Server أو الخادم هو عبارة عن حاسب آلي والحاسبات تتعطل صح؟ ماذا يحدث عن خروج الطبقة الثالثة من الخدمة؟
مشتخدم البرنامج يجب أن يجيب على هذا السؤال؟ لأنه لو قال لك أريد الطبقة الثالثة أن تعمل على مدار السنة دون خروجها من الخدمة فهذا يتطلب أن يكون هناك Backup خادم آخر يعمل عند سقوط الخادم الأساسي، وهذا يؤثر على كيفية بناء قاعدة البيانات.

السؤال الثاني هو القياس !! Scalability إحفظ هذا المصطلح جيداً ويعني كم شخصا سيتخدم قاعدة البيانات؟ كم شخصا سيتخدم قاعدة البيانات في نفس الوقت؟ كم عدد السجلات في قاعدة البيانات على مدى العشر سنوات قادمة؟ ما هو المطلوب عمله في البيانات القديمة هل تحذف أم تخزن؟ هل تخزن على نفس الخادم أم على خادم Server آخر؟ كيف يتبادل الخادمين المعلومات؟ وهكذا؟ هذا العنصر "القياس" هو الأهم على الإطلاق.

عزيزي القارىء...

عند تصميمك لأية قاعدة بيانات تخيل ما يلي:

أن قاعدة البيانات فيها 5000 جدول
أن كل جدول في قاعدة البيانات تحتوي على 10 ملايين سجل
أنه يوجد 30 ألف مستخدم يتعاملون مع قاعدة البيانات في نفس الوقت
أن المسافة بين Server و Client ألف كيلو متر
لماذا هذا التخيل؟

لأنه هذا هو الطريق الصحيح لصناعة قاعدة بيانات قوية الأساسات وخالية من الأخطاء وستعلم لاحقا لماذا.

من قرأ معنا حتى الآن ويرى أن قواعد البيانات شوية حقول على توليفة أستعلامات على نموذجين وكم تقرير أقترح عليه التوقف عن القراءة حيث لن يستفيد شيئا.

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

عفوا وعذرا لمحبي الآكسس -- كل ما أحاول عمله في البداية هو توضيح للمفاهيم ثم المصطلحات قبل أن نبدأ السباحة.

أين الطبقة الثانية Logic Tier --- دعك منها الآن

كل تركيزنا حتى هذه اللحظة منصباً على الطبقة الثالثة وهي قواعد البيانات.

آمل عزيزي القارىء أن تكون في هذه اللحظة قد جهزت براية ومحاية ودفتر ومسطرة وآلة حاسبة ومجموعة أقلام رصاص.

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

شمر عن ساعديك وحضر الأدوات السابقة ولا تفتح الآكسس ولا الحاسب الآلي إطلاقا وهيا بنا نصمم قاعدة بيانات لإدارة مستوصف بالطرق العلمية الصحيحة.

مرة أخرة يا أخوتي وأخواتي -- سنصصم يدوياً وليس بإستخدام الحاسب الآلي او الآكسس أو غيره.

تحياتي،،،

مرحبا،،،

آمل ممن ليس معه:

مسطرة
محاية
براية
آلة حاسبة صغيرة
دفتر كبير
أقلام رصاص

أن لا يكمل معنا المشوار --- والله العظيم لن يفهم قواعد البيانات أبدا، وسيبقى يلف ويدور ويسأل ويحاول ويخطىء وهكذا دواليك.

أمل ممن يستخدمون الآكسس الآن أن يوقفوه فوراً --- من سيطبق على الآكسس او أي برنامج غيره --- والله لن يستفيد شيئا.

بإسمك اللهم أبدأ:

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

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

في الأسلوب العلمي الصحيح عند بناء قاعدة بيانات نبدأ بالتقارير ثم نصمم الجداول ثم الإستعلامات ثم .... لن أقول لكم الآن حتى لا أشتت أي تركيز.

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

برنامج قاعدة بيانات لإدارة مستوصف

لبناء الجداول نبدا بتحديد أقصى بعد لمكونات المشروع "في حالتنا مستوصف" من ماذا يتكون المستوصف. سؤال سهل، الإجابة --- يتكون من:

أطباء
عيادات
مرضى

في قواعد البيانات هناك الوظيفة الأساسية والوظائف الفرعية -- ما هي الوظيفة الأساسية للمستوصف -- علاج المرضى "بإذن الله" وكذلك تحقيق أرباح

إذا تم تعريف الوظيفة الأساسية للمشروع --- علاج المرضى -- بدون مرضى المشروع فاشل ولا معنى له --- إذا الجدول الأساسي هو جدول المرضى.

فاصلة --- توقف --- ركز --- كمل

ماهي الوظائف الفرعية للمستوصف؟

هل يوجد مستوصف بدون صيانة؟
هل يوجد مستوصف بدون مقاول للنظافة؟
هل يوجد مستوصف بدون إدارة شؤون موظفين؟
هل يوجد مستوصف بدون صيدلية؟
هل يوجد مستوصف بدون جداول للنوبات؟
هل يوجد مستوصف بدون نظام حجز مواعيد؟

وااااااااااااااااو --- العملية بدأت "في الليمونة" على رأي أحبائنا في مصر
العملية بدأت تتشعععععععععععععععععععععععب

لحظة -- توقف -- إتصل بصاحب المشروع -- صاحب المستوصف -- حدد إجتماع

المشهد: فريق العمل معك أنت بصفتك قائد الفريق مع صاحب المستوصف مع مدرائه في غرفة الإجتماعات الساعة العاشرة صباحا -- أمامك قنجان من القهوة "مو في رمضان طبعا"

ما هو المطلوب من هذا الإجتماع؟؟؟

هل قاعدة البيانات المطلوبة هي للوظيفة الأساسية؟ أم للأساسية والفرعية أيضاً؟ إذا تم دمج الفرعية؟ أي منها؟

لهذا السبب قواعد بيانات شؤون الموظفين ذائعة الصيت لماذا؟ لأنها تصلح لكل منشأة وشركة بغض النظر عن نشاطها. وهكذا للمحاسبة والصادر والوارد وغيرها.

ملاحظة: قد يسعفنا الوقت لاحقا وبتوفيق الله أن نشرح كيف نجعل مجموعة من قواعد البيانات المختلفة أن تتحادث وتتخاطب بين بعضها البعض للحصول على تقارير موحدة منها جميعا وهو ما يسمى Distributed Database Applications

توقف --- إستمر --- لا بد من تحديد نطاق عمل قاعدة البيانات منذ اليوم الأول، يجب أن ينص العقد مع صاحب المشروع على نطاق قاعدة البيانات --- لماذا؟؟

هيا عاد لا بد أن تيجيب على السؤال!! فكر قبل أن تقرأ الإجابة

السبب بسيط لأنه عند إكتمال قاعدة البيانات ومن ثم يتغير نطاق العمل تتغير الجداول تتغير العلاقات تتغير الإستعلامات تتغير التقارير --- مصيبة كبيرة وخسائر في الوقت والجهد.... إلا إذا كنت وحشا من وحوش قواعد البيانات لأنك يمكنك تصميم قاعدة البيانات بدون حقول .... واووووو ويقوم مستخدم القاعدة بعمل أية حقول كيف يشاء متى يشاء --- واااااووو --- ويستطيع أن يغير النماذج والتقارير آليا عند عمل تعديل في الحقول ---- وااااااااوووو --- يكفي هذا --- إسألوني فيما بعد عن هذا --- موضوع متقدم جدا جدا جدا ليس مكانه هنا.

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


استخدم البراية لشذب أول قلم رصاص وفي منتصف صفحة بيضاء فارغة في الأعلى اكتب"الجدول الرئيسي" للمستوصف وسجل الحقول التالية.

أريدك أن تنسى العبارات التالية: نص، رقم، عملة، كائن، إلخ

إبدا معي بالكتابة في الصفحة التي ستحمل كافة حقول المشروع ولأن التطبيق يدوي فلن أكثر عليكم بالحقول سنزيدها عند التطبيق الفعلي على الآكسس لاحقا بمشيئة الله:

الحقول:
رقم المريض -- 10 خانات
إسم المريض -- 50 خانة
جنسية المريض -- 25 خانة
عمر المريض -- 2 خانة
جنس المريض -- 1 خانة
تشخيص المرض -- 350 خانة
العلاج -- 350 خانة
التكلفة المدفوعة من المريض --- 5 خانات
تاريخ دخول المريض --- 10 خانات
وقت دخول المريض --- 5 خانات
تاريخ خروج المريض --- 10 خانات
وقت خروج المريض --- 5 خانات


رقم الطبيب المعالج -- 10 خانات
إسم الطبيب -- 50 خانة
جنسية الطبيب -- 25 خانة
راتب الطبيب الشهري -- 5 خانات
بدل السكن للطبيب السنوي -- 5 خانات
بدل النقل للطبيب الشهري -- 5 خانات
جنس الطبيب -- 2 خانة

رقم العيادة -- 10 خانات
إسم العيادة -- 50- خانة
رقم الجناح الذي تقع فيه العيادة -- 2 خانة
رقم الطابق -- 2 خانة

ملاحظات -- 500 خانة


آمل ممن نفذوا ما سبق على الآكسس ألا يكملو فلن يستفيدوا شيئا !!!؟؟؟
من نفذ ما سبق على ورقة بيضاء بخط واضح أن يفتح صفحة جديدة في الدفتر ويتقمص شخصية مدخل البيانات وبإستخدام المسطرة والقلم أن يرسم جدولاً فيه كافة الحقول السابقة كعناوين للأعمدة وأن يسجل 45 سجلاً لزيارات مرضى مع مراعاة ما يلي:

أن يسجل على الأقل 3 إلى 5 زيارات لكل مريض
أن يسجل على الأقل 3 إلى 5 علاجات لكل طبيب
أن يسجل على الأقل 3 إلى 5 إستخدامات لكل عيادة

أن ينوع في انواع الأمراض "كقانا الله وإياكم شرها"
أن ينوع في جنس المرضى والأطباء
أن ينوع في الجنسيات

وهكذا....

بعد أن تقوم بكتابة 45 سجلاً على الأقل نكون بحمد الله وفضله قد إنهينا تصميم قاعدة البيانات !!!!!!!!!!!!! طبعا لأ !!!

سنقول لماذا في الدرس القادم بمشئية الله.

تحياتي،،،

مرحبا،،،

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

مدخل البيانات هو شخصية تتطلب من مصمم قاعدة البيانات أن يفهمها بشكل واضح، ولزيادة عنصر الشوق أقول لكم أنه يوجد دورات تدريبية مخصصة لفهم شخصية ما يسمى بالوظائف المملة Boring Jobs وطبعا هذه الدورات للأسف "كالعادة" لا تقدم في عالمنا العربي.

الوظائف المملة Boring Jobs هي وظائف "لا تستغرب عزيزي القارىء" ذات رواتب مرتفعة جدا جدا مع قلة الخبرة والتعليم المطلوب فيها !!! لماذا ؟

هذه الوظائف يترتب على الخطأ فيها خسائر جمة لصاحب العمل !!! بهذه البساطة.

من أمثلة الوظائف المملة:

الحراسات الليلية
قيادة الحافلات والناقلات على الخطوط البرية الطويلة بين الدول
وطبعا صديقنا --- مدخل البيانات

اذا تعمقت في هذه الوظائف تجد أنه يترتب على الخلل فيها خسائر جمة، فحارس ليلي قد يترتب على نومه سرقة للمستودع مثلا --- خسارة كبيرة.

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

وصديقنا مدخل البيانات -- تخيل أن يقوم بإدخال ارقام خاطئة عن المبيعات -- يترتب عليها تقارير توضح خسائر بينما الشركة تربح فعلا، أو يدخل أنثى على أنها ذكر، كل الإستعلامات التي تبنى على جداول بيانات خاطئة تعطى نتائج لا معنى لها. ليست مشكلة الحاسب الآلي انه يعطيك نتيجة جمع 5 و 3 على انها 8 وانت تقصد جمع 4 و 3 !!!

من رأى منكم مدخل بيانات فعليا سيضحك لما أقول، لأن مدخل البيانات خلال أداء عمله لا ينفك من سب وشتم والإستهزاء بمصمم قاعدة البيانات !!!!

مدخل البيانات هو ذكر كان أو إمرأة يبدأ يومه وعلى يمنه أو يساره مجموعة ضخمة من المعاملات المطلوب إدخال بياناتها إلى قاعدة البيانات، لأن الوظائف المملة يغلب عليها طابع التكرار Loops لنفس العمل ----- يبدأ مدخل البيانات بعد بضعة ساعات بالسرحان والتفكير بحياته ومواضيعه الشخصية والذي يدخل البيانات فعليا هو العقل الباطن الناتج من الخبرة !!!

هل قمت بقيادة سيارتك يوما ما ووصلت إلى وجهتك وفجأة تذكرت أنك كنت تفكر بموضوع ما ولا تتذكر الإشارات والإنعطافات والشوارع... من كان يقود السيارة؟!!!

لماذا هذا الموضع النفسي والفلسفي؟؟؟؟

لأنه مطلوب منك عند تصميم قاعدة البيانات ان تتقمص شخصية مدخل البيانات بين الحين والآخر، لماذا؟ لأنك تريد أن تحد بشكل كبير من حجم الأخطاء في قاعدة البيانات؟ لماذ نحد من أخطاء مدخل البيانات؟ لأن صاحب المشروع سيحصل على نتائج خاطئة وبالتالي لن يستخدم برنامجك؟ الخسارة تقع على كاهلك أنت !!!

الهدف الآن واضح --- آمل ذلك --- عند تصميم قواعد البيانات لا نريد أن يقوم مدخل البيانات بإدخال بيانات خاطئة "القاعدة العلمية تقول --- هذا مستحيييييييييييييييييييييل" !!

وااااااااااو --- إذا كان مستحيلا فما العمل؟ الهدف أصبح أن تساعد مدخل البيانات على الحد من الأخطاء لا أن تمنعها كلياً !!!

تتفق معي أن هذا غريب ؟؟؟ لماذا؟ لأنه من الناحية العلمية نستطيع أن نجبر مدخل البيانات على ألا يقوم بإدخال أي شيء خطا ومع ذلك القاعدة العلمية تنصح بعدم تنفيذ هذا بل فقط الحد من ذلك لا منعه !!! لماذا؟ لأن تكلفة المنع في تصميم قواعد البيانات عالية جدا وتفوق تكلفة عمل تدريب صغير لمدخل البيانات.

كيف ولماذا ننمع؟ موضوع آخر قد نتطرق إليه فيما بعد، بعد الإنتهاء من الأسس العلمية أولا

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

الحاسب الآلي "متخلف" عفوا --- الحاسب الآلي يعكس فكريا رياضيا لا منطقيا !!

المنطق هو إدراك عالي جدا لا يصله إلا البشر فقط !!

إقرأ معي الكلمات التالية فضلا منك:

أنثى
إنثى
انثى
إنثي
إنثى
انثي

ماذا قرأت ؟؟؟

لأنك "بشر" ولديك الإدراك الذي فضلك به الحق تبارك وتعالي فإنك ترى أن كل الكلمات السابقة تعني أحد الجنسين من البشر وهي الأم والأخت والزوجة والبنت وهكذا.

توقف - ركز -- استمر

في مطلق برامج قواعد البيانات (كلها على الإطلاق) ومن ضمنها الآكسس ما سبق يعني 6 كلمات مختلفة ؟؟؟؟!!!!

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

الآن نفكر ونخطط لقاعدة البيانات --- كيف نمنع مدخل البيانات من إدخال حقل الجنس للإناث بطرق مختلفة؟

بل ليس هذا فقط؟؟؟ المطلوب منك كمصمم قواعد بيانات هو أكبر من هذا، المطلوب يتجاوز الحد من أخطاء مدخل البيانات إلى مسافة أبعد وهي المساعدة على إدخال البيانات.

طبعا لا أقصد المساعدة اليدوية في إدخال البيانات !!! بل في طريقة تصميم القاعدة لتساعده على ذلك وعندها قد تسمع ان مدخلي البيانات يدعون لك "وان كنت أشك في هذا لكونهم دائمي التذمر بغض النظر عما تعمله !!".

إحفظ الكلمة التالية "المصطلح" Integrity ويعني التكامل والتماسك، قاعدة البيانات مثل ما شرحنا سابقا هي بيانات لا قيمة لها "بعد تحليلها تصبح معلومات" والبيانات بطبعها عدم التماسك والتكامل ومن هنا لا بد الا تترك أي ثغرات في قاعدة البيانات يتسلل منها مدخل البيانات إلى إدخال بيانات خاطئة تؤدي إلى فقد التكامل والتماسك لبنية قاعدة البيانات.

Integrity تعني أن كافة حقول وسجلات كافة الجداول تعمل مع بعضها البعض بشكل متناغم وبشكل يحد من أخطاء إدخال البيانات.

بعد كم درس راح أسأل عن Integrity وخلي واحد ما يجاوب صح، كل الأسس العلمية لقواعد البيانات تلف وتدور حول Integrity اي التكامل والتماسك.

الآن عزيزي القارىء، أعد قراءة هذه الصفحة وبإستخدام قلم الرصاص أكتب المصطلحات وإشرحها لنفسك مرة أخرى، ليتنا نكتب مثلما نقرأ. الكتابة هي المعلم الأول.

أية أسئلة تقفز إلى أذهانكم --- إسألوها حتى يطمئن قلبي أننا نسير بالإتجاه الصحيح.

للحد من أخطاء إدخال البيانات نقوم بعمليات:

المنع
الإختيار
تحديد النطاق
الإكمال والإدخال والإختيار الآلي
التأكد من Integrity لقاعدة البيانات

وكلها سنتحدث عنها فيما بعد بإذن الحق تبارك وتعالى.

تحياتي،،،

مرحبا،،،

آمل أني وصلت بكم بالتشويق إلى مرحلة الإقتناع بأن تحضروا البراية والمحاية والمسطرة وأقلام الرصاص وآلة حاسبة ودفتر بسلك.

آمل أنه يوجد هناك الآن في هذه الليلة المباركة من قام فعلا بتصميم الجدول الأساسي لقاعدة البيانات الخاصة بالمستصوف على ورقة بيضاء.

آمل انه يوجد هناك من قام بإدخال 45 سجلا في قاعدة البيانات (على الورق) من خلال جدول رسمه بالمسطرة والقلم.

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


من لم يكمل (كتـــــــــــــــــــــــــــــابة) الحقول والسجلات في جدول على ورقة بيضاء فرجاء لا يكمل القرآءة. توقف فورا الآن. رجاء لا تضيع جهدي ووقتي سدى. توقف ومن ثم تابع بعدما تكون أنهيت المطلوب منك.


نكمل بتوفيق الله...


صدق أو لا تصدق أن ما قمت بعمله هو قاعدة بيانات مكتملة من كافة الجهات
صدق أو لا تصدق أن ما قمت بعمله هو قاعدة بيانات صحيحة 100% وقد قمت بتصميمها بنفس الأسلوب والطريقة التي كانت تصمم به قواعد البيانات قبل عام 1969 ميلادية

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

هيا بنا نستمتع مع بعضنا البعض ونتأمل في هذا الجدول الذي نسميه بيانات.

نفتح صفحة بيضاء جديدة وفي منتصف الصفحة "الأسئلة" ومن ثم إنقل معي هذه الأسئلة إلى الورقة:

كم عدد الزيارات للمستوصف؟
كم إنثى قامت بزيارة المستوصف ودفعت أكثر من 100 ريال؟
كم طبيبا في المستوصف لا ينتمي إلى الجنسية البريطانية؟
كم زيارة حدثت بعد منتصف الليل؟
ما هو متوسط التكلفة المدفوعة من قبل الذكور؟
ما هو الإجمالي الشهري لبدل النقل للطبيبات؟
ماهي نسبة رواتب الأطباء الذكور إلى إجمالي الرواتب المدفوعة شهريا؟
ما هو إجمالي دخل المستوصف من الإناث؟
ما هو متوسط أعمار المرضى؟
كم طبيبة اسمها سميرة؟
كم عدد العيادات في الطابق الثالث؟
كم عدد الزيارات من قبل المرضى الصباحية؟
كم عدد الطبيبات السعوديات اللاتي دخلهن السنوي اكثر من 150 الف ريال؟
كم طبيبا تواجد في عيادة في الطابق الأول وكان معه مريضا ذكرا؟
ما هو الدخل اليومي للمستوصف؟

صدقوني -- هذه قاعدة بيانات كاملة من الألف إلى الياء

آمل الآن من الجميع وبدون عمل أي تعديل على بيانات الجدول الذي أدخلتم به السجلات (على الأقل 45 سجل) أن يجيبو على الأسئلة السابقة ويقومو بكتابة الإجابات في النصف الأسفل من صفحة الأسئلة.

صدق أو لا تصدق --- راقب كيف يتولد الإحباط والصداع وأنت تعد وتحاول الإجابة
صدق أو لا تصدق --- أن ما تقوم به الآن هو تقريبا وإلى حد كبير هو ما يقوم به أي برنامج قواعد بيانات -- أنت الآن تقوم بدور الآكسس

مرة أخرى --- عندما نصل إلى القواعد والمفاهيم الأساسية لبناء نظم قواعد البيانات وأنت تقوم بالقراءة فقط دون تطبيق أو تقوم بالتطبيق على الآكسس أو غيره -- صدقني ستعود إلى نفس ما كنت عليه قبل أن تقرأ هذه المواضيع ولن ينالك سوى تعب القرأة. إذا كنت تقرأ فقط فأنت تضيع وقتك.

قم بتشذيب أقلام الرصاص

لدينا الكثير والكثير والكثير من الكتابة.

الله المستعان.

تحياتي،،،

مرحبا،،،

من نفذ التمرين الأول (كتابة على الورق) يمكنه الآن الإستمرار معنا.

إن ما قمت بتنفيذه هو قاعدة بيانات صحيحة مكتملة الجوانب وطريقة التصميم هذه تسمىFlat Databases أو قواعد البيانات المسطحة وهي نفس الطريقة المتبعة في لغة COBOL ولا أعلم إن كانت COBOL مازالت تتبع نفس الأسلوب حيث تركت هذه اللغة منذ أكثر من 10 أعوام.

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

هناك ميزة كبيرة ومهمة جداً لقواعد البيانات المسطحة، وهذه الميزة هي أن تصميم وإنشاء وتنفيذ قاعدة البيانات يتم في وقت قصير جدا وقياسي، قاعدة البيانات التي قمنا بتصميمها لإدارة المستوصف استغرقت أقل من ساعتين وعلى الآكسس لن تأخذ أكثر من عشر دقائق. هذه ميزة رائعة جدا.

نحفظ سوياً: قواعد البيانات من النوع المسطح Flat هي عبارة عن جدول واحد فقط فيه كافة الحقول المطلوبة وتتميز بسرعة تنفيذ وتصميم قاعدة البيانات.

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

سؤال: بماذا تتميز قواعد البيانات من النوع Flat؟
سؤال: ما هي قواعد البيانات من النوع Flat؟

نعود إلى المستوصف، نحن الآن في قاعة إستقبال المرضى في المستوصف.

يدخل المستوصف مريض:
العمر: 42 عاما
الإسم: محمد عبد الله
الجنسية: سعودي
الجنس: ذكر
المرض: إنفلوانزا

نطلب منه كافة المعلومات ثم نقوم بتحويله إلى:

الطبيب: سميرة عبد الخالق
الجنس: أنثى
العمر: 52
الجنسية: مصرى

ونقوم بتوجيه المريض إلى الطابق الثاني حيث تقع عيادة الأنف والأذن والحنجرة.

عند خروج المريض نقوم بتسجيل تاريخ ووقت الخروج والتكلفة المدفوعة منه.

ما الذي حدث؟

تم إضافة سجل جديد في قاعدة البيانات المسطحة التي قمنا بإنشائها.

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

دخل محمد عبد الله مرة أخرى إلى المستوصف وتم توجيهه إلى طبيب العظام لإجراء تجبير للكسر في ساقه.

ما الذي حدث؟ --- قمنا بإضافة سجل جديد في قاعدة البيانات الخاصة بالمستوصف

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

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

ما الذي حدث؟ قمنا بإضافة سجل جديد إلى قاعدة بيانات المستوصف.

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

في هذه الليلة قام مدخل البيانات بإدخال ثلاثة سجلات، بماذ تميزت هذه السجلات؟

تميزت بأن أحد عناصر قاعدة البيانات وهو (المريض) قد تكرر تسجيل بياناته ثلاث مرات

ماذا يعني هذا؟

يعني:
أنه عند تكرار دخول المريض للمستوصف أكثر من مرة يتطلب الأمر في كل مرة إدخال كافة بياناته كاملة.

أنه عند تكرار إستخدام الطبيب (مثل أن يدخل خمسة مرضى على طبيب العظام) يتطلب الأمر إعادة إدخال بيانات الطبيب مرة أخرى.

أنه عند تكرار إستخدام أي عيادة (مثلا عشرة مرضى تم علاجهم من قبل ثلاثة أطباء كلهم في العيادة الباطنية) يتطلب الأمر إعادة إدخال كافة بيانات العيادة.

الخلاصة:
في قواعد البيانات المسطحة يتم إعادة إدخال بيانات أي عنصر يتكرر أكثر من مرة.

الآن سأذهب لشرب فنجان من القهوة وأتمتع بقليلا من التمر... وعندما أعود بعد بضعة دقائق أتمنى من الجميع أن يكونوا قد فكروا في إجابة السؤال التالي.

ما هي المشكلة من تكرار إدخال البيانات؟

تحياتي،،،

مرحبا،،،

توقفنا عند السؤال التالي:

ما هي المشكلة من تكرار إدخال البيانات؟

الجواب: مشاكل جمة لا عد ولا حصر لها !!!!

أهم هذه المشاكل:

تكرار بيانات موجودة أصلاً
إستنزاف شديد للسعات التخزينية مثل الأقراص الصلبة
موطن خطير لإرتكاب الأخطاء الناتج عن التكرار فمثلا المسكين محمد عبد الله في الزيارة الثانية تم تسجيل إسمه على شكل (محمد عبدالله) بدون مسافة بين التعبيد ولفظ الجلاله وبهذا يصبح لدينا مريضا جديد !!!
أما المشكلة الأكبر هي عند إضافة حقل جديد لقاعدة البيانات، مثلا إضافة تاريخ الميلاد للمريض !!! يتطلب الأمر الآن إدخال نفس التاريخ في كافة السجلات فإذا كان لدينا 500 زيارة منها 42 زيارة للأخ محمد عبد الله يتطلب الأمر إعادة إدخال تاريخ الميلاد 45 مرة !!!


تكرار إدخال البيانات هو أحد مصائب وليس مشاكل قواعد البيانات المسطحة وكانت مرتعا خصبا للأبحاث في قبل عام 1970 ميلادية.

العالم الخطير السيد CODD والذي يعمل في شركة IBM قام في عام 1969 ميلادية بطرح أول نظرية تقوم بعلاج مشاكل قواعد البيانات المسطحة Flat وتم تسميتها قواعد البيانات العلاقية Relational Databases

صدق أو لا تصدق، مازالت هذه النظرية هي المعمول بها في كافة برامج قواعد البيانات الموجودة في العالم الآن وطبعا من ضمنها الآكسس.

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

إن القوانين التي وضعها هذا العالم (الذكي جدا طبعا) تم تبنيها من قبل الشركات العالمية وبدأت تنتج برامج تعتمد على هذه القوانين وتتيح هذه البرامج لمستخدميها بتصميم قواعد بيانات علاقية Relational ولصعوبة هذه القوانين يكفي أن تعلم عزيزي القارىء أن أفضل قاعدة بيانات تم تصميمها في العالم إلتزمت ب 8 قوانين فقط من 12 الأصلية !!!

أي أن التطوير في برامج قواعد البيانات مثل أوراكل وآكسس وSQL وغيرها مازال قاصرا عن الوفاء بكل قوانين السيد CODD.

قبل الخوض في قواعد البيانات من النوع العلاقي Relational نقول التالي:

أن قواعد البيانات من النوع Relational تقول بحل كافة مشاكل قواعد البيانات المسطحة بل تؤدي إلى Integrity (مين يذكر هذا المصطلح؟) أفضل بكثير وتسهل عمليات تحديث وتطوير قاعدة البيانات.

ولكن الثمن المقابل لهذا الميزات غير رخيص !!!!

فقواعد البيانات من النوع العلاقي:

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

لا يوجد نوع آخر لقواعد البيانات في العالم غير هذين النوعين:

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

علاقي Relational ذي تكلفة مرتفعة في التصميم وتكلفة منخفضة في الصيانة والتطوير ويعاب عليه صعوبة التصميم التي تحتاج إلى فريق عمل ولكنه يحل كل مشاكل قواعد البيانات المسطحة.

تحياتي،،،

مرحبا،،،

إذا كنت تريد عمل قاعدة بيانات:

أنت المصمم لها
أنت المستخدم لها
أنت مدخل البيانات
أنت من سيقوم بعمل إحصائيات وتقارير سريعة
انت تحت ضغط الوقت والتكلفة

ضع كافة الحقول في جدول واحد وصمم قاعدة البيانات على شكل مسطح Flat. لا تنس أنه لا يوجد فروق إطلاقا بين البرامج كل ما نتعلمه هنا ينطبق على:

Access
FoxPro
Dbase
Clipper
Microsoft SQL Server
Oracle
Sybase
إلخ...

كذلك يمكنك تنفيذ قاعدة بيانات مسطحة بإستخدام EXCEL بشرط أن يكون عدد السجلات صغير نسبيا مثل عدة آلآف.

أما....

إذا كان مدخل البيانات يختلف عنك بصفتك مصمم لقاعدة البيانات
أو أن القاعدة ستستخدم من قبل آخرين -- تريد بيعها في السوق مثلا أو ربطها بموقع على الإنترنت
أو أن لديك متسع من الوقت
أو لديك فريق عمل

أو ريد أن تصمم القاعدة وفق الأسس العلمية والصحيحة لقواعد البيانات فيجب أن تقوم بالتصميم على أسلوب Relational العلاقي وبتطبيق قوانين السيد CODD

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

قلنا أننا سنبسط قوانين مستر CODD والتبسيط له قوانين أيضا حيث أرغب ممن يقرأ ألا يقوم بالعد للحصول على 12 قانون لأننا قد نبسط قانونا واحد بقوانين متعددة أبسط وأسهل.

قبل الدخول في قوانين مستر CODD سأطرح قوانين مستر InternetMaster، بالمناسبة هذا هو محدثكم !!!

لا تستخدم اللغة العربية في كل مما يلي:
إسم قاعدة البيانات
أسماء الجداول
أسماء الحقول داخل الجداول
أسماء الإستعلامات

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

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

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

إنتهت قوانيني !! لنعود إلى مستر CODD

ما هي قوانينه؟

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

في الجدول الواحد لا يسمح بأي تكرار للسجلات، بمعنى أنه عند إدخال معلومات طبيب مثلا في جدول الأطباء يمنع تكرار بيانات هذا الطبيب مرة أخرى.

لا بد من تمييز كل سجل في الجدول بحقل مميز (ويفضل أن يكون حقلا واحدا فقط) ويسمى مفتاح الجدول. في الآكسس مثلا يسمى Primary Key

بيانات حقل المفتاح الرئيسي لا تتكرر لأي سجل. أي أن كل سجل يحتوى على بيانات مختلفة في المفتاح الرئيسي أو الأساسي سمه ما شئت.

لا يسمح لبيانات حقل المفتاح الرئيسي أن تكون فارغة أو غير معلومة.

نستكمل بعد فنجان من القهوة.
تحياتي،،،
مرحبا،،،

أعتذر لطول فنجان القهوة لإستقبالي بعض الضييوف، وحقيقة يبدو أن الضيف شعر بأني أهيم في عالم آخر "قواعد البيانات" وما ألذه من عالم !!!

ما زلنا نبحر من السيد CODD في قوانية الخاصة بقواعد البيانات العلاقية:

نفتح في الدفتر صفحة جديدة ونبري قلم رصاص وتعالو بنا نعيد تصميم قاعدة البيانات خطوة خطوة (على الورق طبعا) مع إعتبار لقوانين العالم CODD

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

أريدك عزيزي القارىء الآن أن تركز معي بشدة:

تخيل أن كل جدول من الجداول الثلاثة يحتوي على 500 حقل !!

إتفقنا؟ هذا التخيل في غاية الأهمية حتى نفهم أول القوانين والأسس، لماذا نتخيل هذا؟
لسبب بسيط جدا (سنستوعبه بشكل اكبر فيما بعد) وهو أن عدد الحقول في أي جدول لا قيمة له حالياً !!! لماذ ليس له قيمة حاليا؟ لأننا في قواعد البيانات العلاقية لا نهتم لوصف الجدول بل نهتم بالدرجة الأولى ونركز على تماسك قاعدة البيانات. من يتذكر المصطلح Integrity؟

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

إتفقنا؟

الآن ولأننا نعمل بأيدينا على الورق فلا يوجد أي داعي لهدر الوقت بالكتابة سندرج ثلاثة حقول فقط في كل جدول.

في منتصف الصفحة نكتب (تصميم القاعدة على طريقة العلاقات)

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

الجدول الثاني -- جدول الأطباء -- فيه ثلاثة حقول -- إسم الطبيب -- عمر الطبيب -- جنس الطبيب إلخ وينطبق عليه ما جاء في جدول المرضى.

الجدول الثالث -- جدول العيادات -- فيه ثلاثة حقول -- إسم العيادة -- رقم الجناح -- رقم الطابق إلخ وينطبق عليه ما جاء في أعلاه.

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

في أول الصفحة على اليمين أكتب:

جدول المرضى:
إسم المريض
عمر المريض
جنس المريض

جدول الأطباء:
إسم الطبيب
عمر الطبيب
جنس الطبيب

جدول العيادات:
إسم العيادة
رقم الطابق
رقم الجناح

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

ما الذي فعلناه حتى الآن؟

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

السيد CODD يقول أنه يتوجب أن يكون هناك حقل أساسي يتم من خلاله تمييز كل سجل من سجلات الجدول وهذا الحقل ليس موجود لدينا، لماذا؟

لماذا لا يكون الحقل الأساسي في جدول المرضى هو إسم المريض مثلا؟ من يجيب؟
لماذا لا يكون الحقل الأساسي في جدول الأطباء هو عمر الطبيب مثلا؟ من يجيب؟

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

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

لا تستغرب أن تكون قاعدة البيانات التي تقوم بتصميمها بأكثر من لغة -- قد نتحدث عن هذا يوما ما -- موضوع متقدم جدا جدا.

بناء على هذا القانون سنضيف حقلاً جديدا لكل جدول من الجداول الثلاثة السابقة:

رقم المريض
رقم الطبيب
رقم العيادة

صدقوني سأغضب بشدة من أي قارىء متابع معنا يقول لي سأجعل هذا الحقل Auto Number في الآكسس أو Identity في SQL !!!

هذا خطأ فادح جدا جدا جدا، حذار من إستخدام Auto Number في الحقل الرئيسي للجدول، هذا للمراهقين في تصميم قواعد البيانات وليس للمحترفين.. هذا إستخداماته محدودة جدا مسموح بها في الجداول المساعدة Help Tables والتي سنتحدث عنها لاحقا.

ماذا لدينا الآن؟

لدينا ثلاثة جداول فيها عدد صغير من الحقول وفي كل جدول حقل رئيسي أو ما يسمى إصطلاحا المفتاح الرئيسي أو المفتاح الأساسي.

نستكمل بإذن الحق تبارك وتعالى.

تحياتي،،،



مرحبا،،،

الآن صفحة جديدة بيضاء (في الدفتر) -- في منتصف الصفحة -- قاعدة بيانات الآباء والأبناء.

دعك من المستوصف الآن.

تريد ان تنشأ قاعدة بيانات توضح الأباء والأبناء في عائلتك. حسب قوانين CODD لدينا جدولين وكل جدول فيه مفتاح رئيسي.

دعنا نتفق ...

عندما أقول برامج قواعد بيانات فأنا أقصد آكسس وSQL وأوراكل وغيرها
عندما أقول قاعدة بيانات فأنا أقصد تلك التي تقوم أنت بتصميمها بإستخدامك لأي من البرامج المشار إليها أعلاه.

من يجيبني على السؤال التالي: هل قوانين CODD للبرامج أم للقواعد؟ بمعنى آخر هل هي لشركة ميكروسوفت حتى تعطينا برنامج آكسس جيد أم هذه القوانين لك أنت عند تصميمك لقاعدة البيانات؟

الجواب: للإثنين معاً !!!!!!!!!!!

ماذا يعني هذا؟ ببساطة وركز معي بشدة أنك عندما تضع حقلا أساسيا في جدول ما ثم تدخل قيمة متشابهة لسجلين مختلفين لن يسمح لك برنامج قواعد البيانات وسيظهر لك خطأ ينبهك أن مستر CODD سيزعل منك !!!!

لدينا في هذا التمرين جدولين واحد للأباء والآخر للأبناء:

جدول الآباء:
رقم الأب -- حقل رئيسي
إسم الأب
عمر الأب

جدول الأبناء:
رقم الإبن -- حقل رئيسي
إسم الإبن
عمر الإبن

الآن في صفحة جديدة إرسم جدولا بالمسطرة وقلم الرصاص (رجاء للمرة المليون على الورق) حتى نفهم سويا، وسمه جدول الآباء وأدخل البيانات التالية وهي مرتبة رقم الأب إسم الأب عمر الأب

452 خالد سعيد أحمد 32
567 سمير حسين الأحمدي 63
901 محمد أحمد عبد القادر 36

أجب عن الأسئلة التالية:

ماذا يحدث عند إضافة سجل جديد في جدول الآباء بالبيانات التالية:
871 سمير حسين الأحمدي 63 --- ماذا يحدث؟
901 سامي مطلق الدوسري 51 -- ماذا يحدث؟

من لم يعرف الإجابة أقترح عليه أن يبدأ مرحلة إعادة القراءة مرة أخرى بتركيز أعلى

نجيب فيما بعد بإذن الحق تبارك وتعالى.

تحياتي،،،

مرحبا،،،

ماذا يحدث عند إضافة سجل جديد في جدول الآباء بالبيانات التالية:
871 سمير حسين الأحمدي 63 --- ماذا يحدث؟ لن يحدث شيئا سجل جديد لا غبار عليه حتى وإن تشابه الإسم (وهو خطأ أيضا) لكنه غير مهم حاليا -- لا تنس الهدف وهو تماسك قاعدة البيانات.

901 سامي مطلق الدوسري 51 -- ماذا يحدث؟ هذا يخالف أحد قوانين مخترع قواعد البيانات العلاقية السيد CODD والذي ينص على منع بل إستحالة تكرار المفتاح الأساسي لأكثر من سجل واحد. السؤال البديهي لماذا يمنع من تكرار 901 في سجلين مختلفين؟ أو بعبارة أخرى، لماذا لا نستطيع تكرار بيانات المفتاح الأساسي؟ والآن نبدأ في التركيز مرة أخرى. ملاحظة -- إذا وجدت برنامج قاعدة بيانات (وانا أشك في هذا) يسمح للك بإضافة مثل هذا السجل أو يسمح لك بتكرار رقم الأب 901 فهذا البرنامج لا يمت إلى عائلة برامج قواعد البيانات بأي صلة، لكن إذا استخدمت برنامجا قديما صمم قبل 1970 ميلادية فقطعا سيسمح لك لأن كل برامج قواعد البيانات قبل هذا التاريخ كانت Flat.

يستكمل معي ذووي الأقلام والبريات والذين كتبوا فقط !!!

صحيح أن CODD نظم لنا قاعدة البيانات من خلال فصل الوحدات الأساسية في جداول مختلفة ولكنه خلق لنا مشاكل جمة لتصميم القاعدة، تذكرون طبعاً أن تصميم قواعد البيانات العلاقية أصعب وأعقد من تلك المسطحة Flat.

ما هو الهدف من قاعدة بيانات الآباء والأبناء؟
هو الحصول على تقرير أساسي يتم فيه سرد الأبناء لكل أب نختاره، فمثلا عند إختيار سامي مطلق الدوسري من قاعدة البيانات تقوم القاعدة بسرد كل الأبناء اللذين يقولون لسامي (بابا).

من يشعر معي أنه يوجد هناك مشكلة الآن؟ حيث أن كافة الأبناء موجودون في جدول مختلف .... ممممممممممم --- من هنا جاءت كلمة قواعد البيانات العلاقية، اي أن يوجد علاقة ما بين الجداول وهذا قانون من قوانين CODD.

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

كلام كبير، ما يعني؟ للحصول على الأبناء التابعين لأب ما يتطلب الأمر إنشاء (علاقة) بين الجدولين.

في جدول الآباء الحقول التالية:
رقم الأب -- حقل رئيسي
إسم الأب
عمر الأب

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

لنفترض أنه يوجد في جدول الأبناء 8 سجلات، كيف نعرف أن السجل الثالث هو أحد أبناء خالد سعيد أحمد الموجود في سجل الآباء؟؟

نعود ونسأل مستر CODD، بعد تفكير عميق وبضعة فناجين من القهوة يرد علينا هذا العالم ويقول لنا ------ ركززززززززززززززززززززززززززززز --- إستخدم (الحقل الغريب)؟؟؟

سأسألكم عن ما هو الحقل الغريب فيما بعد، فلنركز جيدا ولنستغل الدفتر الذي أمامنا وأقلام الرصاص للكتابة والتركيز -- لا تنسوا أن الهدف تماسك قاعدة البيانات وليس الحقول والإستعلامات، نحن في مرحلة مبكرة من التصميم.

ممممممممم

الحقل الغريب Foreign Field
ماهو؟

الحقل الغريب هو:
حقل لا يمت للجدول الذي ينشأ فيه بأية صلة -- لأنه غريب عن هذا الجدول؟
لا يمكن أن يكون مفتاحا رئيسيا في الجدول الذي ينشأ فيه
يجب أن يوجد ما يشابهه في جدول آخر
يجب أن يكون مشابها ومطابقا ونسخة مقلدة بالظبط من الحقل الأساسي في الجدول الآخر

وااااو صداع.... تعالوا نبسط هذه الجمل أكثر وبروية وبهداوة ومع فنجان قهوة وبالكتابة وليس القراءة!!

أين المشكلة هل هي في جدول الآباء أم في جدول الأبناء؟
الإستنتاج المنطقي أنها في جدول الأبناء لماذا؟
لأن جدول الأبناء يسمى جدولا غير مستقر لماذا؟ لآنه يحتوي على بينات متماسكة وغير منتمية، ماذا يعني هذا؟ لنفكر قليلا.

في جدول الأبناء 8 سجلات، إذا نظرنا إلى هذا الجدول نرى أنه متماسك ومتناغم ولكن تكمن مشكلته في انه لا يدلنا على من أب هذا وأب هذا.

طالما أن المشكلة في جدول الأبناء إذا الحقل الغريب يجب أن يكون في جدول الأبناء؟

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

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

من أين نأتي بهذا الحقل الغريب؟ الجواب هو أن الحقل الغريب موجود دائما وأبدا في الجدول الذي تريد أن تنشأ معه العلاقة.

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

هذا الحقل هو رقم الأب من جدول الآباء.

عند إستلاف رقم الأب من جدول الآباء ووضعه كنسخة مطابقة في جدول الأبناء، يصبح هذا الحقل أساسيا في جدول الآباء وغريبا في جدول الأبناء.

نصف موضوع التماسك يدور ويلف حول الحقل الغريب.

أصبح جدول الأبناء كما يلي:
رقم الإبن -- حقل رئيسي
إسم الإبن
عمر الإبن
رقم الأب

لنعد إلى شروط مستر CODD الحقل الغريب يجب أن يكون مطايقا ونسخة مشابهة لتلك الموجودة في الجدول الأساسي، أي لو كان رقم الأب في جدول الآباء عبارة عن 6 خانات وعلى هيئة أرقام فيجب أن يكون كذلك في جدول الأبناء.

لاحظ الآن وبتركيز شديد أنك لو قمت بإضافة 8 سجلات في جدول الأبناء انك ستواجه حقلا غريبا موجودا في جدول الأبناء ويتوجب عليك أن تضع فيه بيانات حيث لا يمكن أن يكون فارغا.

لنركز...

ما هو تعريف المفتاح الرئيسي؟ --- أين المجيبون؟ الووووو
أحد شروط المفتاح الرئيسي هو الآ يكون بدون قيمة صح؟ قلنا هذا سابقا، أي أنه في جدول الآباء لا يوجد أي سجل بدون رقم للأب. إتفقنا.

قانون للسيد CODD:
لا يمكن للحقل الغريب أن يكون فارغاً، من يقول لي لماذا؟
لا يمكن للحقل الغريب أن يكون مفتاحا رئيسيا، من يقول لي لماذا؟
محتويات الحقل الغريب يجب أن تطابق بيانات موجودة أصلا في الجدول الذي تم الإستعارة منه. لماذا؟

وين الصاحيين معي؟؟؟!!! هيا للأجوبة على الأسئلة الثلاثة السابقة:

فرضا تركنا السجل الرابع في جدول الأبناء بدون استكمال الحقل الغريب، ما هي المشكلة؟ المشكلة ان هذا الإبن لن يتم معرفه أباه ومن هنا جاء المنع بترك بيانات الحقل الغريب فارغة، بعبارة أخرى لن يسمح لك بتركه فارغا، لابد من إدخال قيمة ما.

لماذا لا يكون الحقل الغريب (رقم الأب) في جدول الأبناء مفتاحا رئيسيا؟؟؟ هيا عاد هذي سهلة شباب، لأن من خصائص المفتاح الرئيسي هو عدم التكرار، فإذا جعلنا (رقم الأب) في جدول الأبناءمفتاحا رئيسيا فلن نستطيع تكرار الرقم 901 وبهذا لن نستطيع أن نجعل لمحمد أحمد عبد القادر أكثر من إبن واحد، واضحة؟

السؤال الثالث سخيف؟ لا بد ان تستطيع الإجابة عليه!!! تغيير طول الحقل الغريب عما هو في الجدول الذي أستعير منه سيخلق مئات المشاكل.

==============

لنعيد شرح الموضوع برمته مرة أخرى!!! وسأسمح الآن بإستخدام الآكسس، رجاء فقط يستمر معنا الذين يكتبون.

إفتح الآكسس وقم بإنشاء قاعدة بيانات جديدة وسمها Family إتفقنا ساببقا أن كل التسميات باللغة الإنجليزية.

قم بأنشاء جدول إسمه Fathers وبه الحقول التالية:
FatherNum-- Text - 4 -- مفتاح رئيسي من نوع نص وبطول 4 خانات
FatherName-Text
FatherAge--Number

نشط الحقل FatherNum وإجعله Primary Key أي مفتاحا رئيسيا بالضغط على المفتاح بشريط الأدوات، إحفظ الجدول وأغلقه.

قم بأنشاء جدول إسمه Sons وبه الحقول التالية:
SonNum-- Number -- مفتاح رئيسي
SonName-Text
SonAge--Numbe
FatherNum -- Number -- هذا هو الحقل الغريب

نشط الحقل SonNum وإجعله Primary Key أي مفتاحا رئيسيا بالضغط على المفتاح بشريط الأدوات، إحفظ الجدول وأغلقه.

من يقول لي ما هو الخطأ الفادح في تصميم الجدولين السابقيين؟؟؟!!
فكر قبل قراءة الجواب؟؟؟

الجواب هو الحقل الغريب FatherNum في جدول الأبناء نوعه Number بينما في الجدول الذي أستعير منه هو Text بطول 4 خانات وهذا مخالف للأسس والقوانين.

عد مرة أخرى وقم بتعديل الحقل الغريب في جدول الأبناء ليصبح على شكل Text وبطول 4 خانات.

الآن إفتح جدول الأباء وادخل البيانات التالية في السجل الأول:
أدخل الإسم فقط: محمد أحمد عبد الله ثم إنتقل للسجل الثاني، ماذا حدث؟؟ نعم ظهرت رسالة خطأ، ما هي هذه الرسالة ولماذا ظهرت؟ مين يجيب؟؟؟

هذا أحد قوانين المفتاح الرئيسي: لا يمكن للمفتاح الرئيسي أن يكون قيمة فارغة، لابد من وضع قيمة ما فيه.

إسمح السجل الأول وقم بإضافة البيانات التالية:
3000 محمد سعيد أحمد 42
4000 خالد عبد الله الصيعري 61
5000 سعيد محمد المالكي 32
6000 طلال عبد العزيز المسبحي 29
7000 سمير خالد الجار الله 46
أحفظ الجدول.

إفتح جدول لآبناء وأدخل السجل التالي:
9400 خالد 9 -- إترك الحقل الغريب فارغاً

ماذا حدث؟ مين يجيييييييييييييييييب؟؟؟ واااووووووووو لم يحدث شيء، ولكن هذا ينافي قواعد السيد CODD حيث يقول ان هناك شروط:
لا يمكن للحقل الغريب أن يكون فارغا
يجب أن يحتوي الحقل الغريب على قيمة موجودة في الجدول الذي أستعير منه

ولكن لم يظهر خطأ، لماذا؟؟

الجواب: لأننا لم نقم حتى تاريخه بإنشاء العلاقة بين الجدولين.

نفعل هذا بعد بضعة دقائق بإذن الحق تبارك وتعالى.

تحياتي،،،

مرحبا،،،

في هذه الحلقة سأخرج عن الموضوع برمته قليلاً ونعود إليه في الحلقة التالية بإذن الله.

لماذا أقوم بهذا الجهد؟ السبب وبساطة شديدة هو الحصول على أكبر كم من الدعوات الصادقة في هذه الليالي الفضيلة. لا اطمح ولا ابحث عن شيء آخر.

وقد توقعت أن أجد الآلاف ممن يقرأون هذا الموضوع وهذا لم يتحقق بعد بالنظر إلى عدد القراء، ورغبة مني في أرفع هذا الرقم إلى الآلاف بل عشرات الآلاف إن أمكن هذا للحصول على دعوات صادقة أكثر فقد قررت بعد الإتكال على الحق تبارك وتعالى أن اجعل مسابقة لكم لها جائزة قيمة آمل أن تنال إعجابكم.

وحيث ن الوقت يداهمني حتى 15 أو 20 رمضان سأحاول أن نهي هذه الحلقات بأسرع وقت ممكن دون الإخلال بقيمتها أو محتوياتها.

ماهي المسابقة؟ وأتمنى من القائمين على هذا الموقع المساعدة في تنظيمها ووضع الشروط المناسبة لها.

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

الجائزة هي واحدة لمشارك وأخرى لمشاركة:
حجز نطاق بإسم الفائز والفائزة حسب اختيارهم (ولا يكون محجوزا قبلهم)
إستضافة النطاق والموقع على الخادم الرئيسي الخاص بشركتي في الولايات المتحدة لمدة سنتين
سعة تخزينية للموقع 350 ميجا بايت
عدد غير محدود من قواعد البيانات Access بطاقة تخزينية من ضمن 350 ميجا بايت
عدد غير محدود من قواعد البيانات MySQL بطاقة تخزينية من ضمن 350 ميجا بايت
سعة تخزينية بطاقة 50 ميجا بايت لخادم قواعد بيانات Microsoft SQL 2000
المساعدة في إنشاء الموقع مع المساعدة بكيفية ربطه بالآكسس وال SQL
منتدي مشابه لهذا المنتدى طبعا لأية مواضيع أخرى يختارها الفائز والفائزة
عدد غير محدود من صناديق البريد الإلكتروني
قائمتين للتحكم واحدة بالمنتدى والأخرى بالخادم
المساعدة في تصميم الموقع (بدون إخلال بالدين والتقاليد والعادات والأعراف والقوانين)
الخادم من النوع المتقدم جدا أي انه يتقبل كل تطبيقات CGI, FrontPage, Visual Interdev, Visual .Net وما الى ذلك.
الكثير من الخدمات الأخرى على الخادم

كل ما سبق (مجــــــــــــــــــــــــــــــــــــــــــــــانا) لأفضل تصميم من رجل وأفضل تصميم من إمرأة. ولكن لمدة سنتين فقط. بعد إنقضاء السنتين يقفل الموقع ويلغى كل شيء إلا إذا إرتأى صاحب الجائزة الإكمال بسعر 275 ريال شهريا. بإختصار فإن كل جائزة عينية تصل قيمتها إلى 275 × 24 شهر اي 6600 ريال سعودي أي أن الجائزتين بقيمة 13200 ريال سعودي.

ليس هذا فقط، بل أن الفائز والفائزة سأتيح لهم المشاركة من منازلهم في واحد من أضخم مشاريع قواعد البيانات في المملكة العربية السعودية، بل يمكنهم المشاركة في أية مشاريع لدينا ونتفق معهم على التكاليف المدفوعة لهم مقابل عملهم.

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

يمكن تصميم القاعدة إما بالآكسس أو SQL 2000

الآن ولإحقاق الحق وخشية أن يبدأ الهواة بالإتصال بمحترفي قواعد البيانات ليقوموا بتصميمها نيابة عنهم فأقول:

ليس الهدف هو الفوز بالجائزة ؟؟؟ الهدف هو أن تتعلم قواعد البيانات وباالمقابل تدعو لي.
إن تصميم تصميم قاعدة البيانات من قبل محترف بإسمك أو نيابة عنك هو ظلم للآخرين وإجحاف بحقهم وبحقهن وعليه وعليها أن يتقيا الله.

أن يتيح المحترفون الفرصة للآخرين لالقراءة والسؤال والفهم وهذا هو الهدف من الجائزتين، ولدي القدرة بمشيئة الله أن أعرف من تصميم القاعدة أن من قام بتصميمها هو من المحترفين أو المبيدئين.

إضافة إلى ما سبق سيتم توجهيه 30 سؤالا شفويا بإستخدام الماسنجر مثلا للمشاركين للتأكد من فهمهم للموضوع.

آخر موعد لإستقبال المشاركات هو نهاية شوال وتعلن الجوائز في نهاية ذي الحجة أو قبله حسب عدد المشاركات.

لتعميق المصداقية فإن الجائزة لن تنحى إلا إذا لم يشترك أحد !!! أي انه لو قام شخص واحد فقط بتقديم القاعدة سيفوز بغض النظر عن تصميمه أو تصميمها !!!

الرجاء ملاحظة أنه سيتم أخذ أول تصميم مرسل من قبل المشارك، أي لو قام بالتعديل وإعادة الآرسال فلن يلتفت له حتى لا يكون لدينا عدد ضخم لا نستطيع معه مراجعة المشاركات وتقيمها، وعليه آمل إرسال المشاركات في 29 شوال حسب تقويم أم القرى حتى لا يضطر أحد للتعديل.

كافة المشاركات في المسابقة ترسل إلى info@arabservers.net ولا توضع هنا وسأقوم بمشيئة الله بإدراج إسمي الفائز والفائزة هنا.

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

أسئلة المسابقة والتصميم في الحلقة القادمة بمشيئة الله.

اللهم لا علم لا إلا ما علمتنا -- سبحانك يا خالق الذرة والخلية.

والله من وراء القصد.

تحياتي،،،

مرحبا،،،

لا يشترط أن تكون الأسماء معروفة ولن يحبذ جدا لأن العملية مع مرور الوقت تتفاقم في التعقيد خذ مثال أنني وأنت قمنا بتصميم قاعدة بيانات وأسماء الجداول فيها A,B,C,... وهكذا.

ماذا يحدث عندما تصبح قاعدة البيانات فيها 150 جدول؟
كيف نفرق بين الجداول واحد أسمه A30 والآخر T09 والحقول فيها G8 و U9 العملية ستتعقد بشكل كبير جدا.

ما هو الحل لمن لديه عوائق في اللغة الإنجليزية؟

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

الثانية: إحصل على قاموس عربي-إنجليزي وليس العكس بحيث تبعث في القاموس بإستخدام الحروف العربية للحصول على المعاني باللغة الإنجليزية.

الثالثة: إستخدم Microsoft Word الوورد الذي يأتي مع الأوفيس تحت قائمة الأدوات إختر اللغة ثم الترجمة، يمكنك إختيار الترجمة من اللغة العربية للإنجليزية ، بعد هذا إكتب كلمة (أب) مثلا ستحصل على ترجمتها Father، إفتح صفحة جديدة في الدفتر وأكتب الكلمة 10 أو 15 مرة وأحفظها عن ظهر قلب.

إذا فعلت هذا يوميا مع 10 كلمات فقط، في نهاية الشهر سيكون لديك ما يقارب 300 كلمة إنجليزية........... صدقني في اللغة الإنجليزية وللإستخدامات المتعددة جدا لن تحتاج لأكثر من 1500 كلمة -- لغة ضحلة جدا أي أنه في بضعة شهور سيكون لديك مجموعة ضخمة من الكلمات الإنجليزية التي تكفيك لكل إحتياجات البرمجة والتصميم بل صدقني ستكون بعدها قادرا على قراءة الكثير من الصفحات باللغة الإنجليزية.


تحياتي،،،

مرحبا،،

بعد ساعتين ونصف على العمل في أسئلة المسابقة، وجدت أن اقوم بتأجيل الأسئلة إلى الغد لأخذ مزيدا من الوقت. فعليه ستكون أسئلة المسابقة غدا بمشئية الحق تبارك وتعالى.

نعود إلى الآباء والأبناء، وتعالو سويا نكتشف بعض ملذات قواعد البيانات.

نلخص أولأ.

كل جدول في قاعدة البيانات وحدة مستقلة بذاتها وفيها حقل مميز يسمى المفتاح الأساسي أو الرئيسي وقد فعلنا هذا في الجدولين الأباء والأبناء وخصصنا كلا من حقل رقم الأب وحقل رقم الإبن كحقلين لمفتاحين أساسيين.

للمرة المليون: ما هو المفتح الأساسي؟
هو حقل يميز كل سجل في قاعدة البيانات ويمنع تكرار البيانات فيه لأكثر من سجل واحد ولا يسمح أن يكون فارغا.

إذا حاولت إضافة سجل في جدول الأباء أو الأبناء بدون إدخال قيمة في حقل المفتاح الرئيسي ستحصل على خطأ وسيمنعك البرنامج من الإكمال -- تذكروا أن هذا ليس في الآكسس فقط بل في كل قواعد البيانات في الدنيا. بعد عام 1970 طبعا.

ثم تحدثا عن الحقل الغريب. ما هو الحقل الغريب؟
هو حقل يتم إستعارته من جدول ما ويوضع في جدول آخر ولا يمكن أن يكون فارغا ويجب ان يكون مشابه لقيمة موجودة في الجدول الذي تم منه الإستعارة. سنشرح بتفصيل أكثر بعد قليل.

نعود إلى الجزئية التي شرحناها سابقا وهي لماذا أخذنا الحقل الغريب من جدول الآباء ووضعناه في جدول الأبناء وليس العكس؟ من يقول لي ماذا يحدث لو عكسنا أي أخذنا رقم الإبن من جدول الأبناء ووضعناه (كسلفة) وكحقل غريب في جدول الآباء؟ من يجيب؟ ماهي المشكلة في أن نعكس؟

للإجابة نعود للمشكلة الأساسية --- ركز -- فكر معي -- هل يمكن أن يكون لإبن أكثر من أب واحد؟ الإجابة لا. إذا أول إستنتاج هو أنه لا يوجد لأي أبن أكثر من أب واحد، ويمكن أن يكون للأب أكثر من إبن أو لا يكون لديه أبناء على الإطلاق.

الآن سأترك إجابة هذا السؤال لكم وأعود إليه مرة أخرى فيما بعد، السؤال مرة أخرى لماذا لا يكون الحقل الغريب هو مستعارا من جدول الأبناء ويوضع في جدول الآباء؟ أي عكس ما فعلنا حتى الآن.

وصلنا أنه يوجد حقل غريب في جدول الأبناء إسمه FatherNum تم إستعارته من جدول الآباء، وقلنا أن أحد شروط قواعد البيانات هو أن الحقل الغريب لا يمكن أن يكون فارغا ومع ذلك عندما قمنا بإضافة السجل:

9400 خالد 9 -- إترك الحقل الغريب فارغاً

إلى جدول الأبناء لم يحدث أية مشاكل لماذا؟ لأن قاعدة البيانات حتى الآن لا تعرف أن هناك علاقة بين الجدولين، السؤال البديهي، كيف ننشىء هذه العلاقة.

قبل أن تستمر إحذف كافة السجلات من جدول الأبناء؟!! أين الأذكياء؟ من يقول لماذا؟

قاعدة عامة: ركز -- إكتب - إحفظ -- تأكد دائما أن الجداول كلها فارغة بدون سجلات قبل أن تقوم بإنشاء العلاقات.

لا تمسح بيانات جدول الآباء حتى وإن كان هذا يعارض القاعدة السابقة !! سنقول فيما بعد لماذا؟

لدينا الآن جدولين جدول الآباء وفيه خمس سجلات لأباء مختلفين، وجدول الأبناء ولا يوجد فيه أية بيانات.

أقفل الجدولين ثم من قائمة Tools (أدوات) إختر Relationships (علاقات).

سيظهر لك صفحة في الخلفية وقائمة فيها أسمي الجدولين :
نشط الجدول الأول واضغط زر إضافة Add
نشط الجدول الثاني واضغط زر إضافة Add
إضغط زر اغلاق أو اقفال Close

كبر الصفحة...

ماذا ترى.. جدولين في صندوقين وكل صندوق يحتوي على الحقول التي قمت بإنشائها.
إضغط على حقل FatherNum في جدول الآباء وإستمر بالضغط ثم إسحب حتى تصل إلى FatherNum في جدول الأبناء ثم إترك الماوس... ستظهر لك صفحة جميلة.

أريدك عزيزي القارىء أن تستمر بالنظر إلى هذه الصفحة لعدة دقائق وتقرأ كل كلمة فيها بهدوء وروية.

سأعود إليك بعد قليل.

تحياتي،،،

مرحبا،،،

ماذا تسمي الأبن الذي فقد أباه -------- صح --- يتيم !!!

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

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

ماذا نرى في هذه النافذة؟

قائمتين مظللتين لا تستطيع تغيرهما واحدة فيها Fathers أي جدول الآباء والأخرى Sons أي جدول الأبناء --- تحتهما مباشرة قائمة إذا ضغت عليها ترى سرد لكافة حقول كل جدول.

في الدفتر الذي بين يديك اكتب الجملة الموجودة في مربع الإختيار الأول وهي غير منشطة وهي (فرض التكامل المرجعي) وتذكر أن كلمة تكامل هي تماسك وهي ما شرحناه سابقا Integrity

فقط اكتب الجملة دون تنشيط للمربع ثم أضغط على زر إنشاء أو موافق.

ما الذي حدث --- تم رسم خط بين الجدولين --- هذا الخط يعني أن هناك علاقة ما بين الجدولين.

أقفل صفحة العلاقات وأجب بنعم اذا طلب منك الحفظ.

افتح جدول الأبناء وادخل البيانات التالية:

9500 خالد 12 --- إترك الحقل الغريب فارغا وانتقل لسجل جديد -- ماذا حدث؟

لم يحدث شيء !!!!!!!!!! --- لماذا؟؟

الآن أدخل السجل التالي:
7500 سعيد 10 -- وفي الحقل الغريب ادخل 1500 ثم انتقل للسجل الثالث
ماذا حدث؟ ظهر خطأ؟؟؟؟؟ لماااااااااااااااااااااااذا؟؟؟؟

في الحالة الأولى عند ترك الحقل الغريب فارغا سمح لك البرنامج بالإضافة ولكن هذا يتنافى مع قوانين قواعد البيانات -- تسمح بعض برامج قواعد البيانات بترك الحقل الغريب فارغا لإفتراض امكانية عدم معرفتك بالقيمة المطلوب إدخالها --- ولكن لحظة من فضلك هذا خلل خطير في تماسك وتكامل قاعدة البيانات، لماذ؟ لأن هذا الإبن لن يعرف أباه أبدا وبهذا ينشأ لديك سجل يتيم وهذا ممنوع.

في المحاولة الثانية حدث خطأ لماذا؟ لأننا أدخلنا قيمة 1500 في الحقل الغريب وهذه القيمة غير موجودة لأي أب في جدول الآباء وهذا ممنوع في الحقول الغريبة، هل تذكر عندما قلنا أن القيمة في الحقل الغريب يجب أن تكون قيمة موجودة في الجدول الذي تم الإستعارة منه؟!!

ارقام الآباء في جدول الآباء هي 3000 4000 5000 6000 7000 فقط، إذا أدخلت في جدول الأبناء أي قيمة غير القيم الخمس السابقة فلن تقبل القيمة --- جرب أية أرقام تريدها إستمر بالمحاولة.... لن تستطيع ولن يتم إدخال السجل إلا بقيمة من الخمس المذكورة، لماذا؟ لسبب بسيط جدا أنه هذه هي الطريقة التي يتعرف بها البرنامج على الآباء، فإذا أردت معرفة أب خالد تأخذ الرقم من الحقل الغريب وتذهب إلى جدول الآباء وهناك تبحث بهذا الرقم عن صاحبه للحصول على الأب.

والعكس صحيح اذا اردنا أن نعرف من هم ابناء اي اب نبحث عن كافة الابناء الذين يحملون رقم الاب في الحقل الغريب.

تحياتي،،،

مرحبا،،،

صح --- ما قاله الأخوة صح -- لن يظهر الخطأ، تعالوا نصحح ونرتب أفكارنا سويا...

وتعالو بنا أيضا نجيب على الأسئلة التي تركناها...

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

لقد قمت بحذف العلاقة بين الجدولين -- سنقوم بإنشائها مرة أخرى بعد قليل.

تركنا سؤالا في غاية الأهمية ... لماذا قمنا بإستعارة المفتاح الأساسي من جدول الآباء ووضعناه في جدول الأبناء كحقل غريب؟ لماذا لم نفعل العكس؟

تعالو نفعل العكس ونرى ماذا يحدث للإجابة على هذا السؤال المهم والمهم جدا، لا تنسوا أن للأب إبن أو اكثر أو لا أطفال، بينما للإبن أب واحد فقط.

قم بحذف الحقل الغريب FatherNum من جدول الأبناء، قم بإضافة حقل غريب في جدول الآباء وهو SonNum تأكد أن الحقل SonNum في كلا الجدولين هو نص Text بطول 3 خانات.

افتح جدول الآباء وتعال معي نضيف طفلين لهذا الأب:
9000 أحمد مبارك الحربي 42
لاحظ أن الحقل الغريب الآن هو رقم الإبن --- لنفترض أن معلومات الطفلين هي
888 سعيد 7
777 طارق 9

بمعنى أنه سنضع في الحقل الغريب الرقم 888 لإضافة الطفل الأول إلى الأب أحمد ولا مشكلة في هذا-- قم بوضع 888 لإستكمال إدخال بيانات اول طفل لأحمد

نريد إضافة الإبن الثاني !!!!!!!!! ووووووووووووووو -- بدأت المشاكل صح؟
مشاكل بالكيلو لا عد لها ولا حساب:

أولها نسف كل قوانين CODD وكل أسس قواعد البيانات العلاقية، انت الآن مضطر إلى تكرار بيانات وهذا ممنوع لأن أحد قوانين CODD هو عدم إخال نفس البيانات أكثر من مرة واحدة، ليس هذا فقط

بل لن تستطيع عمل هذا على الإطلاق من يجيب لماذا؟
صح --- لأنك مضطر إلى إدخال سجل برقم أب متكرر وهذا يتنافى مع قواعد المفتاح الرئيسي وعليه فإن الإبن ذو الرقم 777 لن يضاف إطلاقا وبهذا لن نستطيع أن نضيف أكثر من إبن واحد لكل أب وهذا غير منطقي.

قد يأتي من يقول غير حقل رقم الأب ولا تجعله مفتاحا رئيسا وهذا طبعا مصيبة لأنه يتنافى مع قواعد CODD التي تشترط وجود مفتاح أساسي في كل جدول.

إترك السجل 9000 في جدول الآباء مع ابنه 888 وألغي ادخال 777 بالضغط على ESC في لوحة المفاتيح.

إذا ....

إستعارة الحقل من جدول الأبناء خطأ...

قم بحذف الحقل SonNum من جدول الآباء، قم بإضافة حقل غريب في جدول الأبناء FatherNum وتأكد انه نص Text بطول 4 خانات.

اضغط أدوات Tools ثم علاقات Relationships ثم أسحب الحقل FatherNum من جدول الآباء وألقه على FatherNum في جدول الأبناء لنعود إلى نافذة تحرير العلاقات.

واضح أن معظم من معي في هذه الدروس لديهم آكسس بالعربي (وهذا مصيبة أخرى) ولكني سأتجاوزها الآن ونعود إليها فيما بعد !!!!

تأكد أن الحقلين الموجودين هما FatherNum من كلا الجدولين، إن لم يكونا فقم بإختيارهما،، تعالو نتأمل في هذه النافذة (تحرير العلاقات)

يوجد أربعة أزار --- يهمنا الزر نوع الربط Join Type إضغط على هذا الزر وتعال نقرأ ونفهم سويا...

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

الإختيار الثاني: أظهر القيمة من الجدول الأول حتى وإن لم تكن موجودة في الجدول الثاني وأظهر أيضا ما تشابه... بمعنى أظهر الآباء الذين لديهم أبناء وكذلك الآباء الذين ليس لديهم أبناء

الإختيار الثالث: أظهر الآباء الذين لديهم أبناء وكذلك الأبناء بدون آباء

مستر CODD عمل لنا زحمة --- صح؟

لا تفقد الهدف، الهدف هو ليس إنشاء قاعدة بيانات !!! الهدف هو كيف نصنع قاعدة بيانات متماسكة ومتكاملة.

إختر الإختيار الأول وخزن وأخرج من نافذة العلاقات.

في جدول الأبناء أضف السجلات التالية:
100 خالد 7 3000
110 محمد 4 3000
120 سعيد 9 4000
130 طارق 12 4000
140 أحمد 5 5000
150 سمير 17 5000
160 فهد 1 5000
170 مشاري 3 9000
180 صالح 9 -- إترك الحقل الغريب فارغا -- هذا يتيم بلغة قواعد البيانات
190 ناصر 11 -- إترك الحقل الغريب فارغا

تعالو بنا نقفز عذة دروس إلى الأمام لتوضيح واحدة من أهم قوانين العلاقات في قواعد البيانات ونعود لمكاننا مرة أخرى

اقفل الجدول وإنتقل إلى الإستعلامات Queries
أنشأ إستعلام جديد بدون إستخدام المعالج --- كل المعالجات في الآكسس للمراهقين والمقلدين وليس للمحترفين !!!

نشط كل جدول على حدة وإضغط إضافة ثم أغلق النافذة.

لاحظ أن العلاقة ما زالت موجودة بين الجدولين

انقر نقرا مزدوجا على الحقول التالية بالترتيب

من جدول الآباء Fathers
FatherNum
FatherName

من جدول الأبناء Sons
SonNum
SonName
FatherNum

الآن ركز --- إنقر نقرا مزدوجا على الخط المرسوم بين الجدولين ستظر لك نافذة عنوانها (خصائص الرابط)

هل ترى الإختيارات الثلاثة --- نعم هي نفسها التي رأيناها في نافذة العلاقات.

الآن جاء دوري للإستمتاع بفنجان القهوة الذي بين يدي وجاء وقتك أن تتعذب وتتألم،

أنا سأستمتع بوقتي وبقهوتي وأنت ستقوم بتنفيذ الإستعلام ثلاث مرات، كل مرة تختار خاصية مختلفة من خصائص الرابط ومن ثم تقول لي ما هي الفروق.

أريدك أن تصرف عدة دقائق على هذا الإستعلام وترى الفروق بين الخصائص

لنعود إلى CODD، الإختيارات أو الخصائص الثلاث السابقة تسمي

Inner Join الربط الداخلي
Left Outer Join الربط الخارجي من اليسار
Right Outer Join الربط الخارجي من اليمين

طبعا ليس لها علاقة أن يظهر الجدول سواء في اليمين أو الشمال أوكي؟؟؟

لاحظ أنه يضاف سهم صغير عند تغيير خصائص الرابط--- من يشرح لي معنى هذا السهم؟

بعد أن تتأمل كثير وتفكر أكثر في الإختلافات بين الخصائص الثلاثة أريدك في الإستعلام أن تقوم بتنشيط الخط الواصل بين الجدولين في الإستعلام ومن ثم تقوم بحذفه بالضغط على زر Delete في لوحة المفاتيح --- نفذ الإستعلام وقل لي ماذا حدث !!! كيف حصلنا على 60 سجل وااااااااااااااااااااو --- سأفرح كثيرا إن أجاب أحد على هذا السؤال.

إفتح الدفتر وسجل بلغتك وبطريقتك كل ما قلناه هنا..

نعود بعد قليل بمشيئة الحق تبارك وتعالى..

تحياتي،،،

مرحبا،،،

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

إحفظ التعديلات

ثم إنشأ إستعلام جديد بدون إستخدام المعالج -- أضف جدولي الآباء والأبناء، ماذا تلاحظ؟

مع أننا قد قمنا بإلغاء العلاقة تماما ونهائيا ما زال آكسس يضع العلاقة؟ لماذا؟ من يجيب؟

لسبب بسيط جدا،، لأننا جميعا نتبع القواعد الصحيحة والسليمة لبناء قواعد البيانات من خلال إتباع كل القوانين يساعدنا الآكسس وغيره من البرامج على إقتراح شكل العلاقات بين الجداول. حيث استنتج الآكسس اننا نريد ربط المفتاح الرئيس من جدول الآباء بالحقل الغريب في جدول الأبناء. ولأن الحقل في جدول الأباء هو مفتاح أساسي (اي واحد) وفي الحقل الغريب ليس مفتاح أساسي (اي يمكن التكرار) أي متعدد.

أقفل الإستعلام بدون حفظ وعد مرة أخرى لصفحة العلاقات وتعال نتأمل في المزيد.

اسحب مرة أخرى FatherNum من جدول الآباء وأسقطه على FatherNum في جدول الأبناء لفتح صفحة تحرير العلاقات.

راقب مرة أخرى مربع (فرض التكامل المرجعي) وقطعا هي ترجمة سخيفة جدا، لكن ليس هذا موضوعنا، لنفهمها أولا ثم نسميها ما نشاء.

وراقب معي أيضا في أسفل الصفحة جملة نوع العلاقة: رأس بأطراف (طبعا ترجمة أسخف من السابقة) بل هي ترجمة سيئة للغاية وتسبب الكثير من الصداع.

اسمحو لي أن اتجرأ على شركة ميكروسوفت ونلغي سويا التعبير (رأس بأطراف) ونستبدله بجملة (واحد إلى متعدد) وهي أقرب من وجهة نظري إلى الترجمة الحقيقية One to Many

ماذا تعني هذه، أولا تعني أن شكل الرابط بين الجدولين هو (واحد من جدول) و (متعدد من جدول آخر) وهذا هو الوضع لدينا..............

لكل أب واحد لدينا عدة أبناء متعددين

وهذا هو أشهر نوع من انواع العلاقات والروابط بين الجداول وأكثرها إستخداما وأكثرها شيوعا:

لكل عميل في البنك عدة حسابات
لكل طالب في الفصل عدة مواد دراسية
لكل حاسب آلي عدة خصائص مثل الذاكرة والقرص الصلب وغيره
لكل مصحف واحد عدة سور
لكل سورة في القرآن العظيم عدة آيات
وهكذا دواليك...

عند إنشائك لعمارة او فيلا تبدأ بالهيكل الخرساني -- في قواعد البيانات هذا الهيكل هو الجداول في قاعدة البيانات ومجموع الجداول يسمى Skeleton او الهيكل لقاعدة البيانات، وحيث أن الهيكل الخرساني يتميز بالتماسك والتكامل مع بعضه البعض حيث تعمل الأعمدة والأساسات والكمرات مع بعضها البعض لشد المبنى بشكل متماسك كذلك تفعل العلاقات بين الجداول في تماسك وتكامل قاعدة البيانات.

اكثر العلاقات قوة وشدة وتكامل وتماسك هي (واحد إلى متعدد)

جملة (واحد إلى متعدد) تفرض علينا إستنتاج إن هناك علاقات أخرى وهي:
واحد إلى واحد
متعدد إلى متعدد

بالإستنتاج هناك ثلاث أنواع للعلاقات فقط بين الجداول كلها تساعد على تماسك وتكامل الجداول وبالتالي قاعدة البيانات --- مرة أخرى النماذج والتقارير والمايكرو مجرد عبث لا معنى لهم.

اقوى أنواع العلاقات بالترتيب هو:

واحد إلى متعدد One To Many
واحد إلى واحد One To One
متعدد إلى متعدد Many To Many

أما رأس بأطراف --- هههههههههههههه دعك منها

آمل أن نوع العلاقة واحد إلى متعدد مفهوم، سجل واحد في جدول ما مرتبط بعدة سجلات في جدول آخر، سجل واحد من جدول الآباء يمثل أب واحد مرتبط بعدة (متعدد) أبناء أو سجلات في جدول الأبناء.

لاحظ في النافذة التي أمامك أن نوع العلاقة لا تستطيع تغيره حسب إختيارك، لأن نوع العلاقة هو استنتاج لعملية التصميم وليس إختيار: مثال: هل أستطيع أن أغير شكل العلاقة بيني وبين أمي؟ أن أجعلها مثلا عمتي؟؟؟؟؟؟؟ لايمكن لأن العلاقة بيني وبينها إستنتاجية وليست إختيارا.

ماذا يعني هذا؟

يعني أن تغيير تركيبة قواعد البيانات يغير نوع العلاقة (إستنتاجا)

تعالوا نغير تركيبة قواعد البيانات:

اغلق صفحة تحرير العلاقات وصفحة العلاقات

افتح جدول الأبناء وقم بحذف كافة السجلات فيه لتلافي المشاكل في تجربتنا التالية.

افتح جدول الأبناء (بعد حذف السجلات) وقم بتنشيط الحقل الغريب، إجعل الحقل الغريب هو المفتاح الأساسي.

إحفظ التعديلات.

افتح صفحة العلاقات من أدوات ثم علاقات

انقر نقرا مذروجا على خط العلاقة --- أين المجيبون --- ماذا حدث؟

هل ترى نوع العلاقة؟؟؟ طبعا دعك من رأس برأس --- حسب إتفاقنا أصبحت واحد إلى واحد One To One لماذ؟؟

هيا عاد--------------------- أجب من فضلك!!!

الربط الآن يتم بين حقلين كليهما مفتاح أساسي وأحد شروط المفتاح الأساسي هي عدم التكرار وعدم التكرار يعني (واحـــــــــــــــد) فقط، وبالتالي في جدول الآباء لدينا أب واحد وفي جدول الأبناء لا نستطيع التكرار أي إبن واحد أي أن العلاقة أصبحت واحد لواحد أو واحد إلى واحد.

سؤال متقدم للمحترفين والأذكياء --- متى نحتاج إلى علاقة على شكل واحد إلى واحد؟ ما أهميتها؟ ذكروني فيما بعد لأساعدكم على الإجابة.

واحد إلى واحد هو ثاني أقوى أنواع العلاقات بين الجداول.

تعالو ننسف التصميم ونضرب بعرض الحائط بكل قوانين السيد CODD

قم بتعديل تصميم الجدولين بحيث لا يوجد اي مفتاح رئيسي في فيهما، لا تحذف الحقول، فقط لا تجعلها مفاتيح رئيسية.

أذهب إلى العلاقات وانقر بشكل مزدوج على الخط --- ما هو نوع العلاقة الآن؟

غير معرف أو Indeterminate او بالترجمة الفعلية (غير محدد)... ضاع الآكسس ولا يعرف ماذا تريد وأصبحت قاعدة البيانات هشة وقابلة للكسر في أي لحظة.

العلاقة (متعدد إلى متعدد) في غاية الأهمية وللأسف (صعبة شوي) وحتى لا نمزق افكارنا سنؤخرها إلى ما بعد فهم العلاقة الأساسية والأكثر أهمية وهي واحد إلى متعدد.

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

نستكمل مع العلاقات بعد قليل.

تحياتي،،،

مرحبا،،،

نستكمل ثم نعود للأخ (الحربي) في تصحيحه لنا من عدم ظهور الخطأ!!!

إلى أين وصلنا الآن؟؟؟ ماذا أمامنا؟ كل العملية تدور حول تماسك وتكامل قاعدة البيانات، هذا التماسك يتم من إنشاء جداول صحيحة حسب القوانين وكل جدول فيه مفتاح رئيسي، ويتم الربط (90%) بنوع واحد إلى متعدد ويوجد هناك ثلاثة خصائص لكل نوع (داخلي، خارجي يمين، وخارجي يسار).

Integrity هي التكامل والتماسك
Foriegn Field هو الحقل الغريب ومن خصائصه:
عدم إمكانية التكرار (الا إذا اردت الربط على شكل واحد إلى واحد)
ألا يكون مفتاحا رئيسيا (الا إذا اردت الربط على شكل واحد إلى واحد)
ألا يكون فارغا حتى لا يصبح السجل يتيما
أن تكون القيمة المدخلة فيه مشابهة لأحد الأقيام الموجودة في الجدول الآخر لا يصبح السجل يتيما.

نستمر وما زلنا نحاول ونجاهد أن نصمم قواعد بيانات (متكاملة) و (متماسكة).

لدينا في جدول الآباء 6 آباء حاليا أرقامهم 3000 4000 5000 6000 7000 9000
ولدينا في جدول الأبناء 10 أطفال أرقامهم 110 120 130 140 150 160 170 180 190

FatherNum هو رقم الأب وهو المفتاح الأساسي في جدول الآباء، وهو كذلك الحقل الغريب في جدول الأبناء.

SonNum خو رقم الإبن وهو المفتاح الأساسي في جدول الأبناء.

وهناك رابط (علاقة) بين الجدولين على شكل (واحد إلى متعدد) ولا يوجد فرض للتكامل المرجعي.

الآن إفتح أستعلام جديد وأضف الحقول التالية:
FatherNum
FatherName
SonNum
SonName
FatherNum

نفذ الإستعلام واكتب ما يلي في الدفتر عندك:
يوجد 6 آباء و 10 أطفال

أنشأ جدولا بالمسطرة والقلم وقم بنقل سجلات جدول الآباء حتى تستطيع أن تراها
أنشأ جدولا بالمسطرة والقلم وقم بنقل سجلات جدول الأبناء حتى تستطيع أن تراها

عندما ترى في الإستعلام خط بين جدولين فهو يعني الخاصية الأولى (اي نوع داخلي) وكما قلنا فالنوع الداخلي يظهر فقط السجلات من الجدولين التي تتشابه فيها الحقول المروبطة وعليه حصلنا على 4 آباء فقط ولم نحصل لا على الأب رقم 6000 ولا على الأب رقم 7000 لماذا؟

لأن هذين الأبوين ليس لهم أي أطفال وهذا منطقي ولكنه خطيييييييييييييييييير جدا من ناحية التماسك !!! لماذا؟؟؟

لأن الإستعلام الذي بين يدينا لا يعطينا كم أب لدينا؟ نحن لدينا 6 آباء والإستعلام يقول 4 وهذا فيه مخاطرة. خذ هذا المثال، لدينا 50 طالبا في الفصل كل منهم قام بتسجيل 3 مواد ما عدا 4 طلاب، عدم تسجيل الطلاب لأية مواد ممنوع، كيف نعرف انه يوجد طلاب بدون مواد؟

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

في الإستعلام غير خاصية الرابط إلى النوع الثالث وليس الثاني. لاحظ أن السهم يتجه إلى جدول الآباء.

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

كما تلاحظ لم نحصل أيضا لا على الأب 6000 ولا على الأب 7000 لأن السهم المشير لجدول الآباء يعني من لهم أبناء وهذين لا أبناء لهم، ولكن بالمقابل حصلنا على طفلين آخرين 180 و 190 بدون آباء !!!!!!!!!!!!!

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

عندما تحصل على سجلات في جدول المتعدد لا ترتبط بسجلات في جدول الواحد فلديك مصيبة في قاعدة البيانات وهي من اكثر الأخطاء شيوعا ومن أصعب المشاكل حلا.

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

كما تلاحظ فإن اليتمين لم يظهرا هنا رقم 180 و 190 وهما المشكلة الأساسية الآن في تماسك القاعدة.

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

تعالو نعيد هذه التجربة ثم نقول للأخ (أحمد الحربي) لماذا لم يظهر الخطأ (وهو طبعا ليس بسبب التكامل المرجعي) ... نوعا ما... سنشرح بعد قليل.

لدينا 6 أباء بأرقام 3000 4000 5000 6000 7000 9000

افتح جدول الأبناء وإذهب إلى الإبن رقم 180 الذي ليس له أب وأدخل أي قيمة في الحقل الغريب. سيقبل منك دون أي خطأ لماذ؟

نعود لمستر CODD
ماهي خصائص الحقل الغريب:

الآ يكون فارغا والا نتج سجل يتيم
أن يكون مشابها لقيمة في الحقل المربوط فيه أي أحد الأقيام التالية (3000 4000 5000 6000 7000 9000) اي قيمة أخرى غير هذه القيم الست تؤدي إلى سجل يتيم لأن الربط يتم بتشابه القيمة بين الحقلين المربوطين.

لماذا سمح الآكسس بتركها فارغة؟
لماذا سمح الآكسس بإدخال قيمة غير القيم الست السابقة؟

الإجابة وببساطة هي: لصيانة قواعد البيانات.

هذا التساهل في برامج قواعد البيانات والسماح بإختراق أحد قوانين CODD هو لتسهيل عمليات الصيانة وهذا درس مختلف قد يسعفنا الوقت للتطرق اليه مستقبلا لأهميته.

هل لازلت متخيلا معي أن قاعدة البيانات فيها آلاف الجداول وكل جدول فيه آلاف الحقول وكل جدول يحتوي على ملايين السجلات ؟

ماذا لو كنت تقوم بصيانة Administrating & Maintaining هذه القاعدة؟
ماذا لو كنت نتقل ملايين السجلات من قاعدة البيانات إلى نسخة إحتياطية، إذا منعك الآكسس لخلل في تماسك القاعدة فلن تحصل على نسخة أحتياطية وستظهر لك أخطاء تلو الأخطاء تطلب منك التصحيح قبل النسخ.
ماذا لو تسرع مدخل البيانات وأدخل بيانات الأبناء وأنت ما زلت تصمم القاعدة ليوفر الوقت، إذا منعه الآكسس فلن يستطيع إستكمال سجلات جدول الأبناء قبل أن يقوم بإدخال بيانات الأباء.

نعم هو تساهل ولكن له خدمات كثيرة، هذا التساهل أخف بكثير في البرامج الأخرى مثل أوراكل وغيرها.

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

وهذه مشكلة لا نواجهها نحن حاليا، لأن قاعدة البيانات التي نقوم بتصميمها جديدة ومن الصفر ولا يوجد لدينا بيانات ولا صيانة ولا شيء.

مرة أخرى سمح لك الآكسس بإدخال قيم (غير شرعية) تساهلا بأحد القوانين لتبسيط عمليات النسخ والصيانة والتجربة والخطأ.

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

بعد تقديم الشكر للأخ الصاحي معنا (بل الصاحي جدا)، نعود إلى الأيتام في سجل الأبناء.

الآكسس لم يساعدنا في منع وجود أيتام في قاعدة البيانات، والقانون ينص على أن وجود أيتام سيؤدي إلى مشاكل بالكيلو.

تعال وشاهد معي مدى هشاشة قاعدة البيانات التي نقوم بتصميمها وسهولة تحطمها عند أول خطأ من قبل مدخل البيانات.

افتح جدول الأباء وقم بحذف الأب صاحب الرقم 3000 ثم احفظ التعديلات واقفل الجدول.
اذهب واعبث قليلا في الإستعلام الأخير الذي قمنا بإنشائه.

اختر النوع الثالث من خصائص العلاقة لرؤية الأيتام؟؟ ماذا ترى؟ أصبح لدينا أيتام بالهبل بعد ذبح أبيهم!!!

ليس هذا فقط بل إذهب إلى جدول الآباء وغير رقم الأب 4000 إلى 4500 ثم عد تنفيذ االإستعلام،، ماذا حدث؟؟؟

قاعدة بيانات مهلهة وغير متماسكة على الإطلاق...
اعد إدراج بيانات الأب رقم 3000 مرة أخرى في جدول الآباء وصحح بيانات 4500 إلى 4000 مرة أخرى.

وأسمحوا لي بفنجان من القهوة.

تحياتي،،،

-----
ملاحظة للأخ biskra قواعد البيانات تصلح لأي شيء وكل شيء، قل لي في أي بحر من بحور الإدارة تود إنشاء قاعدة البيانات وبإذن الله أساعدك.

مرحبا،،،

مازلت في مرحلة إنشاء أسئلة المسابقة -- وآمل أن أستطيع إنهائها الليلة بمشيئة الله.

نعود إلى العم CODD والعلاقات، ونكرر أن ما نقوله هنا ليس له علاقة بأي برنامج بل ينطبق على Oracle و Microsoft SQL وغيرهم أيضا.

ما زال هدفنا هو تماسك وتكامل قاعدة البيانات كذلك تسهيل عملية إدخال البيانات لصديقنا المسكين (مدخل البيانات).

ووصلنا أن قاعدة البيانات لدينا ما زالت هشة وقابلة للكسر لسبب أن طريقة تصميمها تتيح للحقل الغريب أن يحتوى بيانات غير موجودة وكذلك يتيح بيانات فارغة.

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

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

انت الآن تطلب من الآكسس او من MS SQL أن يساعدك في إلقضاء على إحتمالية تولد أيتام في قاعدة البيانات !!! ولهذا يقول لك الأكسس او أي برنامج آخر (آسف لا أستطيع مساعدتك) من يقول لماذا؟؟؟

صح -- لأن قاعدة البيانات أصلا فيها أيتام.

ما هي المشاكل التي نحاول حلها والتي واجهتنا في الحلقة السابقة:
نستطيع ترك الحقل الغريب فارغا
نستطيع ادخال اي قيمة في الحقل الغريب دون شرط وجودها في الحقل المرتبط فيه
نستطيع حذف أب وترك أبنائه بدون أب --- أيتام Orphans
نستطيع تعديل رقم الأب في جدول الآباء من 4000 إلى 4500 وبهذا يفقد الأب أولاده المرتبطين فيه على رقم 4000 وليس 4500

كل ما سبق مشاكل تؤدي إلى عدم تكامل وتماسك قاعدة البيانات -- لا بد من حل المشاكل الأربعة السابقة واحدة تلو الأخرى.

اترك العلاقات بدون فرض التكامل المرجعي (ترجمة ثقيلة على القلب)

اذهب إلى جدول الأبناء وقم بوضع أب للطفلين 180 و 190 وليكن ابوهما رقم 6000
أي ادخل 6000 في الحقل الغريب.

لنتأكد من السجلات.

في جدول الآباء
3000 محمد سعيد أحمد 42
4000 خالد عبد الله الصيعري 61
5000 سعيد محمد المالكي 32
6000 طلال عبد العزيز المسبحي 29
7000 سمير خالد الجار الله 46
9000 أحمد مبارك الحربي 42


في جدول الأبناء
100 خالد 7 3000
110 محمد 4 3000
120 سعيد 9 4000
130 طارق 12 4000
140 أحمد 5 5000
150 سمير 17 5000
160 فهد 1 5000
170 مشاري 3 9000
180 صالح 9 6000
190 ناصر 11 6000

اذهب مرة أخرى الى العلاقات وضع صح على مربع فرض التكامل واترك المربعين الآخرين فارغين.

افتح جدول الأبناء وأضف الطفل التالي:
200 سلطان 12

وحاول أن تضع أي قيمة غير القيم التالية (3000, 4000, 5000, 6000, 7000, 9000) وكذلك لا تتركه فارغا.

ماهي المشكلة التي تم حلها من الأربعة مشاكل بعاليه؟

تم حل المشكلة الثانية حسب الترتيب السابق، الآن إما أن تضع قيمة موجودة في جدول الآباء أو ن تتركه فارغا... لن يستطيع مدخل البيانات الآن إختراع قيمة من عنده.

إذهب إلى جدول الآباء -- حاول حذف أي أب له أبناء مثل الأب رقم 3000، مممممم لا تستطيع مهما حاولت لأن ذبح الأب سيترك ... ماذا؟ نعم أيتام ولهذا فهو ممنوع.

حاول تعديل رقم أي أب له أبناء مثل الأب رقم 4000 حاول أن تجعله 4500!!! مممممممم لا تستطيع مهما حاولت لأن تغيير رقم الأب سيترك كل الأطفال الذين أبوهم رقمه 4000 بدون أب.

كم مشكلة بقيت --- صح مشكلة واحدة وهي ترك الحقل الغريب في جدول الأبناء فارغا، ومن التجربة العملية في السوق أقترح ترك هذه الثغرة دائما في بداية التصميم مع أخذ ملاحظات عن هذه الحقول ومن ثم حلها فيما بعد. لماذا؟

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

أما كيف نحل المشكلة الرابعة فهي من خصائص الحقول، إفتح جدول الأبناء في التصميم ونشط الحقل الغريب وأنظر في الأسفل سترى خاصية (مطلوب) أو Required عند تعديلها من (لا) إلى (نعم) لا نستطيع ترك الحقل الغريب فارغا.

لدينا الآن قاعدة بيانات Intergated أي متكاملة ومتماسكة --- ولكن لحظة .... توقف...

يوجد مصيبة في هذا التصميم !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
يوجد الآن مشاكل حقيقية في تصميم قاعدة البيانات حتى مع تماسكها وتكاملها.

من يقول لي لماذا؟
فكرووووووووووووووووووووووووووا

ولا تنسوا أن القراءة لا تفيد ---- إكتبوا كل الملاحظات.

تحياتي،،،

مرحبا،،،

أولاً... للأخ (أحمد الحربي) الله ما أجمل وأروع إجابتك وبالذات الإجابة على سؤال متى نستخدم العلاقة واحد إلى واحد.

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

يا سلام يا أخ (احمد الحربي) اكثر من رائع.

لدينا الآن قاعدة بيانات تنطبق فيها كل قوانين CODD ومتكاملة ومتماسكة. ولكن فيها مشكلتين أساسيتين تطرق بعض الأخوة لهما:

المشكلة الأولى: ماذا نفعل إذا أردنا فعلا أن نحذف أي أب؟
المشكلة الثانية: ماذا نفعل إذا أردنا فعلا أن نغير رقم أي أب؟

في التصميم الحالي لا نستطيع؟؟؟

لحظة.... ركز معي
إذا كان الأب بدون أطفال، فلا مشكلة لدينا -- نستطيع حذفة وهذا لا ينتج عنه أيتام، وكذلك نستطيع أن نغير رقمه وأيضا لا ينتج عن هذا أيتام. بالإستنتاج نستطيع أن نحذف أب بعد أن نقوم أولا بحذف كل أولاده. ولكن هذا فيه إجهاد كبير لماذا؟

لأننا نتخيل أن قاعدة البيانات فيها 5000 جدول وكل جدول فيه آلاف الحقول وكل جدول فيه ملايين السجلات، هل من المنطقي والعملي أن نذهب كل مرة إلى جدول (المتعدد) ونحذف السجلات كلها ثم نذهب إلى جدول الواحد وحذف سجل واحد من هناك، طبعا العملية مجهدة وقابلة للأخطاء... لا بد من وجود حل عملي ومنطقي.

أعد قراءة المشكلتين أعلاه بتمعن،،، ماذا تلاحظ -- المشكلة الأولى (حذف) والمشكلة الثانية (تحديث) او (تعديل).

افتح صفحة العلاقات من أدوات ثم علاقات من القائمة.

نقر مزدوج على الخط الواصل بين الجدولين.

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

واحدة فيها كلمة (تحديث) Update والأخرى فيها (حذف) Delete وهو ما نبحث عنه فعلياً، صح؟

إقرأ مرة أخرى بتمعن وتركيز أكبر، ستجد ان الحذف يتعلق بالسجلات ....مممم
وأن التحديث يتعلق بالحقول .... ممممممممم

كالعادة، لماااااااااااااااااااااذا؟

ماذا يعني كل ما سبق،، عن ماذا نبحث؟ ماذا نفعل؟

نريد حلاً للمشكلتين أعلاه...

نريد عن تعديل أو تحديث رقم الأب في جدول الآباء ----- ماذا؟ أين يتم تلقائيا تحديث رقم هذا الأب في جدول الأبناء.

ضع علامة صح على الإختيار الأول (تحديث الحقول المرتبطة) --- اقفل النافذة
إذهب إلى جدول الآباء وغير (عدل) (حدث) رقم الأب 4000 إلى 4500

ماذا حدث؟؟

ممممممممممممم ---- لم يظهر خطأ.

أقفل جدول الأباء وإفتح جدول الأبناء --- الآن يجب أن تجيب ماذا حدث؟ ماذا تغير؟

آليا قام الآكسس أو Oracle أو MS SQL بتحديث -- بتغيير -- بتعديل --- سمها ما شئت، قام بماذا؟ بتحديث الحقل الغريب (المرتبط) ولا يوجد الآن أب برقم 4000 كل أب يحمل الرقم القديم أصبح الآن يحمل الرقم 4500

هل تلاحظ التماسك والتكامل --- لا يمكن صناعة أيتام -- أقفل الجدول

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

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

قم بحذف الأب صاحب الرقم 4500 -- ماذا تقول الرسالة؟ لاحظ في السابق كان الحذف ممنوعاً ولكنه الآن يقول لك في الرسالة (لا بأس) سأحذف لك هذا الأب ولكن بشرط واحد هو أنني سأحذف كل أولاده أولاً -- هل توافق؟ إضغط نعم.

تم حذف الأب --- ليس هذا فقط --- اقفل جدول الآباء وإفتح جدول الأبناء، ماذا تلاحظ؟

نعم لا وجود لأي إبن بأب ذو رقم 4500

قاعدة بيانات متكاملة ومتماسكة من الدرجة الأولى.

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

تعالو بنا الآن نزيد قليلا من التعقيد ولا تنسوا أن الهدف خلال رحلتنا بكاملها هو المحافظة على التماسك والتكامل.

تحياتي،،،

مرحبا،،،

في حوالي 90% من الحالات العلاقة بين الجداول هي واحد إلى متعدد وفي حوالي 1% هي واحد إلى واحد.

واحد إلى متعدد هي العلاقة التي يجب أن تبحث عنها دائماً لأنها الأسهل والأفضل والأوضح والأكثر منطقية في عمليات الربط.

ولكن عالم قواعد البيانات ليس سهلاً دائما وممتعا، تعال نحاول حل هذه المشكلة، في ترقيم السيارات عندنا في المملكة العربية السعودة مثلاً لوحات السيارات تأخذ 6 خانات ثلاثة أحرف وثلاثة أرقام، عندنا نريد إنشاء قاعدة بيانات لكافة سيارات المملكة لدينا مشكلة أساسية.

تعالو بنا سويا نحاول حل هذه المشكلة.

الحل الأول هو إنشاء مفتاح رئيسي يتكون من 6 خانات وهذا قد يكون حلا سريعا للمشكلة ولكنه يتطلب حلولا برمجية للمساعدة مثلا لعمل Mapping أو ترسيم بين الحروف العربية والحروف اللاتينية مثلا.

لنسهل الموضوع ونفترض أن الإدارة العامة للمرور منعتنا من إستخدام حقل واحد.

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

وبهذا لترقيم سيارة ما KLT 376 بحيث نضع KLT في حقل ونضع الرقم 376 في حقل آخر

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

الآن ما هو المفتاح الرئيسي لهذا الجدول.

إنشأ جدولا في قاعدة البيانات Family وفيه الحقلان التاليان:

PlateLet نص 3 -- للكناية عن الأحرف الثلاثة لرقم لوحة السيارة
PlateNum نص 3 -- للكناية عن الأرقام الثلاثة لرقم لوحة السيارة

لا تنس قاعدة مستر CODD والتي تنص على أن لكل جدول مفتاح أساسي، لاحظ كلمة (مفتاح) وليس (مفاتيح) !!!! واضح؟

مرة أخرى للتأكد من طرح الموضوع بشكل جيد --- مفتاح واحد فقط وليس مجموعة من المفاتيح.

نعود إلى لوحة السيارة --- ما هو المفتاح الرئيسي في هذا الجدول علما بأنه يوجد لدينا الآن أربع سيارت لوحاتها كالتالي:

رقم لوحة السيارة الأولى --- KLT 376
رقم لوحة السيارة الثانية --- KLT 950
رقم لوحة السيارة الثالثة --- RMD 376
رقم لوحة السيارة الرابعة --- RMD 950

فلنعبث قليلا...

لنفترض أن الحقل PlateLet الخاص بالحروف هو المفتاح الرئيسي --- ما هي المشكلة؟
صح، لن نستطيع تكرار البيانات في هذا الحقل وبالتالي لن نستطيع إدخال KLT وكذلك RMD أكثر من مرة واحدة ---- مشكلة --- هذا الحقل لا يصلح أن يكون مفتاحا رئيسيا.

لنفترض أن الحقل PlateNum الخاص بالأرقام هو المفتاح الرئيسي --- ما هي المشكلة؟
صح، لن نستطيع تكرار البيانات في هذا الحقل وبالتالي لن نستطيع إدخال 376 وكذلك 950 أكثر من مرة واحدة ---- مشكلة --- هذا الحقل لا يصلح أن يكون مفتاحا رئيسيا.

لدينا حقلين فقط وكلاهما لايصلح أن يكون مفتاحا أساسيا وفي نفس الوقت لا بد من وجود مفتاح أساسي؟؟؟ معضلة !! وطبعا لم تسمح لنا إدارة المرور بإضافة حقل جديد ندعيه أساسيا.

ما هو الحل؟

يقول لنا CODD إذا كنت مضطرا لجعل المفتاح الرئيسي يتكون من أكثر من حقل فلا بأس -- ولكن لا تنس أن هذا الحل فقط عندما تكون مضطرا...

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

قم بتنشيط الحقلين PlateLet و PlateNum مع بعضهما البعض من خلال الضغط والسحب من أقصى اليسار أو أقصى اليمين حسب الآكسس لديك ومن ثم إضغط المفتاح في شريط الأدوات.

ماذا حصل؟ قام الآكسس بوضع مفتاح بجانب كل حقل من الحقلين....

الآن ركز بشدة معي--- لا يوجد أكثر من مفتاح أساسي في الجدول -- متفقين؟
إذا ماذا نسمي الذي أمامنا؟

الذي أمامك الآن هو مفتاح أساسي واحد فقط ولكن يتكون من حقلين إثنين!!!

ماذا يعني هذا؟

يعني أن المفتاح الأساسي هو ناتج جمع الحقلين مع بعضهما البعض وليس كل حقل على حدة !!!!

وطالما أنه يمنع تكرار البيانات في المفتاح الأساسي -- فالتكرار هنا ممنوع لمجموع الحقلين وليس لكل حقل على حدة!!!

تعالو بنا نفهم بشكل أفضل

خزن الجدول بإسم Plates بعد أن تطمئن انه يوجد رسمة مفتاح بجانب كل حقل من الحقلن.

تعالوا بنا ندخل بيانات في هذا الجدول...

أدخل الحروف KLT في حقل PlateLet ثم حاول الإنتقال إلى السجل التالي--- ماذا حدث؟ خطأ طبعا،،، لماذا؟ لأن حقل المفتاح الأساسي لا يمكن أن يكون فارغا -- ولكننا وضعنا قيمة في هذا الحقل --- صح وضعنا قيمة في حقل PlateLet ولكنه ليس هو المفتاح الأساسي -- مرة أخرى ماهو المفتاح الأساسي في هذا الجدول --- المفتاح الأساسي هنا هو ناتج جمع قيمة الحقلين سويا مع بعضهما البعض وليس PlateLet لوحدها وكذلك ليس PlateNum لوحدها.

امسح القيمة KLT وحاول إدخال 950 في حقل PlateNum لن تسطيع.

إذا كان المفتاح الأساسي يتكون من حاصل جمع أكثر من حقل فإن ترك أي حقل منهم فارغا يؤدي إلى أن المفتاح الأساسي فارغا وهذا ممنوع.

لن تستطيع الإنتقال من هذا السجل إلا في حالة واحدة فقط وهي إدخال KLT في PlateLet وكذلك إدخال 950 في PlateNum وهذا منطقي حسب ما فهمناه.

قم بإدخال السجل السابق وتعال ندخل سويا سجلا آخر وهو KLT 376 لاحظ أن الآكسس وكذلك الأوراكل وغيرهما سيسمحون لك بإدخال هذه اللوحة ... من يجيب لماذا؟

لماذا سمح لنا الآكسس بتكرار KLT في حقل PlateLet؟ من يجيب؟

الإجابة لأن PlateLet ليس مفتاحا رئيسيا
الإجابة لأن PlateNum ليس مفتاحا رئيسيا

المفتاح الرئيسي هو ناتج جمع قيمة الحقلين
ما هو السجل الذي سيمنعا الآكسس من إدخاله --- من يجيب؟

تحياتي،،،

مرحبا،،،

بالنسبة للأخوة والأخوات الذين يسألون عن بريدي الإلكتروني فهو Info@arabserver.net راجيا من الجميع ملاحظة أنني بعد 20 رمضان سأكون في غاية الإنشغال لإرتباطي بعدة مواضيع ومشاريع وتنقلات ويمكنهم مراستلي (عذرا) للأمور الطارئة جدا. الرجاء ملاحظة أن موردا أساسيا من رزقي (بفضل الله) هو من البرمجة وقواعد البيانات. وبإذن الله سأشرح لكم في آخر هذه الدروس كيف تقومون بتحويل علمكم إلى ما يعود عليكم بنقود.

أما بالنسبة للأخ الذي وضع القوانين الخاصة بالسيد CODD فأتقدم له بجزيل الشكر راجيا من الجميع:

عدم ترجمتها إلى اللغة العربية ونشرها -- حتى لا تؤدي إلى بلبلة فكرية نحن جميعا في غنى عنها.

ملاحظة أن القوانين من القانون التاسع إلى القانون الثاني عشر لم تطبق حتى الآن في أي لغة قواعد بيانات لا الآكسس ولا الأوراكل ولا MS SQL ولا غيرها، وبالتالي لم يتم إنشاء أي قاعدة بيانات علاقية في العالم تتبنى القوانين من 9 إلى 12.

أما إقتراح الأخ بتجميع كل المشاركة في ملف وورد فآمل منه أن يقوم بهذه نيابة عني شاكرا ومقدرا له هذا الجهد.

نعود...

كم أنا سعيد أن وأنا أقرأ الإجابات على السؤال الذي تركناه في الحلقة السابقة وقد كانت كل الإجابات صحيحة وتشرح الصدر. فعلاً أصبح المفتح الأساسي هو ناتج مجموع قيمتي الحقلين وبهذا لن تستطيع تكرار رقم اللوحة الذي يتكرر في كلا الحقلين.

لننسى جدول Plates الخاص بأرقام لوحات السيارات ونتكفي منه بهذا القدر.

قم بإنشاء الجدول التالي سواء في الآكسس أو الأوراكل أو MS SQL وهو جدول الأصناف إطلق عليه الإسم Items وضع فيه الحقول التالية:

ItemNum نص 2 -- مفتاح أساسي
ItemName نص
ItemCost رقم

إحفظ الجدول بإسم Items

أضف السجلات التالية في جدول الأصناف Items :
90 محاية 2
91 مسطرة 4
92 قلم رصاص 1
93 منقلة 2
94 قلم حبر 15
95 سبورة 45
96 آلة حاسبة 20
97 براية 1
98 شنطة 70
99 دفتر 3

قرر بعض الآباء شراء بعض الأصناف المدرسية لأطفالهم (بغض النظر عن المنطق) أي آمل ألا يقول أحد أن طفلا عمره سنة واحدة قد إشترى منقلة !!!

أين نحن؟؟

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

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

في MS SQL إذهب إلى Diagrams وإضغط بالزر الأيمين في مكان فارغ وإختر Add Table ثم أضف Items إلى صفحة العلاقات.

أريد من يقرأ معي أن يحضر فنجانا من القهوة أو الشاي، ويسن قلما من الرصاص ويفتح صفحة بيضاء جديدة في الدفتر ويعصر فكره ويقول لي:

كيـــــــــــــــــــــــــــــــــــف نربط جدول الأصناف Items ؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!

تعذبوااااااا ،،،،،،،،،،،،،،،،،،،،

تحياتي،،،

مرحبا،،،

وصلنا (بعد التفجير الذي عطلنا والعياذ بالله) إلى كيف نربط Items الجدول الجديد الخاص بالأصناف...

نعود إلى مستر Codd للمساعدة....

لنركز...

الأطفال هم الذين يمكلون الأصناف وبالتالي الإستنتاج الأول هو أن جدول الآباء ليس له أي دخل في هذه العلاقة. العلاقة يجب أن تنشأ بين جدولي Items و Sons.

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

إذا إستعارة ItemNum ووضعه في جدول الأبناء حل مرفوض.

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

مرحباً بك في عالم الضياع.....

باءت كل محاولاتنا لإنشاء علاقة (واحد إلى متعدد) بين الأصناف والأبناء--- باءت إلى الفشل.

ما هي المشكلة التي أمامنا؟؟؟

المشكلة تكمن في التالي:

كل طفل يستطيع أن يمتلك أكثر من صنف
وفي نفس الوقت كل صنف يستطيع أن يمتلكه أكثر من طفل

أي ان العلاقة من Items إلى Sons هي واحد إلى متعدد
وفي نفس الوقت العلاقة من Sons إلى Items هي واحد إلى متعدد

إذا كانت العلاقة (واحد إلى متعدد) في الإتجاهين فإن العلاقة تصبح (متعدد إلى متعدد) Many To Many

مرحبا بك إلى هذا النوع من العلاقات....

في علاقة (متعدد إلى متعدد) ربط الجدولين ببعضهما البعض ---- ركز --- دقق - افتح عينيك ---------------- مستحيــــــــــــــــــــــــــــــــــل !!!!

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

إذا ما هو الحل؟؟

ألوووو -- مين معي على الخط --- مستر Codd مرحبا --- ما هو الحل...

الحل : إنشاء جدول تقاطعي Junction Table -- شكرا مستر Codd

أهلا.... ما هو الجدول التقاطعي؟ --- إستخدم الدفتر

أولاً ما معني Junction --- في سكك الحديد هناك دائما محطات، هذه المحطات تسمح للقاطرات بتغيير سكة الحديد للإتجاه إلى مدن مختلفة وتكون في أبسط أشكالها على شكل علامة ضرب × ومن هنا جاءت فكرة التقاطع لهذا العالم الفذ.

عندما تصطدم بجدولين العلاقة بينهما في أي إتجاه هي علاقة (واحد إلى متعدد) تكون أمامك علاقة (متعدد إلى متعدد) وللربط بينهما تقوم بإنشاء جدول جديد يسمى بجدول التقاطع أو Junction Table

جدول التقاطع هو من اسهل الجداول إطلاقا وينشأ بإستعارة المفتاح الأساسي من الجدولين:

الجدول Items مفتاحه الأساسي ItemNum نقوم بإستعارته
الجدول Sons مفتاحه الأساسي SonNum نقوم بإستعارته

أنشأ جدولا جديدا فيه الحقلين التاليين:
ItemNum نص 3
SonNum نص 4

ماذا ينقصنا الآن؟؟؟؟ من يجيب؟؟؟ صح؟؟؟ --- لا يوجد جدول بدون مفتاح أساسي !!!

آها....
ممممممممممممم

ما هو المفتاح الأساسي للجدول .... النايم يصحي !!!!!!!!!

إذا جعلنا ItemNum هو المفتاح الأساسي فلن نستطيع أن نبيع مسطرة لأكثر من طفل
وإذا جعلنا SonNum هو المفتاح الأساسي فلن يشتري أي طفل أكثر من صنف واحد

مــــــــــــــــــــــا هــــــــــــــــــو الحل؟؟؟؟

من يتذكر لوحات السيارات !!!!!!!!!!!!!!!!!!!!

نعم مجموع الحقلين هو المفتاح الأساسي...

نشط كلا الحقلين ItemNum و SonNum واضغط على المفتاح الأساسي

"بهمس وبصوت خفيف --- هناك مشكلة --- بعدين)..

الأن أحفظ الجدول بإسم SonsItems وتعالو بنا نربط هذا الجدول

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

ركز...

من جدول الأبناء إسحب SonNum وأسقطه على SonNum في جدول SonsItems ثم ضع صح على التكامل وصحين على كل من التعديل والحذف. لاحظ شكل العلاقة في أسفل الصفحة ---- نعم هي واحد إلى متعدد.

من جدول الأصناف إسحب ItemNum وأسقطه على ItemNum في جدول SonsItems ثم ضع صح على التكامل وصحين على كل من التعديل والحذف. لاحظ شكل العلاقة في أسفل الصفحة ---- نعم هي واحد إلى متعدد.

واجب منزلي....

هل نستطيع تكرار رقم الإبن في SonsItems؟ لماذا؟
هل نستطيع تكرار رقم الصنف في SonsItems؟ لماذا؟

منذ قليل همست في أذنكم بصوت منخفض أن هناك مشكلة !!!!!!!!!

من يقول لي ما هي المشكلة الآن؟
اين العباقرة الذين سيحلون هذه المشكلة؟

فكروووووووووووووووووو وتعذبوووووووووووووو

تحياتي،،،
--------------------------
ملاحظة للأخ AraFox: لم أفهم عزيزي ماذا قصدت بهذه الجملة (ولماذا نضع جدولين العلاقه بينهما هي one to one والسبب هي كمساله امنيه لحفظ البيانات الذي اعرفه ان العلاقه هي التي تفرض نفسها فلايمكن ان نجعلها one to one الا اذا كانت كذلك)

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

مرحبا،،،

أشكر الأخ (alhajri) الذي قام بتصحييح عدد الخانات -- نعم خطأ مطبعي، أما إستحداث حقل اسمه SonItemNum فطبعا خطأ لأن هذا لا يتبع قانون كيفية ربط علاقة (متعدد إلى متعدد).

طبعا مشكلتنا الان هي ما طرحه الأخوة جميعا وهي عدم القدرة على شراء صنف رقم 91 وهو المسطرة من نفس الطفل صاحب الرقم 120 مثلا. وهذا هو أجمل ما في العلاقة (متعدد إلى متعدد) والتي تتيح إنشاء جدول على شكل جسر أو تقاطع من خلال جدول جديد اسمه جدول التقاطع Junction Table، بعبارة أخرى لدينا جدول جديد نستطيع أن نفعل فيه ما نشاء.

مرة أخرى (من قال أن جدول التقاطع يقتصر على الحقلين الغريبين فقط) ؟؟؟؟!!!!

قانون: عند تشابه القيم والخصائص تتحول العملية برمتها إلى (مجرد عد) فقط.

أي أن الطفل هو نفسه والمسطرة هي نفسها --- لم تتغير الخصائص وبهذا يكون أفضل الحلول هو القيام بعد الأصناف --- بإختصار الحل هو الكمية.

أضف الحقل التالي إلى جدول التقاطع SonsItems:
Qty رقم
إحفظ الجدول

ما الذي حدث الآن... عند شراء أي طفل لأي صنف نضع كمية الشراء

قم بإضافة السجلات التالية إلى جدول التقاطع SonsItems:
110 90 3
110 91 2
110 92 7
110 95 5
110 99 9
120 93 6
120 99 2
130 90 2
130 94 2
130 97 4
170 92 12
حيث يمثل العمود الأخير الكمية المشتراة من كل صنف. إحفظ الجدول.

-------------

أين نحن الآن؟ وماذا إستفدنا حتى تاريخه؟

كل الموضوع يتعلق بتماسك وتكامل قواعد البيانات
النماذج والتقارير والمايكروز في الآكسس هي للعبث وإضاعة الوقت حتى لغة البرمجة المرتبطة فيها والتي تسمى VBA أو Access Code هي مجرد عبث وهي لغة مشوه جدا من لغة البرمجة VB
أن برامج قواعد البيانات المتقدمة (المعتمدة على خادم) Server مثل Oracle و MS SQL ليس فيها لا نماذج ولا تقارير ولا مايكروز ولا بهارات...!!!!

ن التماسك والتكامل يخضع إلى قوانين محكمة تساعد في إنشاء Skeleton او الهيكل العظمي او الخرساني لقاعدة البيانات بشكل صحيح.

أن عملية ربط الجداول (ليست نزهة) تتم في دقائق. والغريب أن معظم من قابلتهم في حياتي المهنية يصرفون 10% من وقتهم على بناء الجداول والإستعلامات و90% لألوان النماذج والتقارير وتحريكها وترقيصها وتدليعها وتسطيرها --- غريب !!

لقواعد بيانات من الوزن الثقيل والتي يمكن أن تباع في السوق يجب أن يحدث العكس 90% لتصميم الجداول والإستعلامات و10% للباقي من الزبرقة والبهارات والنماذج وغيره.

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

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

إرجع إلى ملاحظتي للأخ (alhajri) في بداية هذا الدرس --- ببساطة قلت له خطأ (وريحت دماغي وأعصابي) لماذا؟ لا أريد أن أفكر في حله في للمشكلة، لماذا؟ لأن لدينا حل آخر أسهل ووأوضح وأفضل من خلال إدراج الكمية ... ولكن لحظة ...

ماذا لو طلب صاحب قاعدة البيانات (التي نقوم بتصميمها له) أن يكون هناك حقل يوضح تاريخ الشراء للأطفال ؟؟؟؟!!!!

في الحل السهل الذي قمت بإتباعة لم ألتفت إلى حل (alhajri) متلافيا صداعا وفكرا إضافيا، لكن بإدخال (تاريخ لشراء) فإن هذا يعني أن الطفل سيشتري 10 مساطر يوم السبت و5 مساطر يوم الأحد... التكرار الآن لا مفر منه ... وستكون مشكلة خانقة تتطلب دعوة فريق العمل لإجتماع. لأنه في حالة إدخال تاريخ الشراء إنهار التماسك والتكامل وعندها نذهب الى الأخ (alhajri) ونبوس راسه ونقول له (تكفى إشرح) مرة ثانية. عند إدراج تاريخ الشراء لا يوجد حل سهل سحري وسريع، ليس لدي حل جاهز... انا وانتم بحاجة إلى التفكير العميق الذي قد يؤدي إلى إعادة تصميم القاعدة بشكل مختلف. طبعا دائما وأبدا هناك حلول لأي مشكلة في قواعد البيانات.

ما الذي أقوله؟

إن تصميم الجداول وربطها عملية في غاية التعقيد وقد عملت أكثر من تجربة في المحاضرات التي ألقيتها لأرى أن كل مجموعة تقوم بتصميم قاعدة البيانات بطريقة مختلفة وكلها صحيحة ولكن الفروق تكمن في سهولة حل عن آخر، وكلمة سهولة تعني سهولة في إدخال البيانات سهولة في إعادة فك وتركيب قاعدة البيانات سهولة في صيانة قاعدة البيانات وسجلاتها وحقولها.

العملية ليست نزهة ... العملية ليست طبق من السلطة يحضر في دقائق مكونا من شوية حقول على كام إستعلام على شوية بهارات ماكروز على نموذج من هنا وتقرير من هناك.

أخي (alhajri) سنعود إليك لتنقذنا فيما بعد عندما نفجر رؤسنا تفكيرا في كيف نربط جداول قاعدة بيانات المستوصف.

كان الهدف هو الحصول على المبلغ الذي دفعه كل أب مقابل مشتريات إبنه ولأن جدول الأصناف فيه ItemCost كان بالضرورة وجود حقل يوضح الكمية Qty لضرب الكميتين والحصول على تكلفة الشراء.

صحيح أننا قمنا بعمل بعض الإستعلامات دون شرحها وهذا ما سنفعله الآن.

ماذا سنفعل؟

سنترك الجاول والروابط ونعود إليها فيما بعد... متى؟ بعد أن نتحدث على واحدة من أقدم لغات البرمجة في العالم... وهي لغة SQL.

تحياتي،،،

مرحبا،،،

لنتفق قبل البداية،،،

SQL تعني Structured Query Language وهي لغة برمجة قواعد البيانات ولا علاقة لها ببرنامج شركة ميكروسوف Microsoft SQL Server هي مجرد لقافة من شركة ميكروسوفت لإستعارة الإسم.

إذا:
SQL هي لغة برمجة
MS SQL Server هو خادم متقدم لقواعد البيانات صمم من شركة إسمها ميكروسوفت وMS إختصار للكلمة Microsoft.

إتفقنا؟

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

دعك من حرف S وأرمي حرف L في سلة المهملات وركز كل التركيز على الحرف Q حيث أنه هو المفتاح السحري للعملية كلها.

Q = Query

Query تعني إستعلام إستفسار إستفهام إستنباط إستنبطاااح ---- وصلت الفكرة؟؟؟

السؤال البديهي والتقليدي هو ما الفرق بين الجدول والإستعلام؟

الجدول هيكل خرساني شديد التماسك والتكامل يعمل مع بقية الجداول مع محافظته على إستقلاله وشخصيته. الجدول هو رجل ببدلة رسمية منتصب الطول عابس الوجه لا يمزح ويسير في الشارع بجدية مفرطة وإلتزام كبير.

لا تمزح مع الجدول... الجدول لا يقبل المزاح ول لا العبث ويغلب عليه التماسك والشدة والعبوس والتجهم.

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

لأن السيد Codd مزق حقولنا ووزعها في جداول مختلفة كان لا بد من طريقة ما لتجميع هذه الحقول مع بعضها البعض !!!

الجدول هو الإستعلام، والإستعلام هو الجدول !! مع مرونة عالية جدا جدا جدا في كيفية تشكيل الإستعلام.

SQL هي لغة تستخدم علم (المصفوفات) من الرياضيات للوصول إلى الحلول --- ولا يهمك حقيقة ماذا تستخدم ولكن للعلم بالشىء فقط لمحبي هذا العلم الرائع المسمى المصفوفات Matrices ومفردها مصفوفة Matrix.

الغريب في SQL أنها عميقة الجذور وفي غاية التعقيد الشديد جدا، ولكن الممتع في الموضوع أن كامل اللغة بكل أبعادها تتكون من أقل من 10 أوامر -- صدق أولا تصدق أو حتى أقل من 5 أوامر على ما أذكر !!!

قلنا أن SQL تمزح من الجهة اليمين --- وتغضب من الجهة اليسار، ما معنى هذا؟

هناك إستخدامين إثنين فقط للغة SQL واحد أسميه مزاح من اليمين والآخر مزاح من اليسار:

الإستخدام الأول (مزاح من اليمين): هو الحصول على البيانات بأي شكل وبأي كيفية
الإستخدام الثني (مزاح من اليسار) : هو تحديث Skeleton او الهيكل الخرساني لقاعدة البيانات أي تغيير وتعديل الجداول والحقول والروابط ---- اااووو خطير جدا !!!

الآكسس (بغبائه) وليتبع قوانين شركة ميكروسوفت في وجود برامج سهلة تشعر مستخدميها بسهولة قواعد البيانات وضعت لك برامج صغيرة داخل الآكسس تساعدك على إنشاء الجداول، ووضعت صفحة تساعد على إنشاء العلاقات، ووضعت صفحة سهلى تساعدك على إنشاء الإستعلامات وهكذا ....

هذه البرامج الصغيره (في الحقيقة) مجرد واجهة بينك وبين SQL، الذي يقوم بالعمل كله من ألفه إلى يائه هو SQL

أشهر أوامر SQL هو الإمر (إختر) أو إنتقي SELECT
يحتاج شرح هذا الأمر عدة أيام وعدة محاضرات ولكنني سأضعك على الطريق الصحيح للتعلم ثم تنطلق أنت.

تركيب جملة SELECT يتكون من عشرات الأوامر الفرعية وأسهل شكل لها هو:

كلمة Select
بعدها فراغ أو مسافة
بعدها إسماء الحقول مع وجود فاصلة بعد كل إسم حقل
بعدها فراغ
بعدها كلمة From
بعدها إسم الجدول

تعال نأخذ مثالا وهو يوضح أيضا آلية عمل الآكسس..

إفتح إستعلام جديد في قاعدة بيانات Family
ستظهر لك نافذة تسألك عن الجداول التي تريد أن تستخدمها في الإستعلام

إضغط إغلاق Close بدون إختيار أي جدول...

الصفحة الآن بدون جداول...

من القائمة الرئيسية إختر (عرض) View ثم (عرض SQL) --- ماذا ترى؟
ترى جملة واحدة فقط وهي SELECT

إكتب الجملة التالية في السطر الأول
Select FatherName From Fathers

نفذ الإستعلام --- ماذا حدث؟؟

ليس هذا فقط،، بل من قائمة (عرض) View إختر (عرض التصميم) Design View،،، مممممممم...

ماذا ترى؟؟؟

مرحبا بك في عالم ال Select

تحياتي،،،

مرحبا،،،

قلنا أن الأكسس ومثله MS SQL يساعدنك على إنشاء الجداول والإستعلامات من خلال برامج صغيرة --- نعم ركز --- فقط يساعدنك ولكن إنتبه مجرد مساعدة وليس حل كامل متكامل!!!

ماذا يعني هذا؟

يعني أنك لن تستطيع الفرار من SQL ولن تستطيع الهروب من تعلمها إلا إذا أردت أن تصمم قاعدة بيانات مبسطة لإستخدامك الشخصي.

إذا أرت أن تبيع قواعد بيانات
إذا أردت أن تكون ضمن فريق عمل لتصميم قواعد البيانات
إذا أردت أن تقبض نقود وتبيع للسوق
إذا أردت أن تكون محترفا

يجب أن تتعلم أوامر SQL وإلا فإنك تضيع وقتك ولن تقفز حاجز المعلومات التي لديك،، بعبارة أخرى ستبقى معلومات تراوح مكانها وستصب جام غضبك على النماذج والتقارير والماكروز التي تستنزف جهدا لا نتيجة ولا قيمة له.

الجملة:
Select FatherName From Fathers

تخضع للتركيب Syntax الذي شرحناه.

كلمة Select
ثم فراغ
ثم أسم حقل واحد
ثم فراغ
ثم كلمة From
ثم فراغ
ثم إسم الجدول

ماذا إذا كنت أريد أكثر من حقل --- بسيطة بين الحقول ضع فاصلة مثل
Select FatherName, FatherNum From Fathers

مستر Codd يصير على تيمييز الحقول ويقول لنا حتى لا تتورطو فيما بعد في مشاكل كبيرة وكثيرة (قوموا بتمييز الحقول عن بعضها البعض) --- ماذا يعني هذا؟

إفترض أن لديك جدولين مختلفين وفي كل جدول منهما يوجد حقل إسمه FatherName هذا يخلق واحدة من أخطر مشاكل قواعد البيانات والذي يسمى Ambiguity ويعني الإلتباس والغموض. حيث لن تفهم SQL من أي جدول تريد بيانات الحقل FatherName

لتصحيح ما سبق ولتمييز الحقول نستخدم إسم الجدول قبل إسم الحقل وبالطبع يستحيل أن يكون هناك جدولان بنفس الإسم في نفس قاعدة البيانات --- لنصحح ونتبع شروط مستر Codd

Select Fathers.FatherName From Fathers
Select Fathers.FatherName, Fathers.FatherNum From Fathers

وضعنا إسم الجدول قبل كل حقل وبينهما نقطة.

إعكس الموضوع في الآكسس أو MS SQL قم بإنشاء إستعلام بالطريقة التقليدية، غفتح إستعلام جديد، نقر مزودج على جدول Fathers، إغلاق ثم نقر مزدوج على كل من الحقلين FatherName ثم FathersNum

قم بإستعراض جملة SQL من قائمة عرض View
سترى نفس الجملة السابقة --- طبعا دعك من الفاصلة المنقوطة في نهاية الجملة --- لا قيمة لها الآن

ماذا يعني هذا كله؟

يعني أننا نستطيع إستغلال طريقة الآكسس وكذلك MS SQL في إجراء الكثير من التجارب ومن ثم الإطلاع على جملة SQL وكيفية تركيبها

نترك قواعد البيانات كلها.

في علم البرمجة ثلاثة أنواع من العمليات:

Arithmetical Operations أو العمليات الحسابية وهي عمليات الضرب والقسمة والجمع والطرح والأسس والوغاريثمات والجذور والمثلثات والفراغية والجبر و..ز إلخ

Comparison Operators أو عمليات المقارنة مثل المساواة وعدم المساواة وأكبر من وأصغر من و...إلخ

Logical Operations أو العمليات المنطقية وهي "و" "أو" "لآ" AND, OR, NOT ... إلخ

نعود إلى قواعد البيانات وهي تستخدم كل ما سبق من العمليات.

طبق المثال التالي...
من خلال إستعلام أظهر كل الأباء من جدول الأباء وكل الأبناء من جدول الأبناء -- قمنا بهذا سابقا ولكن الآن أريد أن تساهد جملة Select

SELECT Fathers.FatherNum, Fathers.FatherName, Sons.SonNum, Sons.SonName FROM Fathers INNER JOIN Sons ON Fathers.FatherNum = Sons.FatherNum

كل ما أريده منك هو التركيز على الجملة (Inner Join) من يتذكر --- من يكتب معنا، طبق النوعين الآخرين وشاهد تركيبة الجملة Right Join وكذلك Left Join

تذكر إنني أحاول أن أضعك على الطريق الصحيح ولا أحاول قطعا تدريس SQL والتي تحتاج إلى الكثير من الوقت والتمارين والتجارب والشرح المباشر.

جملة ORDER BY هي الجملة التي تساعد على ترتيب نتائج الإستعلام

إفتح نافذة استعلام جديد في وضع SQL واكتب الجملة التالية

Select FatherNum From Fathers Order By FatherNum

ماذا تعني؟؟

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

كيف نستعرض السابق تنازليا

Select FatherNum From Fathers Order By FatherNum DESC

إنظر إلى الكلمة في النهاية Desc وهي إختصار ل Descending أي تنازلي -- طبق وجرب وشاهد وأكتب ملاحظاتك.

ماذا لو أردنا كافة الآباء الذين رقمهم أكبر من 5000؟

نستخدم خاصية الشرط WHERE أي عندما !!! ترجمها كيف تشاء !!

Select FatherNum From Fathers WHERE FatherNum>5000

لاحظ إستخدم أحد (عمليات المقارنة) -- نفذ --- طبق --- شاهد--- فكر --- أكتب --- لخص وإلا لن تفهم شيئا...

طبعا ستجد خطأ في الجملة السابقة ... لماذا؟ لأن رقم الأب (نص) Text و5000 رقم، نستخدم الدوال -- وهي جزء من قواعد البيانات في الآكسس أسمها VAL أي Value أو قيمة، في MS SQL نستخدم Cast أي التحويل.

صحح...
Select FatherNum From Fathers WHERE VAL(FatherNum>5000

ماذا لو أردنا أن نغير عنوان الحقل FatherName لأنه باللغة الإنجليزية ونحن نريده بالعربية

(اواجه مشكلة في الكتابة هنا بين العربية والإنجليزية سأضعها على سطور مختلفة وأنت تلصقها فيما بع في سطر واحد) !!!!

Select
FatherName
As
[إسم الأب]
From
Fathers
ASC

ASC إختصار Ascending أي ترتيب أسماء الآباء من الألف إلى الياء.

أريدك عزيزي القارىء أن تصرف وقتا لا يقا عن أسبوعين (فيما بعد طبعا) على ممارسة جملة SQL

كل ما فعلنا حتى الآن هو المزاح الذي يتقبله SQL منا دون المساس بتكامل وتماسك قاعدة البيانات.

النوع الثاني من المزاح ينقسم إلى شقين:

الأول: تعديل في البيانات داخل الجداول (في السجلات) -- وينبغي الحذر
الثاني: تعديل في الجداول والحقول والروابط بينها --- وهو الخطير -- وينبغي الحذر الشديد جدا

تعدل بيانات الجداول يتم من خلال:
إضافة سجلات جديدة
تعديل سجلات موجودة
حذف سجلات موجودة

تعالوا نستمتع بلغة SQL ونضيف سجلين جديدين لجدول الآباء نستخدم الأمر Insert أي أدخل ولا تنسى عزيزي القارىء نحن نتحدث عن SQL وهي نفسها بالظبط (تقريبا) في كافة برامج قواعد البيانات مثل الآكسس وMS SQL و Oracle وSysbase وغيرها.

يا جماعة -- يا أصحاب الموقع --- لدي مشكلة في التحول بين العربي والإنجليزي -- عموما أنا غشيم في طرق المنتديات سأحاول

Insert Into Fathers Values
)
1500
,
"سعيد خالد القرني"
,
39
(

نفذ الإسنعلام وتأكد من جدول الآباء أن الأب 1500 قد تم إضافته

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

تعال شاهد معي ضعف البرنامج المساعد في عملية إنشاء الإستعلامات،، إذا حاولت الآن إستعراض كيفية صنع هذا الإستعلام بالضغط على (عرض التصميم) لن تستطيع،،، لن يساعد الآكسس --- أنت الآن محترف !!!

تعالو نعديل عمر الأب 1500 من 39 سنة إلى 36 سنة بإستخدام لغة SQL
Update Fathers SET FatherAge = 36 WHERE VAL(FatherNum)=1500

نفذ الإستعلام وقم بالتأكد من أنه تم تعديل عمر الأب 1500 من جدول الآباء

تعال بنا نحذف الأب 1500
Delete From Fathers WHERE VAL(FatherNum)=1500

نفذ وتأكد...

واجب منزلي...

بإستخدام لغة SQL

أظهر بيانات الأباء الذين أرقامهم أقل أو تساوي 4000
أظهر بيانات الآبناء الذين أعمارهم اقل من 5 سنوات
أظهر بيانات الأصناف التي تكلفتها تقل عى 5 ريالات
إسأل نفسك خمسة أسئلة أخرى على الأقل ثم حلها بإستخدام لغة SQL

تحياتي،،،

مرحبا،،،

في لغة SQL:

عند الإضافة نستخدم Insert Into
عند التعديل نستخدم Update... Set
عند الحذف نستخدم Delete

ركز معي مرة أخرى وتذكر دائما وأبدا أن هذه أوامر SQL ولا يهم ال SQL من أين تستخدمها، مين يتذكر الطبقة الأولى؟

في الطبقة الأولى (الخاصة بالنماذج التقارير) لا يهم من أين أتى أمر SQL سواء من:

VB
VB.Net
C#.Net
++C .net

Java
Access
Excel

MySQL
Interdev
Asp
Asp.Net

Oracle Designer

إلخ...

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

كل البرامج والتطبيقات تستخدم نفس أوامر لغة SQL

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

لإنشاء جدول جديد في قاعدة البيانات نستخدم الأمر Create Table
في إستعلام جديد أفتح (عرض SQL) وادخل السطر التالي:

للتبسيط:

في آكسس
Create Table Tests (TestID text(4), TestName text(25), TestAge Number)
والله مشكلة الأقواس --- تعبت انا من لخبطة العربي والانجليزي --- صلحوها انتم !!!

في MS SQL وبإستخدام Query Analyzer
Create Table Tests (TestID char(4), TestName char(25), TestAge int)
صححوا الأقواس

أذهب إلى الجداول وتمتع بالجدول الجديد !!! في MS SQL لا بد من عمل Refresh للجداول حتى ترى الجدول الجديد.

ستلاحظ أنك لا تستطيع تنفيذ هذا الأمر أكثر من مرة --- من يجيب؟ !!!

لتعديل جدول نستخدم Alter Table
احذف جدول نستخدم Drop Table

صدق أو لا تصدق عزيزي القارىء أن هذه الأوامر:
Select

Update
Insert
Delete

Create Table
Alter Table
Drop Table

هي فقط (تقريبا) كل أوامر لغة SQL !!!!
طبعا كما قلنا في البداية --- كل أمر هذه الأوامر قصة طويلة وتحتاج إلى الكثير من الصبر والجهد والتمارين والشرح وهاهنا أحاول أن اضعك على الطريق الصحيح،، إذا أردت الإحتراف في قواعد البيانات لا بد من إتقان الأوامر السابقة. لاتيأس،، خذ كل واحد من الأوامر بروية وبهدوء وقم بعمل المئات من التجارب والمحاولات وما إلى ذلك... لاحظ في قائمة إستعلام Query في الآكسس سترى الكثير من أنواع الإستعلامات مثل:

استعلام تحديث
استعلام انشاء جدول
إلخ...

كل هذه الإستعلامات يمكن إنشاؤها من خلال الأوامر السابقة وإستيضاح الفروق بينها في غاية الأهمية.

لعل الوقت يسعفنا فيما بعد ونلقي مزيدا من الضوء على لغة SQL

لنعود إلى قاعدة البيانات وجدولي الآباء والأبناء

من ينشأ لي أستعلام سواء بلغة SQL أو من خلال (عرض التصميم) يوضح إجمالي ما دفعه كل أب مقابل مشتريات إبنه؟؟

تعذبواااا

تحياتي،،،

مرحبا،،،

الأخ biskra والله لا أدري ماذا أقول !!!

أولاً لم يصلني شيء منك، ليتك تقول لي على البريد الخاص على أي بريد ارسلت لي الرسالة.

ثانيا: إلى كافة الأخوة والأخوات ثلاث نقاط:
النقطة الأولى --- كل من أرسل لي شكرا فأقول له الشكر لله أولا وأخيرا والشكر موصول لكم.

النقطة الثانية --- كل من أرسل لي دعاء فأقول اللهم آمين.

النقطة الثالثة --- كل من طلب تصميم قاعدة بيانات فأقول له --- لم يكن هدف مشاركتي هو هذا وأعيد مرة أخرى --- الهدف هو أن أساعدك (بفضل الله أولا وأخيرا) على أن تقف على الطريق الصحيح وأن تتعلم المفاهيم الأساسية لقواعد البيانات، والوقت المتاح لي لإكمال هذه المفاهيم والأسس مضغوط جدا لإلاتباطي بالكثير بعد 20 رمضان وتعلمون جميعا العشر الأواخر، ومن ثم البد من 6 شوال أي بعد الإجازة مرتبط بمشروع ضخم جدا لقواعد البيانات على مستوى وزارة التربية والتعليم لدينا في المملكة والمشروع بمئات الأولوف من الريالات وسيكون معي فريق عمل (سأقوده بمشئية الله) مكون من حوالي 8 رجال و 4 نساء لإنهاء هذا المشروع ومن المتوقع أن يستنزف حوالي 6 أشهر من التصميم والبرمجة.

إستثني مما سبق أربعة وعود قطعتها على نفس لبعض المشاركين:

الأخ (alali100) والذي حدث بيني وبينه سوء تفاهم وقد وعدته بالمساعدة في برنامجه الصادر والوارد.

أخت في منتدى (MS SQL) وعدتها بمساعدتها في قاعدة البيانات الخاصة بها.

وأخ ثالث (والله قمت أخربط ونسيت حتى أسمائهم) وعدته بمساعدته في تطوير نظام متقدم على VB.Net مع بعض التطبيقات على Asp.Net وربطها بالجوال.

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

وآمل من الله ألا أكون في لحظة (شهامة) قد وعدت بأكثر من طاقتي وقدرتي على التحمل.

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

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

أقول لأ وألف لأ فقط للذين تواصلو معي وليس لديهم أي فكرة عن قواعد البيانات ويطلبون تصميم قاعدة البيانات بالكامل من الألف إلى الياء من قبلي....

بالله كيف هذا وكيف يعقل؟

أترك الحكم للأخوة والأخوات المشاركين!!!!!

اللهم لا علم لنا إلا ما علمتنا.

تحياتي،،،

مرحبا،،،

نستكمل...

قاعدة أخرى من قواعد السيد 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 ولا أعلم ترجمتها بالعربية !!!

هل من يساعدنا بالترجمة...

وهي موضوعنا في الدرس القادم...

تحياتي،،،

مرحبا،،،

للأخ الذي سأل عن (الكمية) أقول له الهدف هنا إجراء الحسابات وإذا قام طفل بإجراء عملية شراء لنفس الأصناف فهو مستحيل حسب تصميمنا للقاعدة (والله يا شباب كلمة القاعدة هذي تجيب الحساسية !!) وقد تطرقنا لهذا عندما إقترحنا أن يكون هناك (تاريخ الشراء) --- عند إضافة تاريخ الشراء يصبح تصممنا للقاعدة خطأ وبحاجة إلى إعادة التصميم بفكر مختلفو ورؤية مختلفة.

وصلنا إلى Aggregate Functions وأشكر الأخوة على الترجمة وآمل أن تكون هي الترجمة العلمية --- ولا يهمنا هذا تعالوا نرى ما هي...

لا تنس أن هذه الدوال خاصة بلغة SQL ولا علاقة لها بالآكسس ... من يقول لي ماذا يعني هذا؟ وما أهميته؟

كل المعادلات الحسابية موجودة في هذه الدوال ومن أشهرها...
ِAVG --- وهي المتوسط الحسابي وفي الرياضيات هو مجموع الأقيام مقسوما على عددها Average

Count --- وهو العدد أي عدد السجلات في جدول ما --- او عدد الأطفال الإناث مثلا

Max --- أكبر قيمة Maximum
Min --- أقل قيمة Minimum
Sum --- المجموع Summation
StdEv --- أي الإنحراف المعياري Standard Deviation الخاص بالإحصاء
وهكذا....

لحل الإستعلام الذي وقفنا عنده:
نضع الحقول الأربعة التالية في الإستعلام ونختار من قائمة عرض (مجاميع) Totals
FatherNum من جدول الآباء
FatherName من جدول الأباء
SonNum من جدول الأبناء
SonName من جدول الأبناء

كل الحقول السابقة --- نختار لها Group By أو تجميع حسب

ثم نضيف الحقل الحسابي التالي في العمود الخامس ونختار له Expression للكناية عن عملية حسابية
sum(Qty*ItemCost)
صححوا الأقواس

لاحظ أن إستخدام دالة Sum --- لن أجيب --- من يقول لماذا تم إستخدام دالة Sum؟ ما الفائدة منها؟

نفذ الإستعلام للحصول على ما طلبناه.

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

(من يساعدني في شرح كيفية إدراج صور في أي مشاركة) !!!!

نفذ الإستعلام التالي:

أضف جدولي الآباء والأبناء ثم إختر من قائمة (استعلام) Query --- إختر (إستعلام جدولي) CrossTab Query

اضف حقل FatherName من جدول الآباء --- الإجمالي (تجميع حسب) وجدولي (عنوان الصف)

اضف حقل SonName من جدول الأبناء--- الإجمالي (تجميع حسب) وجدولي (عنوان العمود)

أضف حقل SonNum من جدول الأبناء --- الإجمالي (Count) وجدولي (القيمة)

نفذ الإستعلام... من يشرح لي هذا الإستعلام الرائع؟؟؟!!!!

لا ينسى أحد منكم (رجاء لا أمراً) ان يصرف وقتا طويلا بل طويلا جدا في ممارسة الإستعلامات --- كل قواعد البيانات بعد تنظيم وإنشاء الجداول تعتمد على قوة ووضوح الإستعلامات.

وقبل الإستمرار في هذه السلسة من الدروس آمل من الجميع حل الواجب التالي لأتأكد أنك هناك من يذاكر ويحاول فعلياً.

في قائمة إستعلام -- (وهي أهم قائمة) يوجد الخيارات التالية:

إستعلام تحديد Select Query --- وقد قمنا بتطبيقه
إستعلام جدولي CrossTab Query --- وقد قمنا بتطبيقه في المثال السابق

إستعلام إنشاء جدول Make-Table Query --- من يشرح لي هذا؟
إستعلام تحديث Update Query --- من يشرح لي هذا؟
إستعلام إلحاق Append Query --- من يشرح لي هذا؟
إستعلام حذف Delete Query --- من يشرح لي هذا؟

خاص ب SQL أي خاص بلغة SQL وفيها ثلاثة أنواع من الإستعلامات:
توحيد Union
تمريري Pass-Through
تعريف بيانات Data Definition

من يشرح لي ماذا يحدث عندما نختار أي من الثلاثة السابقة؟ لماذ يحدث هذا؟
قد يسعفنا الوقت لشرحها بالتفصيل فيما بعد.

انتظر إجابات...

تحياتي،،،

مرحبا،،،

قرر صاحب قاعدة البيانات أن يضيف جدولاً خاص بالزوجات !!!!

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

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

لا تنسوا أن قواعد البيانات تصمم من قبل فريق عمل...

فكروا...

مرحبا،،،

إجابات رائعة من الأخ (AhmdMu) ما عدا جزئيات بسيطة،،، وطبعا لا أدري من أين إقترح (جنسية) للطفل ..... والله أضحكنى بشدة وهو يحاول إضافة جنسية للطفل ؟؟؟!!! كيف يحدث هذا لا أدري... واضح أنه سريع القراءة.

اما إجاباته فهي أكثر من رائعة وينقصها ما يلي:
في الإستعلامات التي تؤدي إلى حذف وتعديل وإلحاق سجلات لا يكفي رد الأخ (AhmdMu) --- بالطبع رده صحيح 100% ولكن بجزئية إضافية صغيرة جدا...

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

شكراً للأخ الصاحي معنا (AhmdMu).

أضف جدول الزوجات Wives بالحقول التالية:
WifeNum نص 2 --- مفتاح أساسي
WifeName نص
WifeAge رقم
WifeNationality --- وهو موضوعنا الآن
FatherNum --- حقل غريب للربط

أضف الحقل التالي في جدول الأبناء:
SonSex --- وهو موضوعنا الآن

نعود للسيد Codd --- ماذا يقول؟ --- أحد القواعد والقوانين العامة ينص على:

تحييد اللغة !!!!!!!!!!

ماذا يعني تحييد اللغة --- يعني وببساطة شديدة عدم الإعتماد على (النصوص) في قاعدة البيانات، لماذا؟؟

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

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

نحمد الله أننا نتعامل مع جدول كله نساء الآن وبالتالي سيكون لدينا:
سعودية
كويتية
قطرية
مصرية
...

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

إذا مشكلة التذكير والتأنيث وجمع المذكر المعفوس (عفوا، ترا أنا من أشد العشاق لللغة العربية) ولكنه مجر مزاح فقط...

إنما لمشكلة ما زالت قائمة حتى مع كون الجدول بكامله يتعلق بنساء، ما هي المشكلة:
سعودية
سعوديه

لاحظ (الهاء) مقارنة مع (التاء المربوطة) --- في علم قواعد البيانات ما سبق جنسيتان مختلفتلن... كيف نضمن مدخل البيانات؟ كيف نحل هذه المشكلة؟

إتصال هاتفي مع السيد Codd --- ساعدنا تكفى...

شكرا سيد Codd --- الحل هو بإستخدام الجداول المساعدة Help Tables

والجداول المساعدة من أجمل الجداول لأنها تكفيك شر أخطاء الإملاء وتساعدك على تحييد اللغة بالكامل، والجدول المساعد تقتصر مهامه على تغذية الحقول بالنصوص فقط وبهذا تكتب النصوص مرة واحدة بإملاء حسب رغبتك ولكن هذا الإملاء الذي قمت بعمله هو الذي سيكون موحدا في كافة سجلات الجدول.

المشكلة الثانية التي تقوم الجداول المساعدة بحلها هي عمليات التعديل، لنفترض أن لدينا في جدول الزوجات 2 مليون سجل منهم 100 ألف سعودية وتم إدخال الجنسية على شكل (سعوودية) خطأً ... ثم قررت تعديل هذا الخطأ... لديك حلان...

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

نحن مررنا مرور الكرام على هذا النوع من الإستعلامات ... الإستعلامات التي تؤدي إلى إلحاق وحذف وتعديل لأكثر من سجل واحد تتطلب أعلى درجات الحذر وتتطلب إجراء نسخ إحتياطية للبيانات الأصلية قبل إجراء عملية التعديل لأن أي خطأ في الشرط WHERE سيترتب عليه مصائب لا حد لها ولا حصر.

اذا، كلا الحلين السابقين ( غير عملي ) وبالتالي لا مفر من إستخدام الجداول المساعدة Help Tables لعزل اللغة وتحيدها والمساهمة من البداية في إنشاء قاعدة بيانات متكاملة ومتماسكة.

إنشأ الجدول المساعد التالي:
NationalityNum نص 2 -- مفتاح رئيسي
Nationality نص

إحفظه بإسم Nationalities
أدخل البيانات التالية في جدول الجنسيات:

ماذا نفعل بعد هذا؟ صح !! نربط جدول الجنسيات بجدول الزوجات ولكن يتطلب الأمر أولا تعديل الحقل WifeNationality في جدول الزوجات.... ليصبح ماذا؟ من يجيب؟

أجب قبل القراءة....

نعدل الحقل WifeNationality إلى NationalityNum على هيئة نص وبطول 2 ليصبح حقلا غريبا.

إربط بين الحقلين NationalityNum بالسحب من جدول Nationalities إلى جدول Wives وضع علامة صح على المربعات الثلاثة... والعلاقة الآن واحد إلى متعدد.

أضف السجلات التالية في جدول الجنسيات:
01 سعودية
02 قطرية
03 كويتية
04 مصرية
05 إماراتية
06 يمنية
07 عراقية
08 عمانية
09 بحرينية
10 سورية

لاحظ أن التهجئة (الإملاء) للجنسيات غير مهم حاليا (تحييد اللغة) لأن الربط يتم مع رقم الجنسية وليس النص وهو الجنسية نفسها.

قم بربط جدول الآباء مع جدول الزوجات --- قطعا لن أشرح كيف تقوم بهذا !!!!!

ثم أضف السجلات التالية إلى جدول الزوجات Wives:
WifeNum WifeName WifeAge NationalityNum FatherNum
80 غادة سعيد آل محمد 42 02 4000
81 منى طلال خالد 22 10 4000
82 سارة خليل الدوسري 36 02 4000
83 مها عبد الرحمن الخليل 19 07 9000
84 سارة سعيد السالم 51 09 6000
88 عفاف محمد اليوسف 39 01 5000

واجب منزلي...

كيف نربط جنس الطفل؟ ماذا يحل لنا من مشاكل؟
كيف ننشأ إستعلام يوضح عدد الزوجات لكل أب وعدد الأطفال؟
كم عدد زوجات كل أب من كل جنسية؟
من يستطيع ن يقول لي متوسط أعمار زوجات كل أب؟

إسأل نفسك 100 سؤال وأجب عليها وإستمتع بقواعد البيانات. !!!

مرحبا،،،

وصلنا إلى حقل جنس الطفل وسمى هذا النوع من الحقول (الحقول ثنائية القيمة) أي لا يوجد إلا قيمتين إثنتين فقط:

إنثى
ذكر

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

في الحقول ثنائية القيمة مثل:
ذكر - أنثى
ليل - نهار
فترة صباحية -- فترة مسائية

أو في حقول النفي والإثبات مثل:
متزوج -- غير متزوج
مدخن -- غير مدخن
عصبي -- غير عصبي
وهكذا...

فإننا نستخدم حقول من نوع Bit في MS SQL أو (نعم/لا) Yes/No في الآكسس.

ولكن الحقل في جدول الأبناء إسمه SonSex مثلا وبهذا تصبح الإجابة بنعم أو لا غير منطقية وعليه جرت العادة إلى تغيير طريقة تسمية الحقل إلى شيء أكثر دقة مثل أن يكون إسم الحقل Female وبهذا يصبح السؤال (انثى؟) وعندها تصبح الإجابة نعم أم لا.

وعليه لإستعراض الذكور فقط من جدول الأبناء يصبح الشرط هو:
Female=no
أي الجنس من غير الإناث.

نترك الآن قاعدة البيانات الخاصة بالعائلة ونقفل الآكسس أو أي برنامج قواعد بيانات آخر.

وعلى الورق فقط (كتابة فقط)
قل لي كيف نربط الجداول في قاعدة البيانات الخاصة بالمستوصف؟؟؟

مرحبا،،،

حرام عليكم ... وين الناس؟ وين الشغالين معنا؟ المهم أن نجاوب بغض النظر عن الصح والخطأ !!! ليس الهدف أن تكون الإجابة صح !!!

شكرا الأخ (alhajri) على كيفية وضع الصور.

ممتاز للأخ (AhmdMu) وسؤال شخصي لك هل تعرف كل هذا مما سبق؟ إذا كنت جيدا في قواعد البيانات (مو الآكسس) --- Microsoft SQL Server 2000 وقمت بعمل أية مشاريع أو نماذج من قبل... آمل إرسال بريد إلكتروني توضح لي فيه خبرتك بالظبط وإذا كان لديك رغبة في المشاركة في مشاريع حقيقية. آمل الإفادة اين أنت بالظبط (في أي بلد) حتى يتم التنسيق معك في أقرب فرصة بعد العيد بمشيئة الله. ستعمل (في حالة قبولك ورغبتك ايضا) ستعمل من جهازك من منزلك ولن يؤثر عليك شيئا. بالعكس سيكون لديك دخل مادي جديد. تحياتي

----
أتى وقت السحور والأمساك ولم أقرأ أي إقتراح لكيفية ربط جداول المستوصف (بدون آكسس) على الورق فقط.

انا بالإنتظاااااااااااااااااااااااااااااار...

مرحبا،،،

محاولة جيدة من الأخ (ha98) ........... على الأقل جالس يحاول !!! وين الجماعة،، شايف السحور دسم الليلة...

لن أكمل قبل أن أرى من 10 إلى 15 محاولة !!!!!!!!!!

سأكون أول سبب من أسباب تساقط الشعر لديكم ... من كثرة التفكير والتمعن...
يا ناس ... إتركوا النماذج والتقارير والماكروز --- ما يوجد في هذه الدروس هو ما يسمى بقواعد البيانات والباقي مضيعة للوقت....

سأنتظر.... وأستمتع وأنا أرى كل واحد منكم يتعذب في حل المشكلة !!!!

تحياتي،،،


مرحبا،،،

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

ولأساعدك أكثر أقول لك -- إحفظ القاون الشامل التالي:

كافة الأزرار Buttons
قوائم السرد Combo Boxes
مربعات النص Text Boxes

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

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

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

تحياتي،،،


مرحبا،،،

توقعت الحصول على محاولات أكثر --- لا أدري هل مع تزايد صعوبة المفاهيم بدأ الأخوة والأخوات في الفرار بعد الصداع !!!

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

نعود إلى قاعدة بيانات المستوصف...

وآمل حتى في غياب المشاركات --- أن يكون هناك من حاول، وقد كنت متأكداً أنكم لن تصلون إلى الحل ولم يكن أصلا الوصول إلى الحل هو الهدف --- الهدف هو تعميق مفاهيم وأسس قواعد البيانات من خلال توضيح:

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

في جداول قاعدة البيانات الخاصة بالمستوصف لدينا مشكلة -- تعالوا نلخص هذه المشكلة:

بين العيادات والأطباء -- علاقة متعدد إلى متعدد حيث أن كل عيادة يدخلها أكثر من طبيب وكل طبيب يدخل أكثر من عيادة.

بين العيادات والمرضى -- علاقة متعدد إلى متعدد حيث ان كل عيادة يدخلها أكثر من مريض وكل مريض يزور أكثر من عيادة؟

بين الأطباء والمرضى -- علاقة متعدد إلى متعدد حيث أن كل طبيب يعالج أكثر من مريض وكل مريض يعالجه أكثر من طبيب.

بإختصار، العلاقات بين الجداول الثلاثة هي علاقة متعدد إلى متعدد، ماذا يعني هذا؟

يعني (حسب ما تعلمناه) إنشاء ثلاثة جداول على شكل Junction Tables جداول متقاطعة وهذا غير عملي وسيؤدي إلى قاعدة بيانات على شكل (سباجيتي) أي متداخلة بشكل خطير مما سيؤثر على التماسك والتكامل.

بالمناسبة المصطلح Spaghetti سباجيتي (أي المكرونة المتداخلة) هو مصطلح علمي يستخدم في البرمجة.

ما هو الحل إذا؟ -- إتصال دولي سريع مع السيد Codd --- الإجابة هي بإستخدام جداول الحركة Transaction Tables

معظم قواعد البيانات تستخدم جداول الحركة -- تعالو نعود إلى (المنطق) ولننسى قواعد البيانات لدقيقة:

لدينا مستوصف جديد (تم إفتتاحه منذ 5 دقائق) ولدينا جدول على الورق فيه بيانات الأطباء ولدينا جدول آخر على الورق فيه بيانات العيادات --- المستوصف جديد (أي لا يوجد مرضى)

نحن جميعا في قاعة الإستقبال مبتسمين --- ماذا ننتظر ؟؟؟

نعم -- صح -- ننتظر دخول مريض ما !!! بدون دخول أي مريض إلى المستوصف سنبقى جميعا في قاعة الإستقبال مبتسمين ننتظر حتى نهاية الدوام -- بالتعبير العلمي لا يوجد حركة في المستوصف !!!

حتى لو دخل مريض (ولا يشكو من علة) فقط للإطلاع على جاهزية المستوصف وقام بفتح ملف (مجاني) لدينا في المستوصف ثم خرج --- ما الذي حصل؟

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

لنفترض أننا حصلنا على 1000 مريض كلهم ليسوا بحاجة إلى أي علاج سوى التأكد من جاهزية المستوصف وقامو بفتح ملفات مجانية لدينا، حتى الآن لا يوجد حركة في المستوصف....

نفس الوضع في حالة كون قاعدة البيانات لمحل شراء وبيع، جدول للأصناف وجدول للعملاء (فارغ) وجدول للبيع --- بدون دخول مشتري لن يكون هناك حركة !!

في البنك جدول العملاء وجدول الحسابات وجدول وجدول ... بدون دخول عميل ووضع نقود أو إجراء عملية تحويل فلن يكون هناك حركة.

في المدرسة جدول للمدرسين وجدول للفصول وجدول للمواد بدون وجود طلبة مسجلين بمواد فلن يكون هناك حركة.

متى تبدأ الحركة ؟
متى تبدأ قاعدة البيانات في التفاعل والعمل ؟

من يجيب بعد هذه الإضاءة؟

مرحبا،،،

بعد أن تورطت في أكثر من مشوار مع العائلة --- نستكمل...

نعم جداول الحركة واحدة من ((((((((((((( أهـــــــــــــــــــــــــــــم )))))))))))))))))) وأخطر الجداول في قواعد البيانات...

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

وجداول الحركة في أكثر من 90% من الحالات تكون عبارة عن جدول واحد فقط يقوم بربط معظم الجداول الأساسية --- مرة أخرى ليس شرطا !!!!!!!!

ولأن الحركة في قاعدة بيانات المستوصف هي ناتجة عن زيارة لمريض لطبيب في عيادة فإن جدول الحركة لدينا سنسميه جدول الزيارات.

ننشأ جدول جديد بإسم Visitors وفيه الحقول التالية: (على الورق) ...

رقم المريض -- حقل غريب يمثل المفتاح الأساسي من جدول المرضى
رقم الطبيب -- حقل غريب يمثل المفتاح الأساسي من جدول الأطباء
رقم العيادة -- حقل غريب يمثل المفتاح الأساسي من جدول العيادات

وحتى لا يزعل مستر Codd فنضيف مفتاح أساسي للجدول السابق وهو..
رقم الزيارة

حلاوة وروعة هذا الجدول الآن انه يعطينا الفرصة لإضافة أية معلومات عن ماذا حدث في العيادة بين الطبيب والمريض...

نستكمل الحقول...
تاريخ الزيارة
وقت الزيارة
تشخيص المرض
وصفة العلاج
تاريخ الخروج
وقت الخروج
القيمة التي دفعها المرض

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

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

يمكنك أن تضيف ملايين الحقول على جدول الحركة:
درجة حرارة المرض
قياس الضغط
أعراض المرض
كل شيء يتعلق بموضوع الزيارة يسرد هنا

مشكلة واحدة فقط في جداول الحركة --- وهي أنها تعتبر القلب النابض لأي قاعدة بيانات، أمثلة ... أذا فقدنا جدول الأطباء ماذا نفعل؟ بسيطة (نوعا ما) نزور الأطباء ونحاول إعادة إدخال بياناتهم.

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

فقدنا جدول المرضي --- لا بأس نحاول الإتصال بهم (أو ننتظر زيارتهم) ونعيد تجميع بياناتهم

أما فقد جدول الحركة فيعتبر مصيبة يترتب عليها الطرد من الوظيفة وخسائر فادحة لصاحب المستوصف.

دائما جدول الحركة هو أخطر الجداول على الإطلاق ويتوجب دائما إجراء نسخ إحتياطية لهذا الجدول وتحديد صلاحيات الدخول للمستخدمين ... بل أكثر من هذا في البنوك مثلا والتي تستخدم برنامج قواعد بيانات Sybase فنقوم بتصميم جداول أخرى سرية لا يراها مدخلي البيانات توضح ماذا فعل كل مدخل بيانات في تعامله مع جدول الحركة... لأنه ببساطة شديدة لو كان الشخص الذي يدخل بيانات جدول الحركة في البنك فاسداً فسيمكنه بمتهى السهولة إضافة بضعة آلاف من الريالات لرصيد حساب صديقه أو أخيه مثلا.

الثمن المدفوع مقابل جدول الحركة (عندما يحتوي على بيانات مالية) أو معلومات ذات سرية قصوى يتوجب أن يقترن بجدول الرقابة Control Tables التي تقوم بمراقبة مدخلي البيانات.

مدخلو البيانات دائما محط شك وريبة من قبل مصمم قاعدة البيانات.

من يقول لي الآن كيف نربط الجداول الأربعة الموجودة في قاعدة بيانات المستوصف؟؟

تحياتي،،،

مرحبا،،،

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

القسم الأول: قواعد بيانات لحفظ البيانات فقط بدون خادم Sever مثل الآكسس و Clipper و FoxPro وغيرها كثير.

القسم الثاني: قواعد بيانات على شكل خادم Server ومن أشهرها:
Microsoft SQL Server
Oracle
Sybase

للإنتقال من القسم الأول إلى القسم الثاني، لا بد من ملاحظة بعض الأمور الهامة جدا ومن ضمنها:

أن برامج القسم الثاني لا يوجد فيها مايكروز ولا نماذج ولا تقارير ولا شيء من هذا القبيل وقد تنبهت الشركات المصممة للبرامج الثلاثة إلى هذه النقطة وقامت بإضافة بعض البرامج الإلحاقية التي تساعد في تعويض هذا الإحتياج مثل:

Developer للأوراكل
Enterpise للـ.... MS SQL
Development Tools للـ.... Sybase

وهذه برامج إضافية أو إلحاقية تتعامل مع الخادم الأساسي لتبسيط عمليات إنشاء التقارير ونماذج الإدخال والإستعلام.

قبل الخوض في هذه البرامج (من القسم الثاني) لا بد من توضيح أهم فروق يميز هذه البرامج عن بعضها البعض وهو ببساطة شديدة --- عدد المستخدمين الذين يستطيعون الدخول إلى الخادم (إلى قاعدة البيانات) في نفس الوقت وفيما يلي بعض الأرقام التقريبية وليس للدقة:

الآكسس مثلا --- في حدود 10 شخاص
MS SQL -- في حدود 30 إلى 70 ألف شخص
Oracle -- في حدود 100 إلى 150 ألف شخص
Sybase -- بالملايين

ولهذا تجد ان إستخدامات Sybase ليست شهيرة في التطبيقات الإدارية ويقتصر إستخدامها تقريبا على المنشآت المالية الضخمة وأهم مستخدمين لل Sybase هي البنوك.

وعليه فإن القفز إلى Sybase ليس عملي على الإطلاق بالنسبة لنا...

يتبقى لديك الإختيار بين MS SQL و Oracle للشهرتهما الكبيرة جدا في بناء التطبيقات الإدارية ويوجد بينهما فرق بسيط جدا...

أن معظم البرامج في السوق هي تطبيقات لشركة ميكروسوف وعليه فإن الإنتقال إلى Oracle سيؤدي إلى ضرورة مواجهة والتغلب على بعض المشاكل الناتجة من المؤامة compatibility والدعم الفني Technical Support

من وجهة نظري أن MS SQL يوجد له في السوق كتب أكثر، يوجد له دعم فني عالي وسريع من قبل شركة ميكروسوفت ولا يوجد مشاكل في الموائمة.

بناء على الإضاءات السابقة أرى والرأي خاص لكل شخص ويتبع ذوقه وطريقته في التعلم...

تعلم الثلاثة مع بعضهما البعض عملية شبه مستحيلة وتستنزف طاقات وجهد وأموال لا داعي لها وعليه يتوجب الأمر التركيز على واحد منها فقط.

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

بعد (بضعة أسابيع) من التذوق والمحاولة والتجربة يتم التركيز على واحد منهم بقوة وشدة (وهذا ما فعلته أنا مثلا) وقد إخترت MS SQL بعد إستنزاف دام لسنة تقريبا في تذوق كلا من Oracle و ٍSybase.

ولكن...

مشكلة MS SQL انه لا يوجد معه أية برامج إلحاقية قوية تساعد على إنشاء نماذج الإدخال وتقارير الإخراج وغيرها وبرنامج Enterprise الملحق به يساعد في عمليات أخرى ذات قوة عالية جدا مثل User Defined Functions وكذلك مثل Stored Procedures وقد نتطرق لها لاحقا عند شرح بضعة دروس عن تطبيقات قواعد البيانات على الإنترنت.

الثمن الذي ستدفعه مقابل إختيارك MS SQL هو تعلم لغة أخرى تساعد على بناء نماذج الإدخال وتقارير الإخراج وأبسط هذه البرامج وأسرعها FrontPage و ASP.Net لتطبيقات الإنترنت و VB.Net لتطبيقات Client Server. وستصدم وتفاجأ عندما ترى أن كل ما تعلمته في نماذج وتقارير الآكسس هو نفسه تقريبا موجود في هذه اللغات !!! وهنا تكمن روعة وقوة شركة ميكروسوفت في أن ما تتعلمه يفيدك دائما في مرحلة أخرى.

يتبقى نقطة واحدة فقط لمساعدتك على إتخاذ القرار وهي أن الإنتقال من الآكسس إلى MS SQL أو Oracle ليس نزهة على الإطلاق !!! هو أشبه بالخروج من غرفة دافئة رومانسية إلى عاصفة رعدية وثلوج !!!!

هذه النقلة تتطلب تصميما شديدا وعرقا وتعبا في البداية وسهر ليالي وما إلى ذلك،، يجب أن تصبر على هذا الأرق والتعب لعدة شهور حتى تبدأ مرحلة الإنتقال وتبدأ في تذوق طعم وحلاوة هذه البرامج.

تحياتي،،،

مرحبا،،،

نعم --- أصبح ربط الجداول الأساسية الثلاثة سهلاً للغاية الآن من خلال جدول الحركة الذي قمنا بإنشائه وأصبحت كل العلاقة من النوع المفضل وهي واحد إلى متعدد.

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

سأحاول قدر إستطاعتي التواصل معكم ومع المنتديات الأخرى...

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

أتمنى أني قدمت شيئا يسيرا لكم،،، وأتمنى في هذه الليالي الفضيلة والمباركة وبالذات في العشر الأواخر وليلة القدر دعوات صادقة من أعماقكم بالذات لمن شعروا أنهم قد إستفادو من هذه الدروس.







مرحبا،،،

نعم --- أصبح ربط الجداول الأساسية الثلاثة سهلاً للغاية الآن من خلال جدول الحركة الذي قمنا بإنشائه وأصبحت كل العلاقة من النوع المفضل وهي واحد إلى متعدد.

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

سأحاول قدر إستطاعتي التواصل معكم ومع المنتديات الأخرى...

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

أتمنى أني قدمت شيئا يسيرا لكم،،، وأتمنى في هذه الليالي الفضيلة والمباركة وبالذات في العشر الأواخر وليلة القدر دعوات صادقة من أعماقكم بالذات لمن شعروا أنهم قد إستفادو من هذه الدروس.



















مرحبا بكم جميعا،،،

والسلام عليكم ورحمة الله وبركاته،،،

وتقبل الله منا ومنكم صيام الشهر الفضيل وقيامه (أعاده الله علينا جميعا أعواما كثيرة).

وكل عام وأيامكم ولياليكم بخير.

اللهم إغفر لنا ولوالدينا آجمعين.

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

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

والآن أمل من الجميع (مع فنجان من القهوة أو الشاي) ... نفس عميق ... شهيق ... زفير بهدوء وبطء..............

كل ما شرحناه هو 15% من قواعد البيانات فقط.

من أغمي عليه منكم...

سنتواصل بإذن الحق تبارك وتعالى.

تحياتي،،،


مرحبا،،،

أولاً للأخ tarekafifi أقول له أن Identity وكذلك Auto Number للتعليم والتدريب فقط وليست للمنتجات النهائية ومع ذلك يوجد هناك إستثناء واحد فقط وهو في بعض الجداول المساعدة.

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

نعود...

بإسم الحق تبارك وتعالى...

تعالوا بنا ننسى مستر Codd قليلا وننظر إلى قواعد البيانات من زاوية أخرى مختلفة تماما، وقد جرت بي العادة في معظم الدورات والمؤتمرات التي يكون لي شرف التحدث فيها عن قواعد البيانات أن أسأل سؤالآ يراه البعض في الوهلة الأولى أنه سؤال ساذج وسخيف !! ولكن الغريب هو أنه بعد بضعة دقائق من التركيز والتأمل يتحول السؤال وكذلك الإجابة عليه إلى موضوع في غاية التعقيد والنقاش والجدال، وحقيقة القول أن السؤال التالي يمكن أن يكون موضوعا جديدا في منتديات قواعد البيانات.

من يقرأ بسرعة لن يستوعب السؤال، من يتعامل مع هذه الدروس على أنها جريدة صباحية لقرآءة العناوين فلن يفهم شيئأ، من لم يكتب السؤال ببساطة وتأني وهدوء ومع فنجان قهوة فلن يفهم السؤال وسيستحيل عليه الإجابة، بالمناسبة (فنجان القهوة) هو كناية فعلية على الهدوء والتروي وأخذ نفس عميق... أسوأ انواع الدراسة هي تلك التي يدعي صاحبها أنه سيقرأ وسيفهم أو سيقرأ لاحقا ويدرس فيما بعد.

على كل من يريد أن يفهم قواعد البيانات أن يتعامل هذه الدروس بهدوء وروية وتأني، وحيث أنكم لا تروني ولا أراكم حيث جرت بي العادة أن يكتب كل مشارك إجابته على السؤال في ورقة ويقدمها لي ثم أقوم بقراءة الإجابات على الحضور. وولن نستطيع عمل هذا هنا ولهذا أعيد القول أن السؤال يحتاج إلى جهد وإلى تعميق وإلى تركيز شديد.

بإستخدم قلم وورقة. -- رجاء أكتب حتى تصل الفكرة واضحة تماما...

السؤال...

لماذا أتعلم قواعد البيانات؟

إذا لم تكتب السؤال وتنظر إليه عدة دقائق ومن ثم تكتب الإجابة بالتفصيل فسيتحول السؤال إلى سؤال بديهي وساذج بل تافه أيضا !!! ولكن صدقني في إجابة هذا السؤال قرارات مصيرية في رحلة تعلم قواعد البيانات. وقد تتفاجأ عزيزي القارىء أن هناك الكثيرين توقفوا فورا عن متابعة تعلم قواعد البيانات بعد إجابة هذا السؤال !!!

قد يتفاجأ من تقرأ معنا هذا الدرس أن معظم الإجابات على هذا السؤال هي خطأ 100%، لاحظ الثقة في أني أحكم على إجاباتكم قبل أن أسمع أي إجابة، هناك إجابة واحدة فقط صحيحة (من وجهة نظري) وكل الإجابات الأخرى خاطئة !!!!

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

أعود بمشئية الحق تبارك وتعالى وكلي أمل أن أجد بعض الإجابات.

تحياتي،،،


مرحبا،،،

أي جواب لا يكون على الصيغة التالية فهو خطأ 100% !!!

أتعلم قواعد البيانات لتحقيق رافد مالي جديد، بعبارة أخرى إذا كان الهدف غير تحقيق مكسب مادي فنصيحتي التوقف فورا عن تعلم قواعد البيانات وعدم إضاعة الوقت.

اذا الجواب الصحيح والوحيد هو تحقيق مكاسب مالية وأية أجابات أخرى لا معنى لها..

وحتى لا يغضب مني البعض مثل ما حدث في بعض المؤتمرات أستثني التالي:

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

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

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

آمل من الشرائح السابقة مغادرة قطار قواعد البيانات في هذه المحطة متمنين لهم رحلة سعيدة.

الشريحة التي تريد تحقيق مكاسب مالية (حقيقية) الرجاء البقاء في مقاعدكم إستعدادا للإنطلاق إلى المحطة التالية.

سنقوم بالتزود بالوقود وسنستمر بمشئية الله نحو محطة قادمة أحذركم من البداية أن فيها الكثير والكثير من المطبات الهوائية.

الرجاء ربط الأحزمة.

تحياتي،،،

مرحبا،،،

للمتابعين معنا والباحثين عن تحقيق مكاسب مالية أقول لهم، جهزوا قلم رصاص جديد ونبدأ بالكتابة مرة أخرى.

سيكون الآكسس ومثله من البرامج مثل FoxPro و Clipper و dBase وغيرهم أدوات للتعلم من حين لآخر --- فقط أدوات للمساعدة على التعلم.

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

كيف نصنع النماذج والتقارير ومن أين وكيف؟ هذه الطبقة الأولى !! من يتذكر؟

رفضنا الآكسس وغيره من البرامج المشابهة للمشاكل التالية:
Scalability
Availability
Simplicity
Server Oriented

من يذكر ما سبق؟؟؟

Scalability وتعني قابلية القياس، أو القياس للتبسيط وهي تعني أن قاعدة البيانات تعمل بنفس الكفاءة ونفس القوة بغض النظر عن عدد الجداول أو عدد السجلات أو عدد المتعاملين مع القاعدة في نفس الوقت. والمصطلح من الفعل To Scale أي يغير المقاس مثل المقياس المستخدم في الخرائط وغيرها.

Availability وتعني التواجد أي أن قاعدة البيانات دائما وأبدا متواجدة ومتوفرة ولا ينقطع الإتصال بها تحت أي ظرف وعليه إذا أراد صاحب الشركة أن يستعلم عن أرباح الربع المنصرم فإن الموظف لن يقول له أن قاعدة البيانات متعطلة.

Simplicity وهي بساطة وسهولة التعامل مع برنامج قاعدة البيانات وهنا الآكسس أفضل بكثير من غيره، ولكننا سنضحي بهذه الميزة للحصول على ميزات أفضل.

Server Oriented أي أن قاعدة البيانات تعمل على شكل (بث) Broadcasting للدخول إلى الخادم وليس على شكل ملف منفصل كما هو الحال مع الآكسس. بعبارة أخرى ملف MDB وهو إختصار Microsoft Data Base عبارة عن ملف منفصل مثل أي ملف آخر نصي أو وثيقة أو غيره يتعامل مع محرك Engine لتنفيذ أوامر SQL بشكل مبسط ولا يعمل على شكل Server خادم.

بعد تبسيط المصطلحات السابقة ننتقل مرة أخرى إلى درس قديم بدأناه في بداية هذه السلسة وهو Client و Server نعيد مرة أخرى:

Client هو الجهاز الذي يتعامل مع الطبقة الأولى ويحتوي بالدرجة الأولى على نماذج الإدخال والإخراج.

Server هو الجهاز الحاوي لبرنامج قواعد البيانات على شكل Server وكذلك على قاعدة البيانات نفسها التي تحتوي على الجداول والإستعلامات. ماذا يعني هذا؟

يعني...

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

وينطبق على هذا :
Micrsoft SQL Server
Oracle Server
Sybase Server

ولأن الخادم عليه قواعد البيانات فهو يمثل الطبقة الثالثة.

كما قلنا سابقا دعونا من الطبقة الثانية حاليا.

مرة أخرى...

تركنا الآكسس وما شابهه لعدم مقدرته على التعامل بشكل أساسي على طريقة خادم Server ولانه لا يدعم لا Scalability ولا Availability وإنطلقنا إلى أنه يوجد في السوق 3 أنواع من الخادمات.

وقد شرحت الفرق بين الخادمات الثلاثة في منتدى MS SQL Server وأعيد هنا مرة أخرى، أهم فرق بين هذه الخادمات هو عدد مستخدمي الخادم في نفس الوقت:

مثال:
Access عدد المستخدمين في نفس الوقت 15 تقريبا (وضعته هنا للمقارنة فقط)
MS SQL بالمتوسط عشرات الآلاف مستخدم في نفي الوقت
Oracle بالمتوسط مئات الالاف مستخدم في نفس الوقت
Sybase بالمتوسط بالملايين

لاحظ أن في الآكسس عدد المستخدمين الزين يعملون على ملف MDB في نفس الوقت (أي قاعدة بيانات واخدة فقط) بينما في الخادمات الثلاثة فإن العدد سيوزع على عدد قواعد البيانات الموجودة على الخادم.

مثال آخر: إذا وضعت 290 قاعدة بيانات على خادم MS SQL فإن عدد المستخدمين (في نفس الوقت) سيقسم على عدد قواعد البيانات وطبعا ليس شرطا ففي حالة أنه لا يوجد مستخدمين على 100 قاعدة بيانات مثلا فإن العدد يخصص لقواعد البيانات الأخرى.

بعبارة أخرى في الآكسس نقيس على قاعدة واحدة بينما في الخادمات تقيس على عدد المستخدمين لطاقة الخادم نفسه. لا نحتاج أكثر من هذا ولن ندخل في تقنيات معقدة.

الخلاصة هي أن الخادمات الثلاثة تدعم أعدادا هائلة جدا وكما ترى فإن Sybase يدعم أعدادا بمئات الألوف بل تصل إلى الملايين ويستخدم فقط في البنوك بالدرجة الأولى.

إذا Sybase قوته في حجم المستخدمين وكذللك في نواحي السرية Security، وطبعا أقترح عليكم جميعا بعدم تعلم Syabse، من يقول لي لماذ؟ أين الأذكياء؟

مستر Oracle يأتي في المرابة الثانية من حيث Security وعدد المستخدمين له في نفس الوقت.

ويقع MS SQL في المرتبة الثالثة.

من تختار؟ ORACLE أو MS SQL؟ ولماذا؟ طبعا تعلم الإثنين (عفوا) غباء !!! حيث يتطلب الأمر إحتراف أحدهما وأخذ فكرة عامة عن الآخر، ومحدثكم أحد هؤلاء الأغبياء حيث أضعت سنتين تقريبا وكانت غلطة.

أنتظر إجابة على السؤالين المطروحين؟

لماذا Sybase لأ؟
ماذا نختار ORACLE أم MS SQL؟

أنتظر بضعة إجابات...

تحياتي،،،


مرحبا،،،

أشكر كلاً من الأخ alhajri وكذلك الأخ m_fatehy على تفاعلهما وردهما الرائع بل الرائع جدا.

صحيح لن يتصل بك أحداً لتصميم قاعدة بيانات Sybase (إلا بمعجزة) وسبب ذلك أن Sybase تستخدم من قبل الشركات الضخمة لتصميم قواعد بيانات مفتوحة وكلمة مفتوحة تحتاج إلى شرح سريع.

عند تصميم قاعدة بيانات لديك إختياران لا ثالث لهما:

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

الثاني: تصميم قاعدة بيانات تصلح للجميع فتقوم بتصميم قاعدة بيانات لتأجير السيارات وتعمل منها آلاف النسخ وتبيعها في السوق لكل راغب في الشراء. وهذا هو النوع المغلق. مثل تفصيل ثياب وبدل وفساتين وتوزيعها في السوق وكل من يقوم بالشراء يجري بعض التعديلات.

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

معظم (إن لم يكن كافة) قواعد البيانات في عالمنا العربي المستخدمة في البنوك ومؤسسات النقد وشركات الأسهم وغيرها تستخدم قواعد بيانات مصممة من قبل برنامج Sybase وكذلك تم تصميمها من قبل شركات في أمريكا وأروبا.

هذا من وجهة نظري الشخصية يغلق باب Sybase إلا من يريد منكم أن يطرق باب هذا البرنامج بمحض إختياره. بعد ما سبق من إختار منكم Sybase فآمل منه أن يبدأ في الموقع التالي www.sybase.com

الفرق بين Oracle و MS SQL ما زال شاسعا وقد سألت هذا السؤال عدة مرات منذ بضعة سنوات في محفل رسمي وكانت الإجابات كلها Oracle دون تردد !! وحينها كان Oracle عشرات الأضعاف متفوقا على MS SQL من كافة الجهات ومع ذلك نصحت الحضور بالتوجه فوراً إلى MS SQL وكانت علامات الدهشة بادية على محيا الجميع !!!

حتى هذه اللحظة مازال Oracle أفضل من الناحية التقنية ومازال أفضل من ناحية Security ولكن شركة مايكروسوفت تتمتع ببضعة خصال تجعل من إقتراحي بإستخدام MS SQL مرجحا بشكل أكبر، فيما يلي بعضا من هذه الخصال:

أقتبس من الأخ alhajri -- سيطرة هذه الشركة على سوق البرمجيات
قوة الدعم الفني لشركة ميكروسوف تفوق الدعم الفني ل Oracle بمئآت الأضعاف
سرعة تتطور MS SQL تفوق سرعة تطور Oracle بشكل كبير وسريع وأرى أنه خلال بضعة سنوات سيتفوق MS SQL على Oracle وبشكل كبير
تكلفة إنتاج قاعدة بيانات بإستخدام MS SQL أرخص بكثير من Oracle
Compatibility أو التوافق بين البرمجيات يرجح كفة MS SQL لتفاعلها من البرامج الشهيرة بشكل أفضل بكثير من Oracle
سعر ترخيص MS SQL أقل بمراحل عديدة من Oracle

وبالمناسبة فليس لي علاقة لا من قريب ولا من بعيد بهذه الشركات لأفضل أحدهما على الأخرى (وياليت كان لي هذا للحصول على نسبة مقابل هذه التوصيات !!!).

وطبعا أعيد مرة أخرى وآمل التركيز أن كل ما نشرحه هنا ونتحدث عنه ينطبق على الخادمات الثلاث الشهيرة Syabse و Oracle و MS SQL حيث أننا هنا نتكلم عن قواعد البيانات ولا نتحدث عن البرامج المستخدمة في تصميم وتطوير قواعد البيانات.

الإختيار مناط بك في النهاية. أنت تقرر ماذا تريد أن تستخدم، وكل ما نقوله هنا ينطبق عليهم جميعا.

كانت لدينا من السابق مشكلة واحدة فقط وهي كيف نقوم بإنشاء نماذج الإدخال والإخراج والخادمات لا تدعم هذه الخدمة.

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

وكقاعدة عامة فإن هذه البرامج الإلحاقية من قبل الشركات الثلاث يوجد فيها الكثير بل الكثير جدا من التعقيد والمشاكل و Compatibility أي التوافق كما أن معظم هذه البرامج الإلحاقية كان موجها إلى Client Server وليس إلى الإنترنت وهو درسنا القادم بمشئية الله.

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

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

إذا برامج قواعد البيانات هي خادمات فقط وهذه هي قوتها وهذا هو ما إنشاؤها لأجله أن تحتوي على الجداول والروابط والإستعلامات فقط.

تحياتي،،،


مرحبا،،،

في صفحة خاصة منفصلة في الدفتر ضع عنوان إسمه (المشاكل الأساسية) وسنسرد في هذه الصفحة كافة المشاكل التي نحتاج إلى حلول لها.

حتى هذه اللحظة لدينا مشكلة أساسية واحدة وهي كيف نصمم نماذج الإدخال والإخراج عندما نستغني عن برامج بسيطة مثل الآكسس وغيره ونتوجه إلى الخادمات مثل MS SQL و Oracle.

مرة أخرى... لا يوجد لدينا طريقة لإنشاء نماذج الإدخال والإخراج.

نعود إلى أحد الدروس القديمة في بدايات هذه السلسة ونعيد التركيز على مصطلحين أساسيين وهما:

Client
Server

من يتذكر معنى هذين المصطلحين؟

أول شي ... Client عندما نسمعها أو نقرأها نتخيل الطبقة الأولى ويوجد فيها نماذج الإدخال والإخراج.

Server عندما نسمعها أو نقرأها نتخيل الطبقة الثالثة ويوجد فيها قاعدة (قواعد) البيانات (قواعد) لأننا على خادم. وقاعدة البيانات حسب ما تعلمناه فيها جداول وروابط وإستعلامات فقط.

نقطة أخرى في غاية الأهمية --- ركز --- لأ، ركز بشدة، المسافة بين Client و Server هي آلاف الكيلومترات !!!

سنتخيل أن جهاز Client موجود في شقة ما في عمارة ما في مدينة مكة المكرمة، و Server موحود في شقة ما في عمارة ما في مدينة لوس أنجلوس !! المسافة مين يعرف أكثر من 17000 كيلومتر !!!

كذلك سنتخيل أن جهاز مدخل البيانات موجود في شقة ما في عمارة ما في مدينة دبي.

قاعدة البيانات على الخادم في لوس أنجلوس فيها جدول صغير ببضعة حقول وبضعة عشرات من السجلات. بمعنى آخر مدخل بيانات واحد يكفي.

الأجهزة الثلاثة كلها مرتبطة بالإنترنت.

مدخل البيانات في مدينة دبي (مع فنجان من القهوة) يدخل إلى جهازه ويقوم بإدخال بضعة بيانات إلى القاعدة !!!

نركز ... ما الذي حدث؟

لإدخال بيانات إلى قاعدة ما نستخدم الأمر Insert Into (لا مشكلة إن كنت لاتتذكر فهذا ليس هو الموضوع)...نركز عندما يضغط مدخل البيانات زر الإدخال تحصل آلاف العملية التي لا نراها!!! من يستطيع أن يتقمص (مغمضا عينيه) لعدة دقائق أنك أنت جملة Insert وبعد إرسالك من خلال زر الإدخال بدأت رحلة شاقة أكثر من 18000 كيلومتر من دبي متجها إلى لوس أنجلوس !!!

هذا التخيل وهذا التركيز يتضمن عشرات المواضيع التي تتطلب منا جميعا ثقافة عامة، أكرر ثقافة عامة ولا يوجد مبرر لدراستها بعمق !!

مدخل البيانات أرسل سطراً واحدأ عبارة عن جملة Insert لإدخال سجل واحد فقط في قاعدة بيانات بعيدة جدا...

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

نحن كمبرمجين ومصممين ماذا يهمنا من هذه الرحلة؟ من يقول؟

يهمنا التالي:
سرعة نفاذ الجملة من الجهاز في دبي إلى كرت الموديم إلى الخط الهاتفي في دبي إلى المقسم في دبي إلى مزود الخدمة في دبي إلى Gateway الخاصة في دبي إلى أي كيبل بحري إلى أوروبا إلى الكيبل البحري في المحيط الأطلنطي إلى مدينة نيويورك إلى ITT إلى مقسم في لوس أنجلوس إلى ... إلى ... إلى ... إلى كرت الشكبة في عمارتنا إلى الجهاز إلى قاعدة البيانات إلى الجدول ... واووووووووو---إستراحة رحلة طويلة...

قلنا ما يهمنا بالدرجة الأولى هو ((((سرعــــــــــــــة)))) تنفيذ الجملة !!!!
حتى السرعة غير كافية...

في الإنترنت علم قائم بذاته يتطلب شرحا ثقافيا مستفيضا (وقد يكون أحد دروسنا يوما ما) وهو TCP/IP وهي أحد أهم بروتوكولات الإنترنت... مشكلة TCP/IP الأساسية أنها لا تضمن نقل البيانات من جهاز لآخر حول الكرة الأرضية وعليه لدينا مشكلة جديدة وهي من يضمن أن السجل قد دخل في قاعدة البيانات... والغريب أن معظم مصممي قواعد البيانات لا يلتفتون لهذه النقطة !!!!

نعود إلى صديقنا في مكة المكرمة وهو مجرد زائر يريد أن يطلع على بيانات القاعدة فيقوم بتنفيذ جملة Select للحصول على بيانات ما...

ركز معي مرة أخرى من فضلك... لنفترض أن قاعدة البيانات فيها إسم الموظف، إسم أب الموظف،إسم عائلة الموظف.

زسنفترض أن مدخل البيانات في دبي (موظف نشيط) وقام بإدخال 3 ملايين سجل في قاعدة البيانات.

الصديق في مكة المكرمة يريد أن يحصل على جدول مرتبا أبجديا حسب العائلة لكافة سجلات قاعدة البيانات... بسيط... ننفذ له جملة Select ومن ثم نلصق الأسم بإسم الأب بإسم العائلة مع فراغ بين كل منهما ليراه كإسم كامل ونقوم بالتنفيذ.

هل هذا صحيح؟ طبعا صحيح؟ ولكن لحظة ماذا حدث في هذا الجملة البسيطة جداً !!!! من يتابع معي؟

أخونا في دبي كان لديه مشكلة السرعة وضمان دخول السجل في القاعدة بينما أخونا في مكة المكرمة لا يوجد لديه مشكلة بل مصيبة... المصيبة هي أن هذا الشخص قام بإستدعاء 3 ملايييييييييييييييييييييييييين سجل من لوس أنجلوس لتصل إلى مكة المكرمة، وهذا عائق خطير جدا في أنظمة قواعد البيانات... لماذا؟ لأن الصفحة في مكة المكرمة ستأخذ ما لا يقل عن نصف ساعة لتفتح !!! حتى مع سرعة إتصال عالية جداَ بل سيقوم الأخ في مكة المكرمة بترك الموقع والذهاب إلى موقع آخر أسرع وأفضل من موقعنا.

إذهب إلى Yahoo وفي خانة البحث إكتب Internet وإنظر إلى الرقم الذي يوضح عدد النتائج ستجده أكثر من 160 مليون سجل، حتى في إتصال هاتفي بطيء جدا أرسل لك Yahoo 160 مليون سجل في بضعة ثواني !!! كيف حدث هذا؟ نحن 3 مليون سجل في نصف ساعة وأكثر و Yahoo يرسل لنا من قاعدة البيانات اكثر من 160 مليون سجل في ثانية أو أقل ؟؟؟؟؟

من يقول لي كيف هذا؟ ولماذ؟ أين الذين يدرسون؟
يكفيني بضعة إجابات لأني واثق ان الدروس التالية سجعل الكثير يعودون إلى منطقة الأمان وإلى طرقهم القديمة.. الكثير سيعود إلى حبيبة قلبه الآكسس قائلا لنفسه بلاش صداع !! وله الحق بل كل الحق ولكنه لن يربح ريالا واحدا طيلة حياته!!!

من يجيب؟

تحياتي،،،


مرحبا،،،

إستمروا في التفكير للحصول على إجابة السؤال السابق.

نواصل البحث في المشاكل...

عندما تطلبك شركة ما لتصميم أي برنامج يتصل بقاعدة بيانات فهناك ثلاثة إحتمالات لا رابع لهما:

الإحتمال الأول:
شركة في مدنية الرياض في السعودية، يوجد فيها 30 حاسب آلي مرتبطة جميعها بشبكة، هذا السيناريو يسمى LAN اي شبكة محلية. ببساطة شديدة تختار أي جهاز منها وتقول هذا هو الخادم Server ثم تختار جهاز آخر (حسب تصميمك) وتقول هذا الجهاز هو Backup أي الرديف، في حالة فشل الخادم Server الأساسي تنتقل العمليات إلى Backup لحين إصلاح الخادم وبهذا لا يكون هناك إنقطاع. ثم تختار جهاز ثالث وتقول هذا هو الجهاز المخصص لنماذج الإدخال ويستخدم من قبل مدخلي البيانات، تضع الجداول والإستعلامات على Server، تضع النماذج على جهاز الطبقة الأولى، ويتبقى لك 27 جهاز كمستخدمين. هذا السيناريو أو الإحتمال الأول يسمى Intranet لاحظ وركز إنترانت وليس إنترنت !!!

الإحتمال الثاني:
نفس الشركة السابقة قامت بإفتتاح فرع في مدينة جدة ويوجد في الفرع 15 جهاز مرتبطين بشبكة محلية LAN... هههههه--- أهلاً بك في عالم التوهان!!! هذا السيناريو أو الإحتمال يسمى WAN ومشكلته الآن تكمن في كيفية الربط بين الإدارة العامة في الرياض والفرع في جدة!!! والحلول المطروحة هي بإستخدم الخط الهاتفي (وهذا تخلف آسف حل يعود لى عشرات السنين إلى الوراء) أو بإستخدام دوائر مؤجرة تسمى DDN.

الإحتمال الثالث:
نفس الشركة السابقة قامت بإفتتاح فرع في واشنطن وآخر في القاهرة وثالث في مدينة لاهور في باكستان... الآن لا يوجد إلا حل واحد (إقتصـــــــــــــــــــــــــــادي) وهو الإنترنت!!

لا تقلق !!!

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

دورنا وعذابنا يبدأ بعد تصميم الشبكة حيث أن برمجة وتصميم قاعدة البيانات يختلف جذريا بإختلاف شكل Topography للشبكة.

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

قدرتك على الربط بشكل إقتصادي يشكل الفرق الأساسي بين من يحصل على المشاريع وعلى من يخسرها. الربط الغير إقتصادي مكلف وبهذا تصبح العروض أغلى، بينما طريقتك إقتصادية فتساعدك على الحصول على المشاريع والفوز بالمناقصات.

تعالوا بنا أشد الدروس إيلاما وتوجعيا لكل من يريد أن يحقق مبالغ مالية من قواعد البيانات، هذا الدرس مؤلم بشدة وأعنى انه سيؤدي إلى أن نخسر مجموعة أخرى كبيرة خشية إقتحام هذا العالم.

أولا: لتصميم الواجهات (النماذج والتقارير والإحصائيات) نحتاج إلى أداة مختلفة تماماً عن خادم قواعد البيانات، لماذا؟ لأن الخادم يعجز عن توفير هذه الخدمة ولأن الخادم مخصص فقط فقط فقط فقط للجداول والروابط والإستعلامات و(نقول فيما بعد).

ماهي الأدوات التي يمكن إستخدامها لإنشاء النماذج والتقارير... السؤال بسيط للغاية والإجابة بسط منه... الإجابة... اية لغة برمجة يمكنها عمل ذلك:

VB
++C
Java
Cobol
Perl
PHP
#C
....إلخ

هناك آلاف البرامج والتطبيقات التي تساعدك على عمل هذا بل أفضل من هذا كله يوجد تطبيقات (للمراهقين) تساعدهم على عمل هذا:

Cold Fusion
FrontPage
Dream Weaver
.... إلخ


والممتع جدا في الموضوع أن الآكسس يستخدم (جوجو) لن أقول ما هو جوجو !! وهي تساعدك بشكل كبير في إحتراف أي مما سبق.

ولكن لحظة....

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

كل اللغات والأدوات السابقة لا قيمة لها بدون آداة صغيرة ولذيذة وخفيفة الدم..

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

الآن إنسى كل ما درسته في عالم الحاسب الآلي، إرمي قواعد البيانات كلها وأترك الطبقة الثالثة وتعال نركز على الطبقة الأولى...

هيا بنا نقفز أول حائط في طريقنا... الأداة هي HTML
وهي إختصار ل Hyper Text Markup Language

ورقة بيضاء جديدة وقلم رصاص مبري ومحاية ومسطرة وفنجان قهوة.

هيا بنا إلى عالم HTML

تحياتي،،،


مرحبا،،،

لكل من تعلموا وتعلمن HTML بالطرق السيئة مثل طريقة FrontPage أقول لهم مثل ما قلت لأصحاب الآكسس، لا وألف لا... بعد بضعة دروس سنعود إلى FrontPage ستروا أن العملية عندما تدرس بشكل منطقي وبفكر مختلف تصبح أسهل وأوضح و...و...

أمل من المهتمين توجيه الأخوة والأخوات في منتدي الويب المشاركة معنا.

لا يوجد صفحة من مليارات الصفحات على الإنترنت أو الإنترانت إلا وهي على شكل HTML هذا كلام ممتع ويشعر بالغبطة والسرور.

ملاحظة أخيرة طرق البرمجة القديمة التي تسمى Client Server والتي لا تعتمد على HTML بشكل مباشر مثل Form Desiner في أوراكل أو النماذج في آكسس أو Visual Basic في MS SQL هي آخذة في الإنهيار -- تقنية (إلى حد ما قديمة) هذا الجيل (نقف له إحتراما) يتوجه الآن وبشكل مكثف إلى HTML ، لماذا؟ ببساطة لأن تكلفة الإنتاج بإستخدام HTML أرخض بمئات المرات من تلك البرامج وتكلفة الربط والصيانة أرخص.

ولهذا ستلاحظون سواء الآن أو بعد عشر سنوات أني قفزت على حاجز التصميم بإستخدام تقنية Client Server والذهاب مباشرة إلى HTML وعندما يحاوركم شخص ما عن فؤائد التقنية القديمة، ليس عليكم سوى الإبتسام فقط (وعلى مسئوليتي الشخصية) قطعا لن يكون HTML هو الأداة الوحيدة... ولكن الممتع هو أن كل اللغات تنتهي في آخر المطاف إلى HTML وها نحن نتعلم HTML لنرى ما هي نهاية هذا المطاف.

بإسم الحق نبدأ...

كافة ملفات HTML هي ملفات Text أي نصية
كافة ملفات HTML تنتهي بإمتداد html. مثل susu.html
كافة ملفات HTML تحتوي على علامات Markups وكل علامة تعني أمر من الأوامر
كافة العلامات والأوامر توضع بين علامتي <>
كل أمر من الأوامر (علامة) له بداية وله نهاية
بداية الأمر على شكل <>
ونهاية الأمر على شكل </>
أذا كان لدينا فرضا أمر سمه Ahmed
فتصبح البداية <Ahmed>
والنهاية <Ahmed/>

واضح...

أوامر HTML لا يمكن قرائتها وتفسيرها إلى من خلال متصفح ويوجد في العالم المئات من المتصفحات ولكن أشهرها إثنان:

Microsoft Internet Browser
Netscape Internet Navigator

الأول من شركة مايكروسوفت وهو شهير في العالم العربي وآسيا
الثاني من شركة نيتسكيب وهو شهير في أميركا وأوروبا

كل ملف HTML يجب أن يبدأ بالأمر <HTML> وينتهي بالأمر <HTML/>

في جهازك على سطح المكتب إنقر بالزر الأيمن وإختر ... لحظة .. لاتختر شيئاً...

للذين يستخدمون الويندوز بواجهة عربية أي لديهم (إبدأ) بدلاً من Start أقول لهم إتقوا الله في أنفسكم... وإعملو الليلة على إعادة تنصيب الويندوز بواجهة إنجليزية (مع عشقي للغة العربية) ... من يريد الإحتراف ويريد مالاً فلينفذ ما إقترحته فوراً.

بالزر الإيمن على سطح المكتب إختر New ثم Text Document لإنشاء وثيقة نصية على سطح المكتب. لا تغير الإسم، إنقر نقر مزدوج لفتح الوثيقة النصية، ثم من القائمة إختر File ثم ...Save As، الآن ركز...

في خانة File Name إكتب kuku.html ... لا تحفظ الآن ... لحظة
في الخانة التي تحتها Save as type إختر All Files لتجنب الحفظ بإمتداد txt
أقفل الوثيقة... ماذا تلاحظ على سطح المكتب؟؟؟

أخذت الوثيقة شكل علامة e الخاصة بمستكشف الإنترنت... نقر مزودج على Kuku.html وسيقوم المشتكشف بفتح أول وثيقة إنترنت HTML لك. مرحبا بك في عالم HTML

في قائمة المستكشف إضغط على View ثم على Source هذا الأمر يظهر لك محتويات الوثيقة، ماذا ترى؟ هههه !! نعم صفحة فارغة!! ماذا كنت تتوقع وأنت لم تكتب أي أمر بعد.

أغلق صفحة Source وأترك المستكشف مفتوحاً على صفحتنا Kuku إذهب إلى سطح المكتب. لديك الآن مشكلة فتح الوثيقة Kuku لتعديلها وهناك طريقتان:

الأولى بالضغط على Kuku بالزر الأيمن ومن ثم إختيار Open with ومن ثم ختيار برنامج Notpad الذي يأتي مع ويندوز..

الثانية هي فتح أي وثيقة نصية ومن ثم الأمر File ثم Open ثم إختيار All Files ثم إختيار kuku من سطح المكتب.

الآن لدينا kuku مفتوحا كبرمجة في Notpad ومفتوحا كعرض في مستكشف الإنترنت...

في الوثيقة kuku.html نطبق الشروط أكتب الجملتين التاليتين:
<HTML>
<HTML/>

على سطرين منفصلين تحت بعضهما البعض، الحروف الكبيرة والصغيرة لا فرق بينها.
إضغط على File من القائمة ثم Save. أتركه مفتوحا وإنتقل إلى المستكشف ثم إضغط زر F5 لتحديث الصفحة، الآن View ثم Source ماذا ترى؟

نعم سترى السطرين السابق إدخالهما من قبلك.

كل الأوامر في ملف HTML يجب أن تكون بين العلامتين <HTML> و <HTML/>

انتهينا من القاعدة الأولى والثانية -- مرة أخرى
القاعدة الأولى يجب أن تبدأ الوثيقة ب <HTML> وتنتهي ب <HTML/>
القاعدة الثانية كافة الأوامر يجب أن تقع بين العلامتين HTML، أي أمر خارجهما سيسبب الكثير من المشاكل.

القاعدة الثانية-- وهي أمر الرأس وأمر الجسد
علامة الرأس هي HEAD وعلامة الجسد BODY اي جسد الوثيقة أو المحتوى الأساسي وتكتب على الشكل التالي:


CODE
<HTML>

<HEAD>
<HEAD/>

<BODY>
<BODY/>

<HTML/>


من ضاع منكم؟

شرح سريع لما سبق...

بدأنا الوثيق ب HTML وأنهيناها بنفس العلامة
ثم أمر الرأس وأقفلناه، ثم أمر المحتوى وأقفلناه

هناك أوامر مخصصة للرأس وباقي الأوامر للمحتوى...

أهم أوامر أو علامات الرأس هو أمر العنوان TITLE
تعالوا بنا نغير أمر عنوان الوثيقة...

من الآن فصاعداً تتبع الخطوات التالية:
تعديل الوثيقة Kuku.html ثم تختار File ثم Save
ثم تنتقل إلى المستكشف وتضغط F5 للتحديث ومشاهدة التعديلات
ثم إذا رغبت في ذلك الضغط على View ثم Source لرؤية المحتويات حسب تصميمنا

فلنعدل عنوان الصفحة...
CODE
<HTML>

<HEAD>
<TITLE>
i love HTML very much
<TITLE/>
<HEAD/>

<BODY>
<BODY/>

<HTML/>


لاحظ أن Title يجب أن تكون داخل رأس الوثيقة Head، اي شيء تضعه بين بداية Title وإقفالها يظهر في أعلى صفحة المستكشف فوق في الأعلى في الجزء الأزرق أمل أن تروه... قم بالتجريب والإستمتاع.

أية معلومات أو محتويات توضع في الجسد او المحتوى او Body وأشهر العلامات P
وهي إختصار Paragraph أي فقرة..


CODE
<HTML>

<HEAD>
<TITLE>
i love HTML very much
<TITLE/>
<HEAD/>

<BODY>
<P>
Hello HTML pals and gals
<P/>
<BODY/>

<HTML/>


قم بالجريب...

الآن ركز معي بشدة...
لكل علامة من العلامات (الأوامر) تعديلات ... ركز تعديلات... أو فلنسمها أوامر فرعية... اي أوامر تساعد على تعديل الأمر وتحسينه.. معظم الأوامر لها تعديلات وإضافات.

كافة الأوامر الفرعية او التعديلات توضع في أمر الإفتتاح وليس الإقفال فمثلا أمر Body
يكتب على شكل <BODY> هذ أمر الإفتتاح وهو ما يمكن أن يحتوي على التعديلات أما أمر الإغلاق <BODY/> فلا يمكن أبدا أن يحتوي على اية تعديلات.

أين توضع التعديلات الفرعية، مثال:
<هنا BODY>

تبدأ هكذا
>
BODY
مسافة
التعديلات
>

لاحظ أن ما سبق هو أمر الإفتتاح...

أشهر التعديلات على أمر Body هو لون الخلفية للصفحة...

<Body bgcolor=blue>

عدل أمر Body حسب ما سبق وجرب... ماذا تلاحظ...

الأمر الشهير الآخر وهو Font وله تعديلات كثيره أهما حجم النص لونه واسمه ويكتب بالشكل التالي
<FONT> ويقفل بشكل <FONT/>

تعالو نعدل الأمر P ونضيف عليه أمر Font تصبح الوثيقة كما يلي:





CODE
<HTML>

<HEAD>
<TITLE>
i love HTML very much
<TITLE/>
<HEAD/>

<BODY bgcolor=blue>

<FONT face=arial size=30 color=white>
<P>
Hello HTML pals and gals
<P/>
<FONT/>

<BODY/>

<HTML/>


جرب ما سبق...

لاحظ اننا فتحنا أمر Font ثم فتحنا P ثم أقفلنا P ثم أقفلنا Font

المزعج جدا في HTML انه لا يوجد أخطاء، عندما تركب أمرا بشكل خاطىء يتم إهمال الأمر دون إعطائك أية معلومات عن وجود خطأ !!! وعليه لا بد من التدريب المكثف لإكتشاف الأخطاء.

تعالو نضيف صورة إلى الوثيقة... ضع صورة إسمها lolo.jpg في دليل c:\Tests

أضف الجملة التالية :
CODE
<HTML>

<HEAD>
<TITLE>
i love HTML very much
<TITLE/>
<HEAD/>

<BODY bgcolor=blue>

<FONT face=arial size=30 color=white>
<P>
Hello HTML pals and gals
<P/>
<FONT/>

<IMG src=c:\tests\lolo.jpg></IMG>

<BODY/>

<HTML/>

لاحظ أننا فتحنا الأمر IMG وأقفلنا على نفس السطر ولا مشكلة في هذا، الأمر IMG إختصار Image أي صورة، لاحظ أهم تعديلات الأمر IMG وهو SRC ويعني Source أي منبع أو مكان الصورة.

تحت أمر IMG أضف الأمر التالي:
<IMG width=100 height=100 src=c:\tests\lolo.jpg></IMG>

جرب، ماذا تلاحظ، بإستخدام التعديلين width و hieght قمنا بتعديل حجم الصورة!!!

سأستمر بشرح الأوامر الأساسية للغة HTML ولكن لإعطائك ثقافة عامة وقطعا هذا لا يكفي أبدا...

نصيحتي... لا تستمر معنا حتى تثق بنفسك وقدراتك على السيطرة على HTML

نستكمل بإذن الحق تبارك وتعالى...

تحياتي،،،
مرحبا،،،

الأخ m_fatehy أحي فيكم شجاعتك وتخيلك وإقتحامك فهذه عناصر مبرمج مفترس من الدرجة الأولى بغض النظر عن الإجابة.

طبعا الإجابة بحد ذاتها (وليس هذا مهما) خاطئة تماماً، لماذا؟

أولا لا يوجد شيء إسمه (على الجهاز نفسه) منذ مليار سنة ونحن نقول أن Client جهاز مختلف تماما عن جهاز Server ليس لضرورة الإختلاف بل لأن البروتوكول المستخدم في Client يختلف عن البروتوكول المستخدم من قبل Server اي أن HTML يختلف عن بروتوكول MS SQL مثلا. هذا موجود على طبقة والآخر على طبقة مختلفة تماما. ولكل طبقة قوانين مختلفة.

تقول أن عرض النصوص يأخذ ثواني !!! هذا غير صحيح على الإطلاق ولتصحيح هذا أقول أن النصوص المدرجة في وثيقة HTML تعرض بشكل سريع !! حتى وإن وضعت نصوص ضخمة ستصبح السرعة بطيئة للغاية !!!

من قال أن ياهو يستخدم نفس الخادم !!! غير صحيح لإختلاف البروتوكول كلامك صحيح أنه يمكن أن يكون جهازين في نفس المبنى بل في نفس الغرفة ولكن ليست المشكلة هنا... المشكلة كيف تم نقل 160 مليون سجل من أمريكا إلى السعودية في ثانية أو أقل... ستقول نصوص ... كلام صحيح ولكن حتى النصوص المكونة من 160 مليون سجل ستحتاج إلى نصف ساعة إن لم يكن بضعة ساعات ناهيك عن مشاكل ضياع بعض السجلات في الطريق !!!

جهاز Client لا يحتوي على أي برامج أو تطبيقات فقط متصفح، كل ضغطة زر على مفتاح الإدخال أو كل عنوان تتصفحه على الإنترنت هو رحلة آلاف الأميال من العميل إلى الخادم والعودة مرة أخرى، وبهذا ليست المشكلة في أن Client لياهو بجانب Server لياهو...

جهاز Client وظيفته أصدار الأوامر من المستكشف والحصول على النتائج من خلال المستكشف وطيلة الوقت لا يلعب سوى هذا الدور.

من قال أن ياهو يرسل البيانات سجلا سجلا... غير صحيح ولو كان هذا صحيحا فستأخذ العملية أياما بل أسابيعا للإنتقال والسفر بين جهازك وبين ياهو 160 مليون مرة !!!!!

انت طرحت أسئلة في أجابتك... أشعرتنى بمتعة ضخمة لأتلمس أين مواطن الخلل في شرحي لهذه الدروس وكيفية أن أحاول في أيصال هذه المعلومات لكم بشكل صحيح.

أشكر شجاعتك وأسلوب تفكيرك الرائع جدا بضغ النظر عن النتيجة، كمبرمجين يهمنا طريقة التفكير والتحليل والإختيار بين البدائل... أما الوصول للنتائج فهي للآخرين الأقل مهارة ورتبة منا !!!

مرة أخرى....

لا يوجد شيء أسمه Client و Server على نفس الجهاز ووضعهما على نفس الجهاز من الناحية التقية لا بأس به ولكن الثمن فاااااااااااااااااااااااااااااادح جدا بل قاتل وخطأ لا يرتكبه أحد على الإطلاق... وأذا طالت بنا هذه الدروس سنتحدث عن موضوع شيق جدا.

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

بدون قواعد بيانات:
Client
HTTP Server
Client

بقواعد بيانات:
Client
HTTP Server
Database Server
HTTP Server
Client

ببروتوكول نقل الملفات:
Client
FTP Server
Client

ببروتوكول البريد الإلكتروني:
Client
Email Server
Client

سيارة محملة 30 كغم رز تسير بسرعة فائقة
بينما سيارة محملة نص طن رز --- تحبو ....

إتصال ينقل 3 سجلات قطعا يختلف عن اتصال ينقل ملايين السجلات سواء نصوصاً كانت أم رز لا فرق!!! لأن الحجم هنا تجاوز منطق نوع الوثيقة. نعم نقل 3 سجلات نصوص أسرع من نقل 3 سجلات صور، ولكن عندما نتعدى منطق العدد وننطلق إلى الملايين تصبح النصوص والصور كلها مصائب...


كيف نجح Yahoo في نقل 160 مليون سجل في أقل من ثانية وفشلنا في نقل بضعة سجلات!!!

أشكر الأخ m_fatehy من أعماق قلبي.

تحياتي،،،


تحياتي،،،

أين نحن؟ نعم في بحر HTML وواحدة من أهم العلامات هي إنشاء الجداول...

ونستخدم الأمر TABLE ويوضع في منطقة BODY إذهب إلى Kuku وقبل نهاية علامة Body أدخل العلامة التالية:

<TABLE>
<Table/>

قد بالتجريب.... لن يحدث شيء لأن علامة الجدول لا قيمة لها بدون علامة السطر... تعالوا نضيف سطراً...وعلامته TR

<TABLE>

<TR>
<TR/>

<Table/>

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

<TABLE>

<TR>

<TD>
<TD/>

<TR/>

<TABLE/>

الآن لديك جدول رائع مكون من سطر واحد وعمود واحد. جرب... لا شىء!!! لماذا؟ لأن الخلية في الجدول فارغة !! ولكن ماذا لو أردت الخلية أن تكون فارغة !! في هذه الحالة لا بد من رسم حدود الجدول وعلامة الحدود هي تعديل على علامة Table بهذا الشكل:

<TABLE border=2>

<TR>

<TD>
<TD/>

<TR/>

<TABLE/>

أي أن حدود الجدول سماكتها 2، جرب مممم

أضف خلايا أخرى لنفس السطر

<TABLE border=2>

<TR>
<TD></TD>
<TD></TD>
<TD></TD>
<TR/>

<TABLE/>

ضع بعض المعلومات في الخلايا للتوضيح:

<TABLE border=2>

<TR>
<TD>A</TD>
<TD>B</TD>
<TD>C</TD>
<TR/>

<TABLE/>

لاحظ وركز أين كتبنا البيانات في الجدول، جرب رائع جدول حلو...

أضف بضعة سطور... ركز سطور وليس خلايا... راقب

<TABLE border=2>

<TR>
<TD>A</TD>
<TD>B</TD>
<TD>C</TD>
<TR/>

<TR>
<TD>3</TD>
<TD>12</TD>
<TD>25</TD>
<TR/>

<TR>
<TD>9</TD>
<TD>waaaw</TD>
<TD>No</TD>
<TR/>

<TABLE/>

واضح؟؟؟؟ إذا لم يكن إسأل !!!

عدل على العمود الأول لتغيير عرض الخلية...

<TABLE border=2>

<TR>
<TD width=250>A</TD>
<TD>B</TD>
<TD>C</TD>
<TR/>

<TR>
<TD>3</TD>
<TD>12</TD>
<TD>25</TD>
<TR/>

<TR>
<TD>9</TD>
<TD>waaaw</TD>
<TD>No</TD>
<TR/>

<TABLE/>

ألان قم بالتجارب التالية على الخلايا....

<TD bgcolor=yellow>B</TD> لتغيير خلفية الخلية
<TD align=center bgcolor=yellow>B</TD> لتوسيط النص في منتصف الخلية

<TD><IMG width=200 height=200 src=c:\tests\lolo.jpg></IMG></TD> ما هذا؟؟؟ نعم صورة في الخلية !!

من يرسم لي جدولاً فيه رقم المريض، جنس المريض، عمر المريض ويدخل 5 صفوف بحيث يكون كل صف بلون مختلف والبيانات في منتصف كل خلية؟

تحياتي،،،


مرحبا،،،

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

يسؤني وبشدة بل يغضبني أن بعض المشاركات مضللة حيث أن بعض الإجابات لم تكن فكرا صافيا وعميقا لل HTML بل أن بعض الرسائل الواردة هي نسخ ولصق من برامج أخرى مثل FrontPage وهذا فيه إساءة لأبسط أنواع التفكير !!!

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

يسؤني أن هذا المنتدى لديه مشكلة في التعامل مع اللغتين العربية والإنجليزية في نفس الوقت وقد رأيت بعض مشاركاتي ومشاركات الأخوة والأخوات أن الجمل البرمجية تنقلب رأسا على عقب وليتهم يجدون حلا لهذا. على أية حال آمل أن الجميع قد لاحظ أن علامة الإقفال لكل أوامر HTML تبدأ بالإشارة / ولا تنتهي بها !!!

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

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


لن نستمر كثيرا في عالم HTML لأن الطريق طوييييييييييييييييييييييييييييييييييل جدا !!

كل ما أرجوه هو أن أكون قائدا ناجحا لكم لإختراق الغابة!!! نعم كل ما أعمله هنا هو أن آخذ بأيديكم بتوفيق الله من ضفة إلى أخرى مع إعطائكم لمحات لأسس وقوانين كل محطة وأستراحة في هذه الغابة... عند وصولكم إلى الضفة الأخرى سيكون الأمر واضحا وجليا لكم وكل ما يتطلبه الأمر منك هو العودة مرة أخرى لكل محطة وإستراحة وإتقانها بشكل جيد... في تلك اللحظة سيكون لديك خريطة كاملة وواضحة تشرح من أين نبدأ وإلى أين ننتهي وكيف ندر أرباحا من هذا كله.

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

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

تعالو نسرد أوامر HTML: ولا تنسوا أن تسجلوها في دفاتركم !!!!

أوامر تعاملنا معها:
<HTML>
<HEAD>
<TITLE>
<BODY>
<P>
<FONT>
<TABLE>
<TR>
<TD>
<IMG>

أوامر هامــــــــــــــــــــــــــــــــــة جدا لم نتعامل معها:
<A> للريط بين وثيقتين HTML مختلفتين

<B> لجعل الخط عريض غامق Bold وتستخدم بهذا الشكل:
<P><B>Helllooooooooo</B></P>

<I> لجعل الخط مائل Italic وتستخدم بهذا الشكل:
<P><I>Helllooooooooo</I></P>

<U> لرسم خط تحت النص Underline وتستخدم حسب ما سبق

<BR> للإنتقال إلى سطر جديد بدون فقرة جدية -- لاحظ أن هذه العلامة ليس لها علامة إقفال !!! أي لا يوجد شيء إسمه </BR> !!

<HR> لرسم سطر وليس لها علامة إقفال !! ركز !!

<CENTER> لتوسيط أي شيء سواء نص أو فقرة أو صورة أو جدول إلخ..

<LI> إختصار ل List Item للترقيم على شكل نقاط
<UL> للترقيم على شكل نقاط
<OL> للترقيم على شكل نقاط

أوامر لم نتعامل معها ذات أهمية أقل لأنها تمثل فكرا للزخرفة والفن وليس للبرمجة:
<MAP> ونستخدم معها <AREA> وذلك لتقسيم أي صورة إلى صفحات مختلفة للإنتقال
<FRAME> لوضع أكثر من صفحة في صفحة HTML واحدة (تقنية قديمة جدا)
<EMBED> لإلحاق برامج أخرى بصفحة HTML مثل فلاش وغيره

أوامر البرمجة -- مرحبا بكم:
<DIV> إختصار ل Division
<script>
<INPUT>
<FORM>


أما الأوامر الأخرى فدعك منها (على مسئوليتي الشخصية) !!! فيما عدا الأمر <META> وهذا قصة قائمة بداتها !!! ذكروني فيه ذات يوم بعد التخرج !!!


مرة أخرى آمل من الجميع تخصيص ساعة أو إثنتين لمدة أسبوع على الأقل لمراجعة كل ما سبق وهناك آلآف المواقع التي تشرح كل ما سبق بالتفصيل الممل جداً ولا بأس في كتاب واحد (((((((((فقط)))))))))) لا داعي لأكثر من هذا.

كل ما أطلبه عدم الإنتقال إلى خطوتنا التالية إلا ولديك ثقة عالية بنفسك في عالم ال HTML ، بعد ممارسة HTML والتدرب عليها إفتح أي موقع على الإنترنت ومن ثم من قائمة View إختر Source ماذا ترى؟؟؟؟

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

صدق أو لا تصدق أن ما سبق يشكل إحتياجك ل 95% من عالم HTML !!!

بعد هذا سنركز على الأوامر الثلاثة الخاصة بالبرمجة ونأخذ بضعة أمثلة وتمارين ثم ننطلق إلى عالم DHTML ومنه نذهب إلى عالم ASP ثم نعود مرة أخرى إلى قواعد البيانات ونرى كيف نخلط الأربعة في كأس عصير منعش !!!

تحياتي،،،





مرحبا،،،

للأخ alswah أقول برافو --- أحسنت وبداية موفقة لمعضلة الياهو !!

ملاحظة سريعة وهي أن PHP آخذة في الزوال مثل Perl و ASP، أي أنها تقنيات عام 2001 وما قبله، Asp.Net وال Java ما زلا فرسي الرهان حتى الآن والسباق بينهما!!

ممتاز.

تحياتي،،،


مرحبا،،،

الأخ alhajri،،، معظم علامات HTML لا تتطلب علامة الإقفال أي أن علامة الإقفال إختيارية، وكلامك صحيح بالنسبة لإقفال علامة السطر وينطبق نفس الأمر أيضا على علامة الخلية !!!

ولكن لحظة !!!

نصيحتي أن تمارس إقفال كافة العلامات فيما عدا تلك التي ليس لها علامات إقفال مثل <BR> و <HR>.

إن التعود على إقفال كافة العلامات سيساعدك بشدة وبقوة عند البدء في برمجة HTML و DHTML و ASP.

تحياتي،،،






--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,05/ربيع الثاني/1430 هـ,03:43 صباحاً
المشاركة #5

الرتبة في المنتدى:ملازم أول

أيقونة المجموعة

المجموعة: أعضاء فعالين
المشاركات: 211
سجل في:الثلاثاء,08/ذو القعدة/1427 هـ,01:46 مساءً
الدولة:السعودية
رقم العضوية: 15928



شرح رائع ودروس من محترف فعلا ولكن هل يمكن ان تكون في مشاركة مستقلة حتى يتم الاستفادة منها جميع الزملاء


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

إضافة رد جديد إضافة موضوع جديد



 
الوقت الأن:اليوم,01:44 صباحاً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)