تسجيل الدخول

مشاهدة النسخة كاملة : الدرس الثاني , سلسلة دروس دورة "اوراكل .... الاحتراف"



The Coder
04-04-2007, 08:30 AM
بسم الله الرحمن الرحيم

الدرس الثاني


اسم الدرس : مقدمة عن قواعد البيانات
نوع الدرس : نظري
صعوبة الدرس : * من *****
محتوى الدرس :
- مفاهيم أساسية في قواعد البيانات العلائقية .
- المفتاح الأساسي وبعض الأمثلة البسيطة عليه .
- المفتاح الأجنبي .
- العلاقات ودرجات العلاقات .
ملاحظات :
تحمل , اصبر , وصابر ورابط , واقرأ الدرس , ولا انصح بفهمه مستقبلا . افهم الآن !!!

The Coder
04-04-2007, 08:34 AM
تحدثنا في الدرس السابق عن قواعد البيانات العلائقية و قلنا انه مجموعة من البيانات مخزنة بطريقة نموذجية دون تكرار والمتصلة مع بعضها وفق علاقات متبادلة .
و أنها ملفات تركيبتها خاصة .... (لماذا لها هذه التركيبة الخاصة ؟) لكي تستوفي بعض الشروط وبعض المميزات والتي ذكرناها والتي حلت مشاكل نظام الملفات المسطحة .
ولا ننسى مكونات قواعد البيانات .


الآن أريدك أن تعرف مسمى للأعمدة .. لان المسميات مزعجة قليلا .. فمثلا Attribute ( خصائص .. او صفات ).... فهي تخص الأعمدة .. أي ان الحقول (Field) هي نفسها خصائص هي نفسها صفات هي نفسها الأعمدة , لا تنسى هذا أبدا .
والصفوف تسمى بـ (Record ) سجلات , أي سجلات أو صفوف كلها نفس المعنى .


مفاهيم أساسية في قواعد البيانات العلائقية :
يجب أن نراعي في قاعدة البيانات العلائقية وجود المفاهيم التالية :

- اسم للجدول : مثل جدول الطالب , جدول المواد , جدول ..... والجداول هي كما قلنا ملفات .

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

مجال القيم (Domain ) : المقصود بها .. القيم الموجودة بداخل اسم الطالب مثلا , كم تأخذ حرف ؟ مثال آخر , رقم الطالب .. ما هو مجاله ؟؟ يعني هل من 0 – 9999 ؟؟ او من 0- 100000 مثلا ؟؟ ويمكننا تحديد مجال القيم لكل صفة على حسب احتياجنا .

مثلا العمود "اسم الطالب" أنا افرض انه يأخذ 15 حرف كحد أقصى .. و3 حروف كحد أدنى بمعنى آخر كم خانة ؟
والعمود "المعدل " افرضه من صفر الى 5 وان يكون كسري
والعمود "راتب المدرس" مثلا .. افرضه من 3500 ريال الى 9000 ريال ... يعني ليس من الممكن ان يكون راتب مدرس صفر ريال أو سالب 500 ريال , إذن مجال راتب المدرس هو من 3500 الى 9000

- العلاقة (Relation) : مثلا جدول المواد وجدول الطلاب , بينهما علاقة (Relation) ماهي هذه العلاقة ؟ سوف تعرف ذلك

- المفتاح الرئيسي للجدول (Primary key) : ماهو هذا المفتاح ؟ مجرد عمود , ولكن هذا العمود له شروط لكي يصبح مفتاح رئيسي للجدول

في نظام قواعد البيانات العلائقية , نشير للمرة المليون إلى أن الجداول هي مجرد ملفات .

قبل ان نبدأ لنرى مثالين على جدولين (ملفين) ... جدول الكتب لنظام مكتبات و جدول الموظفين لنظام شركة:




الصورة L2_P1





http://xs414.xs.to/xs414/07143/L2_P1.jpg



الصورة L2_P2

http://xs414.xs.to/xs414/07143/L2_P2.jpg

The Coder
04-04-2007, 08:38 AM
* المفتاح الأساسي أو الرئيسي (Primary Key) :


