الاخ InternetMaster
الحقيقة وجودك هنا مكسب لنا جميعاً جعل الله ما تقوم به من جهود في ميزان حسناتك
واطالب مع بقية الاخوة بتثبيت الموضوع لاهميته
وشكرا
الاخ InternetMaster
الحقيقة وجودك هنا مكسب لنا جميعاً جعل الله ما تقوم به من جهود في ميزان حسناتك
واطالب مع بقية الاخوة بتثبيت الموضوع لاهميته
وشكرا
الاخ العزيز / InternetMaster
وعدت ووفيت جزاك الله خيرا وجعله فى ميزان حسناتك ونفعنا بعلمك
وكل سنة وانت طيب
مرحبا،،،
أعتذر لطول فنجان القهوة لإستقبالي بعض الضييوف، وحقيقة يبدو أن الضيف شعر بأني أهيم في عالم آخر "قواعد البيانات" وما ألذه من عالم !!!
ما زلنا نبحر من السيد 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 -- ماذا يحدث؟
من لم يعرف الإجابة أقترح عليه أن يبدأ مرحلة إعادة القراءة مرة أخرى بتركيز أعلى
نجيب فيما بعد بإذن الحق تبارك وتعالى.
تحياتي،،،
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
عذرا فلم أرى الموضوع لكثرة انشغالي بأمور خاصه .
بارك الله فيك وأجزل لك المثوبه أخي InternetMaster وفعلا اسم على مسمى .
سوف يتم تثبيت الموضوع و يستاهل وسام التميز لهذا الشهر
الف مبروك والله ويستاهل وسام التميز
ونشكرك يا مشرفنا الفاضل / فيصل الحربي
على تقديرك لكل جهد يبذل في هذا المنتدى واعطاء كل ذي حق حقه
من المؤكد أنه سيقوم بإضافة السجل الأول ... وعدم أمكانية إضاقة السجل الثاني وذلك لتكرار رقم المفتاح الأساسي ...
موضوع رائع
جزاك الله خيراً أخي ونفعنا بعلمك
مع خالص تحياتي
أخوك رضا عقيل
مرحبا،،،
ماذا يحدث عند إضافة سجل جديد في جدول الآباء بالبيانات التالية:
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 كلمة -- لغة ضحلة جدا أي أنه في بضعة شهور سيكون لديك مجموعة ضخمة من الكلمات الإنجليزية التي تكفيك لكل إحتياجات البرمجة والتصميم بل صدقني ستكون بعدها قادرا على قراءة الكثير من الصفحات باللغة الإنجليزية.
تحياتي،،،
السلام عليكم
اخي الكريم الجائزه هي اعطائنا الدورس الاساسيه لقواعد البيانات
وها انت تمطر علينا بما انعم الله عليك من علم وفوق ذلك ترصد
جائزه ضخمه .
وحتى الان انا لم استغني عن القرطاس والقلم الا بعد درسك الاخير
والسماح باستخدام الاكسس
والدعوات التي تنتظرها فهي اعظم واجل وهي الدعوه لك في ظهر الغيب
دون ان تدري .
وكل حرفت كتبته هنا ستجد اجره في يوم لا ينفع فيه احد الا العمل
الصالح والعلم النافع والولد الصالح .
ولا املك الا ان ادعو لك دعوه صادقه في ظهر الغيب .
تم تعديل هذه المشاركة بواسطة alhajri في 6 نوفمبر 2003 في 21:56
مرحبا،،
بعد ساعتين ونصف على العمل في أسئلة المسابقة، وجدت أن اقوم بتأجيل الأسئلة إلى الغد لأخذ مزيدا من الوقت. فعليه ستكون أسئلة المسابقة غدا بمشئية الحق تبارك وتعالى.
نعود إلى الآباء والأبناء، وتعالو سويا نكتشف بعض ملذات قواعد البيانات.
نلخص أولأ.
كل جدول في قاعدة البيانات وحدة مستقلة بذاتها وفيها حقل مميز يسمى المفتاح الأساسي أو الرئيسي وقد فعلنا هذا في الجدولين الأباء والأبناء وخصصنا كلا من حقل رقم الأب وحقل رقم الإبن كحقلين لمفتاحين أساسيين.
للمرة المليون: ما هو المفتح الأساسي؟
هو حقل يميز كل سجل في قاعدة البيانات ويمنع تكرار البيانات فيه لأكثر من سجل واحد ولا يسمح أن يكون فارغا.
إذا حاولت إضافة سجل في جدول الأباء أو الأبناء بدون إدخال قيمة في حقل المفتاح الرئيسي ستحصل على خطأ وسيمنعك البرنامج من الإكمال -- تذكروا أن هذا ليس في الآكسس فقط بل في كل قواعد البيانات في الدنيا. بعد عام 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 فقط، إذا أدخلت في جدول الأبناء أي قيمة غير القيم الخمس السابقة فلن تقبل القيمة --- جرب أية أرقام تريدها إستمر بالمحاولة.... لن تستطيع ولن يتم إدخال السجل إلا بقيمة من الخمس المذكورة، لماذا؟ لسبب بسيط جدا أنه هذه هي الطريقة التي يتعرف بها البرنامج على الآباء، فإذا أردت معرفة أب خالد تأخذ الرقم من الحقل الغريب وتذهب إلى جدول الآباء وهناك تبحث بهذا الرقم عن صاحبه للحصول على الأب.
والعكس صحيح اذا اردنا أن نعرف من هم ابناء اي اب نبحث عن كافة الابناء الذين يحملون رقم الاب في الحقل الغريب.
تحياتي،،،
ليست لي أية علاقة بالبرمجة اطلاقا و لكن حب الاطلاع شدني بهذه الدروس التي تبدو غريبة عن مجالاختصاصي, أهم ما تعلمته منك يا أستاذ"شيء غريب" هو المنطق, وجاذبية الى المغامرة في هذا المجال الذي لا أفقه فيه شيئا.
لي سؤال أيها الأستاذ الكريم:
هل يمكن أن أحاول الاجتهاد لانشاء قاعدة بيانات في اختصاصي و هو الادارة؟
دون أنسى لك الدعاء بالخير ,النجاح و التوفيق في ما نويته من خير.
أسأل الله العلي القدير أن يوفقك و يثبت خطاك.