اولا هو مجرد عمود , حقل ما , الفائدة منه هي تمييز السجلات عن بعضها .
السجلات ممكن ان تتشابه , ووجب علينا التميز بينها ... كيف ؟ الآن ستعرف . انتبه أولا لشروط المفتاح الأساسي .

الشروط اللازمة لتوفرها في العمود لكي يكون مفتاح أساسي هو :
1- عدم التكرار .
2- أن لا يكون خالي .

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


يوجد لدينا جدول خاص بالموظفين لأحد الشركات
جدول الموظفين كما يلي



( الصورة L2_P2 السابقة )





http://xs414.xs.to/xs414/07143/L2_P2.jpg


ما رأيك .. ما هو العمود الذي ترى انه مفتاح أساسي .. أي عمود لم يتكرر او لم يكن خاليا ؟

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

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

هل "اسم الأب " هو المفتاح الأساسي ؟ لا لان سعيد تكرر مرتين

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

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

ولكن لحظة !!
قلنا انه من صفات المفتاح الأساسي ان لا يتكرر + ان لا يكون فيه قيم خالية
صحيح انه لم يتكرر في جدولنا هذا ... لكن احتمال انه يوجد موظف جديد راتبه نفس راتب سعد فادي مثلا ,,

هل تاريخ الميلاد هو المفتاح الأساسي ؟ لا ..... من الممكن أن يأتينا موظف تاريخ ميلاده نفس تاريخ ميلاد موظف آخر .

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

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

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


لماذا نضيف عمود .. ونزيد كمية البيانات بلا داعي؟ أليس هذا تكرارا ؟

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

أنا من ناحيتي ... أرى أن نضيف عمود جديد ويسمى "رقم بطاقة الأحوال المدنية" وهو رقم لا يتكرر أبدا بين المواطنين في دولة ما .. ولا يمكن ان يكون خاليا !!
مارأيك ؟ أو اقترح أن نضع أرقام عادية ... مثلا 1 , 2 , ...... الخ
يعني الموظف رقم 16 معروف انه سالم محمد .. والموظف رقم 23 هو سالم محمد آخر , والموظف رقم 3600 هو سالم محمد ثالث , والموظف رقم 1000000 هو سعد مسعود وهكذا , وطبعا لا يمكن أن نوظف شخص ولا نضع له رقم , لنعتبره نظام متبع في هذه الشركة حتى لا تكون هنالك قيم فارغة .
هل ترى عدم التكرار في هذا العمود ؟ هل ترى عدم وجود قيم خالية ؟ أرجو أن يكون ذلك واضح ,,
ماذا تقترح أنت ؟ ما رأيك أن نضيف مثلا عمود يسمى رقم الموظف كما في الجدول التالي



الصورة L2_P3

http://xs414.xs.to/xs414/07143/L2_P3.jpg



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

The Coder
04-04-2007, 08:40 AM
* الـعـــــلاقـــــات :
عرفت أن قواعد البيانات العلائقية بها ميزة العلاقات ولكني اعلم انك لم تفهم ما معنى العلاقات هذه ولماذا وكيف تتم .
لدينا مجموعة جداول معينة , في شركة ما مثلا .... لدينا جدول الأقسام ولدينا جدول الموظفين .... الخ .
الفكرة هي انه بين كل جدول وجدول علاقة , فمثلا جدول الموظفين و جدول الأقسام بينهما علاقة

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

ما رأيك أن نفترض هذا الجدول وهو جدول الأقسام والموظفين الذين يعملون تحت هذه الأقسام :



الصورة L2_P4 (جدول الموظفين والأقسام التي يعملون تحتها )



http://xs414.xs.to/xs414/07143/L2_P4.jpg


لاحظ معي هذه المعلومات , اعرف أن الجدول ليس به الكثير من السجلات ولكن تخيل أننا قصصنا هذا الجزء من الجدول .
انظر إلى قسم المحاسبة وهو قسم واحد ويوجد بمكة وبه 50 شخص , ...
انظر إلى قسم الصيانة , يوجد بالمدينة وبه 70 موظف
انظر إلى قسم المبيعات .. يوجد قسمين , قسم بالرياض وقسم بجدة ....
انظر إلى القسم الجديد "تقنية المعلومات" ولا يوجد به أي موظف , والى الآن لم يتم توظيف موظفين به ,,,, لذا لا بد من ذكره في الجدول .... كيف نهمله ؟ لكن ظهرت لنا مشكلة المفتاح الأساسي الذي أصبح خاليا بالرغم من أننا اخترنا عمود جدير باسم "مفتاح أساسي " !! يجب وضع مفتاح أساسي صحيح ؟

لاحظ الآن قسم المحاسبة , لاحظ معي أن هذا القسم به 3 موظفين وهم احمد سعيد , و خالد سعيد , وخالد نايف ...
لاحظ معي ان القسم به معلومات خاصة تكررت !! ... هل تتوقع التكرار هذا يؤثر كثيرا على تضخم المعلومات ؟
كم مرة ذكرنا ان قسم المحاسبة موقعه في مكة وبه 50 موظف ؟؟
ولو هناك 1000000 موظف في هذا القسم على سبيل المثال وتخيل أن معلومات القسم كثيرة مثلا في أي شارع وفي أي حي وكم مساحة المبنى الخاص به وما هو رقم المبنى ورقم الدور ومتى انشيء ومن هو مديرة وكيف أوصاف هذا المدير وما لون عينيه ... الخ من التفاصيل المهمة والشبه مهمة والتي تعتمد على النظام نفسه .


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

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

The Coder
04-04-2007, 08:45 AM
نرجع إلى موضوعنا , ماذا كنا نقول ؟
أها ,,, الآن عرفنا انه يوجد ملفين أو جدولين أو كائنين مستقلين في الصورة السابقة , هما كائن أو ملف أو جدول الموظفين , وجدول الأقسام .
الآن نصمم جدول خاص بمعلومات الأقسام . وليكن هذا الجدول :



الصورة L2_P5 (جدول الأقسام)


http://xs414.xs.to/xs414/07143/L2_P5.jpg

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



الصورة L2_P6 (جدول الأقسام النهائي)


http://xs414.xs.to/xs414/07143/L2_P6.jpg

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

الآن لدينا جدولين, جدول الموظفين ( الصورة رقم 4 السابقة ) , وجدول الأقسام (الصورة رقم 7 السابقة )
نريد أن نعرف أن الموظف خالد سعيد بقسم المحاسبة الذي بمكة !! كيف نعرف ؟؟ نريد أن نربط بين الجدولين , كيف نربط بين الجدولين ؟؟ لماذا فصلناهما وتحاشينا التكرار ثم ظهرت مشكلة هي الربط ؟

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

انظر الصورة :




الصورة L2_P7 (جدول الموظفين النهائي وكيفية ربطه بجدول الأقسام)


http://xs414.xs.to/xs414/07143/L2_P7.jpg


خالد سعيد , خالد نايف , و احمد سعيد ,,, يعملون في القسم رقم 10 ... ماهو القسم رقم عشرة يا ترى ؟ تتبع الخط الأحمر وانظر في جدول الأقسام لنكتشف أنهم يعملون في قسم المحاسبة بمكة والذي يستوعب 50 موظف .... الخ
أسف لأني اكرر دائما , و أسف لأني أعيد كلمات (تكرار اكرر مكرر ..... الخ ) , لكن صدقني أنني "طفشت" بنفسي , و أأمل أن ترسخ المادة ,,, لعلي افلح في ذلك .

الآن أريدك أن تلتمس وتشعر باستنتاجاتك النيرة , وان تتناغم مع هذه الدروس .
مارأيك في تكرار حقل "رقم القسم" الموجود في جدول الموظفين ؟ هل تعتقد أن هذا التكرار في جدولنا الضخم صاحب الـ 100000 سجل و 200 حقل , يؤثر كما كان يؤثر التكرار السابق في صورة رقم 5 ؟؟؟
صحيح تكرار , ولكن تكرار ضئيل جدا بالنسبة للتكرار التقليدي .