السلام عليكم ورحمة الله وبركاته
أشكرك كثيرا على هذه الدروس
بارك الله فيك وفي علمك و جعل عملك هذا خالصا لوجهه الكريم .
أبارك لك اللقب الجديد ( خبير قواعد البيانات ) فألف ألف مبروك وتستاهل أكثر من ذلك
اللهم أغفر لأخينا InternetMaster في هذا الشهر الكريم .
تم تعديل هذه المشاركة بواسطة فيصل الحربي في 7 نوفمبر 2003 في 04:50
ما شاء الله عليك أستاذنا الخبير InternetMaster
لست أدري من أي جهاتك أثني عليك ..
أمن روعة أسلوبك ..
أم من تشويقك العذب ..
أم من المنهجية الرائعة في عرض الوضوع والتنظيم الدقيق ..
أم من الاجتهاد ..
أم من طلب الأجر والمثوبة ..
وفقك الله وبارك فيك وتأكد أن المتابعين هنا جادون كل الجد وما منهم إلا وقد نفذ كل ما تفضلت به .. وعن نفسي لقد توقفت في أول أو ثاني درس لك حتى أحضر الورقة والمسطرة والبراية والقلم والمرسام وحتى أكمل كتابة السجلات وكل شيء تفضلت به
أستاذي الكريم .. لدي ملاحظة .. وهي :
عند إدخال القيمة 1500 في المفتاح الغريب في جدول الآبناء لم يحدث خطأ لدي .. وذلك لأننا لم نفرض التكامل المرجعي في العلاقة بينهما ..
اللهم وفق عبدك InternetMaster لما تحب وترضى حتى الممات
اللهم ببركة هذا الشهر العظيم الكريم .. وبأسمائك الحسنى وصفاتك العلى
اللهم أجعله من ورثة جنة النعيم .. اللهم زده من عطاياك وفقهه فيما لا يعلم
اللهم أجزل ثواب من علم الناس فيما لا يعلمون وأغدق عليه موفور الحسنات
اللهم ثبت قلبه على حب الخير وأبعد قلبه وعلمه عن الرياء وأبعده عن عين الحساد
اللهم لا تحرمنا أجره و لاتحرمنا علمه وحرم جسده عن النيران
اللهم أغفر له ولوالديه وأهده السبيل الأقوم وأجعله ذريته من بعده هداة مهتدين
يارب العالمين
اللهم آمين .. اللهم آمين
أخي في الله هكذا هي قلوبنا وأكفنا نرفعها لله داعين توفيقك وسدادك
قولوا معي آمين ،
اللهم وفقه وأعنه على ذكرك وشكرك وحسن عبادتك، اللهم وفقه لما تحب وترضى، اللهم أحسن خاتمته، وأجعل قبره روضة من رياض الجنة، اللهم ارحمه وارض عنه، وارزقه الجنة التي وعدت عبادك الصالحين، اللهم انصر الإسلام والمسلمين، وأذل الشرك والمشركين، ودمر أعداء الدين واجعل تدبيرهم تدميرهم يا ذا الجلال والإكرام. ولك الحمد كما ينبغي لجلال وجهك وعظيم سلطانك .
وصلي أللهم على سيدنا وحبيبنا محمد وعلى آله وصحبه وسلم.

بسم الله الرحمن الرحيم
جزاك الله خيرا أخي العزيز على ما تقدمه لنا من كنوز لا تقدر بثمن ...
نسأل الله أن يجزيك خير الجزاء .. وأن ينفع بعلمك وعملك .. بارك الله فيك ..
أخي العزيز .. مثل ما قال الأخ الفاضل أحمد الحربي فإنها لا تظهر الرسالة التي تشير أن هناك خطأ ما إلا بعد فرض التكامل المرجعي ...
وفقك الله ...
مرحبا،،،
صح --- ما قاله الأخوة صح -- لن يظهر الخطأ، تعالوا نصحح ونرتب أفكارنا سويا...
وتعالو بنا أيضا نجيب على الأسئلة التي تركناها...
قم عزيزي القارىء بحذف كافة السجلات الموجودة في جدول الأبناء
قم بإختيار أدوات (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 قواعد البيانات تصلح لأي شيء وكل شيء، قل لي في أي بحر من بحور الإدارة تود إنشاء قاعدة البيانات وبإذن الله أساعدك.
تم تعديل هذه المشاركة بواسطة InternetMaster في 7 نوفمبر 2003 في 23:17
هذا الموضوع مغلق.