معلومة إضافية : بعض الأنظمة في بعض المؤسسات تعمل برامج خاصة تولد المفتاح الرئيسي, كيف ؟
مثلا جاءنا الموظف Mike Bill المولود في سنة 1987 فينشئ البرنامج له هذا الرقم MB87_1 على سبيل المثال , يأخذ أول حرف من اسمه , و أول حرف من اسم أبيه , سنة ميلاده , ثم عدد واحد كأول شخص له هذا الرقم
ويأتي موظف آخر Mohammad Bader المولود في نفس السنة , فينشئ البرنامج له هذا الرقم MB87_2 وهكذا ....
مثال آخر , عن الجامعات ... مثلا احد الطلبة رقمه 1234 وهو من دفعة 2004 أي دخل الجامعة سنة 2004 , فإنه يعرف بهذا الرقم "041234" , الرقمين 04 مأخوذة من 2004 ,
وطالب آخر من دفعة 1999 رقمه مثلا 991121 وهكذا ..... , أو يضيفون رقم الكلية إلى رقم القسم إلى ترتيب الطالب بين زملاءه ورقم السنة وينتج "رقم الطالب"

وهذا مجرد مثال .... على حسب المؤسسة على حسب الغرض ينتج الرمز .

الآن تشاهد جدول الموظفين في الصورة L2_P7 السابقة
انظر إلى حقل "رقم القسم" , نفس حقل "رقم القسم" في جدول الأقسام
"رقم القسم" صاحب جدول الأقسام مفتاح أساسي أو رئيسي , لا يتكرر ولا يمكن أن يكون خالي
"رقم القسم" صاحب جدول الموظفين ليس مفتاح أساسي , لأنه تكرر , واعتقد انه من الممكن أن يكون خالي ....
مارأيك في حقل يكون مفتاح أساسي في جدول , وهو نفسه ليس أساسي في الأخر ؟
هذا النوع من الحقول يسمى بالمفتاح الأجنبي Foreign Key ....
أعيد ......
هذا النوع من الحقول يسمى بالمفتاح الأجنبي Foreign Key .
ما فائدة هذا الحقل ؟؟ وكيف اعرف ما إذا كان هذا العمود مفتاح أجنبي أو لا ؟؟

The Coder
04-04-2007, 08:48 AM
* المفتاح الأجنبي (Foreign Key) :
غرضه هو ربط جدولين ... وكما في مثالنا السابق .. ربطنا جدول الموظفين بجدول الأقسام ... وجعلنا المفتاح الأجنبي في جدول الموظفين وهو العمود الخاص برقم القسم .
كيف تميز المفتاح الأجنبي ؟ المفتاح الأجنبي هو مفتاح أساسي في جدول آخر .. أي انه مفتاح أساسي في جدول الأقسام , وهو في جدول الموظفين أجنبي !!
المفتاح الأجنبي هو مفتاح أساسي في جدول ما , وليس مفتاح أساسي في آخر , لماذا هذه العباطة ؟ ما غرضه ؟ الغرض هو ربط جدولين بالطريقة التي اشرنا إليها .

لعل في ذهنك هذا السؤال المهم , لماذا وضعنا مفتاح أجنبي في جدول الموظفين ولم نضعه في جدول الأقسام ؟ سؤال ذكي ..
الجواب عند صاحبتنا "درجة العلاقات" , ابحث عنها , أو اصبر حتى الدرس القادم .

* درجــــــة الـــعـــلاقــــات(Relation Degree) :
سوف أتكلم نظريا عن مفاهيم هذه الدرجات , هناك ثلاث درجات وهي /

1- واحد لواحد (one to one) : مثل علاقة المسافر بالتذكرة ... فالمسافر الواحد يملك تذكرة واحدة للرحلة الواحدة.. والتذكرة الواحدة يمتلكها مسافر واحد للرحلة الواحدة
هل يمكن لمسافرين ان يمتلكان تذكرة واحدة للرحلة الواحدة ؟؟ لا .... وهل يمكن للمسافر ان يمتلك تذكرتين للرحلة الواحدة ؟ لا طبعا ...
مثال آخر ...
الشخص الواحد لديه روح واحدة .... الروح الواحدة في شخص واحد ...
إذن العلاقة : الملكية
الشخص يملك روح واحدة .... الروح الواحدة في شخص واحد

2- واحد لمتعدد أو متعدد لواحد (one to many or many to one ) : مثلا ان يعمل الموظف الواحد في قسم واحد .. والقسم الواحد يعمل تحته مجموعة موظفين (موظفين متعددين .. يعني ممكن يكون موظف واحد ويمكن أكثر ) هل استنتجت لماذا أضفنا المفتاح الأجنبي في جدول الموظفين ؟
إذن العلاقة في مثالنا :العمل
الموظف الواحد يعمل تحت قسم واحد .... القسم الواحد يعمل تحته مجموعة موظفين .
مثال آخر .. العلاقة بين رجل وامرأة الزواج .. الرجل يتزوج أكثر من امرأة ( في المرة الواحدة ) وان المرأة لا تتزوج إلا رجل واحد (في المرة الواحدة )....

إذن العلاقة في مثالنا : زواج
الرجل يتزوج امرأة أو أكثر في المرة الواحدة ..... المرأة تتزوج رجل واحد فقط في المرة الواحدة

أشير فقط أن علاقة واحد لمتعدد ومتعدد لواحد هي أكثر العلاقات رواجا وسهولة في نظم قواعد البيانات , ابحث دائما عنها .

3- متعدد لمتعدد (many to many) : مثل .. الطالب يدرس تحت مجموعة معلمين ... والمعلم الواحد يدرس أكثر من طالب
العلاقة في المثال : دراسة

مثال آخر .....
الكابتن الواحد يقود أكثر من طائرة ... والطائرة الواحدة يقودها أكثر من كابتن
العلاقة في مثالنا : قيادة


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

The Coder
04-04-2007, 08:51 AM
الواجب :


س1 : اضرب لي 3 أمثلة لم اذكرها لدرجة العلاقات (3 أمثلة لعلاقة واحد لواحد ... و3 أمثلة متعدد لمتعدد ... و 3 أمثلة لمتعدد لواحد أو واحد لمتعدد)

س2:في رأيك ... عندنا جدولين .. ويلزمنا أن نربط بينهما ... هما جدول المدينة وجدول الدولة
أين نضع المفتاح الأجنبي ؟ في أي جدول ؟
لم اشرحها ؟؟؟؟ إذن استنتج وخمن واشرحها لي أنت .

س3 : فكر في جدولين (مثال من عقلك لأي جدولين ) وأضف مفتاح أساسي , و أضف مفتاح أجنبي ... , و أتمنى لو تكون علاقة الجدولين واحد لمتعدد أو متعدد لواحد كما ذكرت في مثال اليوم .



التحديات :
س1 : هل تذكر الصورة L1_P2 في الدرس الأول ؟؟ وحاول أن تتحاشى تكرار البيانات , بمعنى آخر ... ذلك كان ملف مسطح , أريد أن تحول قاعدة البيانات تلك إلى قاعدة بيانات علائقية .... تستطيع ؟؟؟

المهام :

- أحضر برنامج الفيزيو VISIO .. من شركة مايكروسوفت .... وهو خاص برسم الـنماذج ... حاول أن تحصل عليه ... فهو مفيد جدا جدا ... في دروسنا .. وله مأرب أخرى ,,,,

Liquid Snake
08-04-2007, 12:37 PM
جزاك الله خير يا اخي الكريم "The Coder" وفعلا صدق الي سماك بيكاسو المنتدى :):)

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

تحياتي لك اخي الكريم

The Coder
09-04-2007, 07:01 AM
السلام عليكم ^^
ممتاز مااشاء الله تبارك الله
شكلك محترف قواعد بيانات , بس ماقلت لنا وش قواعد البيانات هذه يعني عن ايش تتكلم ؟
انا كنت ابي اخمن ولكن اريد اسمعها منك لكي يستفيد الجميع , وجزيت الف خير
وبيني وبينك اخي , انصحك بالفيزيو لرسم النماذج , صراحة عجيب في هالناحية
وكمان الاكسس صحيح يشبه الاوراكل من ناحية فكرة قواعد البيانات العلائقية
, لكن الاكسس للاستخدام الشخصي او استخدام جدا جدا محدود ولا يوجد ادنى مقارنة طبعا

اذا تبي الاحتراف , اوراكل وليس الاكسس , اذا تريد تكسب اموال , الاوراكل وليس الاكسس
هذه نصيحة عامة , واعتقد انك تعرف الاوراكل يا "ليكويد سنيك"

شكرا لتواجدك

Liquid Snake
09-04-2007, 02:25 PM
بالطبع اعرف الاوراكل ولي محاولات بتعلمها وما زلت احاول ان اتعلمها

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

لدينا في الشركة عدة شركات موزعة على 3 محافظات، ولكل شركة افرع ولكل فرع موظفين (تربط الموظف علاقة بالفرع من خلال الجدول TableLasen)
للموظف عدة جداول فرعية تربطه علاقات بهم وهم:
- رقم الحساب وهو مربوط بجدول آخر يحتوي على بيانات الراتب مثل تاريخ التحويل والخصومات الخ
- وملاحظات على الموظف على سبيل المثال بان الموظف استلم جوازه في تاريخ كذا او استلم الاوراق الرسمية في التاريخ كذا وارجعهم في تاريخ كذا.

ساكتفي بهذا الشرح حتى لا يتشتت الموضوع وهو تعلم الاوراكل

فانني جداً معجب باسلوبك وانتظر باقي دروست استاذنا الكريم :):):)

مودتي

The Coder
10-04-2007, 09:06 AM
مممم رائع رائع
اعرف انك لو .... لو نويت انك تتعلمها , حتحترفها , و اعرف قدراتك من كلامك
بس شكلك كسول مثلي ^^

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

انا لما تعلمت التحليل والتصميم ونظم البرمجة بشكل صحيح , رجعت لمشروع تخرجي ... يفشششششل

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

شكرا لك اخي ,وحياك الله ....

Liquid Snake
12-04-2007, 03:50 AM
اهلا اخي العزيز ذا كودر

شوف ،، من ناحية كسول كسول ما اقول لاء لووووووووووول

ﻻ اوريك اول مشروع لي بالاكسس ،، راح تضحك وانا استحي اخلي احد يشوفه (عكس اول ما صممته تمنيت ان كل الطلبه يشوفون عملي) اما لو اشوفه الحين راح اضحك عليه وعلى الاساليب البدائية الي متبعها فيه لوول

وانا لي محاولات بتعلم الاوراكل من خلال سيديات التعليم بس تعليم السيديات كان فاشل وضاعت فلوسي هباءا منثورا

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

فأجلت موضوع التعليم ليمه اخلص من الدورات الي قاعد اخذها حالياً

وان شاء الله من خلال دروسك راح ابتدي مشوار الاوراكل لاني فعلا اجهل هذه اللغة رغم فضولي وتحمسي في تعلمها



اعذرني على الاطالة





تحياتي

The Coder
14-04-2007, 10:20 PM
ههههههههههههه
اهلا بك اخي ثانية ,, صراحة الحالة متشابهة ههههههه
الله يوفقك وحياك الله اخي ومافي شي عادي طول زي ما تبي , وان شاء الله تبدأ معي بداية صح , وكلنا كذا .... كنا بدائيين مرة
حياك ,,,



احم ,,, واجبات ؟ شباب وين الناس ؟؟؟؟؟
شكل محححد يبي يقرأ .....

shjoonal3in
10-10-2007, 06:11 PM
هلا ... أنا هنا :D
قرأت الدرس وعندي كذا سؤال ...

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




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



أن يكون خالي يعني أن الموظف لا يعمل في قسم من أقسام الشركة !


كيف؟؟ أليست علاقة الموظف بالشركة (total participation) ...


مثل لما نقول مستحيل يكون فيه طالب جامعي لا ينتمي إلى كليه من كليات الجامعه ...!









الواجب :
س1 : اضرب لي 3 أمثلة لم اذكرها لدرجةالعلاقات (3 أمثلة لعلاقة واحد لواحد ... و3 أمثلة متعدد لمتعدد ... و 3 أمثلة لمتعدد لواحد أو واحدلمتعدد)




ثلاثة .... وااايد :28:


1- واحد لـ واحد: أقسام الشركة و رؤسائها .. قسم الشركة له رئيس واحد ... والرئيس يترأس قسم واحد ...
2- متعدد لـ متعدد: الطالب والدكتور ... الطالب يأخذ عند كذا دكتور والدكتور يدرس كذا طالب.
3- متعدد لـ واحد .. واحد لـ متعدد:
* الأب وابنه ... الابن له أب واحد بينما الأب له عدة أبناء.
* الشخص والدولة.. الشخص ينتمي لدولة واحدة والدولة ينتمي لها أشخاص كثر.






س2:في رأيك ... عندنا جدولين .. ويلزمنا أن نربط بينهما ... هما جدولالمدينة وجدول الدولة


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



أكيد في جدول المدينه ... لأن الدولة تنتمي لها مدن عديدة بينما المدينة تنتمي لدولة واحدة فقط ( one to many relationship) ...


باختصار لأن المدينه لا يمكن أن تنتمي لكذا دولة ...ولكن قد يتكرر اسم مدينه في كذا دولة فسيصبح مثلاً :
مدينة النخيل في دولة أ
مدينة النخيل في دولة ب
نفس الاسم لكن ... اذا ربطناها بجدول الدول ... تختلف لأن كل وحدة تنتمي لدولة
<<< أمحق شرح ... الله يهديك تقول اشرحوا واحنا من جنبها :D






س3 : فكر في جدولين (مثال من عقلك لأي جدولين ) وأضف مفتاح أساسي , و أضف مفتاح أجنبي ... , و أتمنى لو تكون علاقة الجدولين واحد لمتعدد أو متعدد لواحد كما ذكرت في مثال اليوم .




جدول الطالب وجدول الدرجات... نأخذ مثلاً رقم الطالب اللي هو أساسي في جدول الطلاب ونجعله أجنبي في جدول الدرجات...


جدول الطالب( رقم الطالب- اسم الطالب- اسم الأب- ..الخ)
جدول الدرجات( رقم الطالب- درجة الرياضيات- درجة الكيمياء- ... الخ)






التحديات :


س1 : هل تذكر الصورة L1_P2 في الدرس الأول ؟؟ وحاول أن تتحاشى تكرار البيانات , بمعنى آخر ... ذلك كان ملف مسطح , أريد أن تحول قاعدة البيانات تلك إلى قاعدة بيانات علائقية .... تستطيع ؟؟؟




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


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






المهام :


- أحضر برنامج الفيزيو VISIO .. من شركةمايكروسوفت .... وهو خاص برسم الـنماذج ... حاول أن تحصل عليه ... فهو مفيد جدا جدا ... في دروسنا .. وله مأرب أخرى ,,,,



تصدق ولا مرة استخدمته ! أذكر مرة استخدمت برنامج لرسم الـ Entities والعلاقات ما بينهم ... لكن نسيت اسمه ><'




ما شاء الله عليك ... موضوعك رهيب ...


الله يحفظك ... ويوفقك ... ويسهل لك أمورك في الخير :)
وشكراً

محلقة بلا جنحان
20-10-2007, 11:45 AM
س1 : اضرب لي 3 أمثلة لم اذكرها لدرجة العلاقات (3 أمثلة لعلاقة واحد لواحد ... و3 أمثلة متعدد لمتعدد ... و 3 أمثلة لمتعدد لواحد أو واحد لمتعدد)

1- Three relation one to one
Acadimic Number & Student name-
CPR & person-
Flag of a country & country-


2-many to many

Students & Advisors-
this example
my doctor say it in lecture
but not in :09:
this subject ( Data base)
we take it in object oriented
(java)

Im new in Data base:35:

Customers & commodity-
The readers & magazines-


3- One to Many or Many to One

in families

The relation between childs-
and his father
or between childs and
her mother

Allah and the servents-

The King of another country and the-
nation






س2:في رأيك ... عندنا جدولين .. ويلزمنا أن نربط بينهما ... هما جدول المدينة وجدول الدولة
أين نضع المفتاح الأجنبي ؟ في أي جدول؟
لم اشرحها ؟؟؟؟ إذن استنتج وخمن واشرحها لي أنت .


We have 2 tables
one for country
and another for the city.

I think
we should put the forigen key in
city tables as you do in previous example.

the city is in the country
the country have many cities.


Correct my answer, please
I will contiue answering later
Inshaalla

Be in protect of Allah
thank you alot