الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه just now في 9 أغسطس 2006 · 5 رد · 1,282 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الأخوة الأعضاء الكرام

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

وما أريده هو تعديل العلاقة بينهم بحيث عند إدخال بيانات الحقلين في النموذج 1 تظهر في النموذج 2 ولا أحتاج إلي إدخالها مرة أخري

شكرا للجميع وفقكم الله عز وجل

db3.rar

سوف أنسى الأمس واليوم و قــد أنــسى غــــــــــــــــــــدا

و سأنسى فترة في العمر قـــد ضاعت ســــــــــــــــــدى

غير أني سوف لا أنسى ســــــــــــــــــــــــــؤالا واحدا

حــــين قال القلب يوما فـــي ارتـــباك: كــــيف أنسي

#2

:huh:

أرجو المساعدة من الأخوة الأفاضل

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

فهل من حل

سوف أنسى الأمس واليوم و قــد أنــسى غــــــــــــــــــــدا

و سأنسى فترة في العمر قـــد ضاعت ســــــــــــــــــدى

غير أني سوف لا أنسى ســــــــــــــــــــــــــؤالا واحدا

حــــين قال القلب يوما فـــي ارتـــباك: كــــيف أنسي

#3

اخي الفاضل

السلام عليكم ورحمة الله وبركاته

تفضل هذا برنامجك بعد التعديل

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

شرح طريقة التعديل :

1. تم جعل الرقم المعرف LabourId ترقيم تلقائي ومفهرس في الجدول الاول

2. تم جعل الرقم المعرف LabourId كرقم ومفهرس في الجدول الثاني

3. تم عمل علاقة واحد الى متعدد بين الرقمين من ناحية الرقم المعرف الاول

4. تم عمل استعلام الحاق بيانات من الجدول الاول للثاني

5. تم عمل زر امر وتحته امر تشغيل الاستعلام وفتح النموذج الثاني

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

وهذا ملفك بعد التعديل

Just_NOW.rar

اختكم

زهره

#4

السلام عليكم

الأخوة الكرام

الأخت الفاضلة الأستاذة زهرة

ما لم أكن أتوقعه أن من يقوم بالرد هو ..............

ذات ليلة تجولت بين البساتين ...................

أبحث عن إجابة لتساؤل أضناني الكثير ............

فإذ بزهرة تتلألأ بين الرياحين ..................

بهديل .... ما بك مستاء إلي حد مرير ..............

فرويت ضالتي مثلي مثل الكثيرين .............

فأجابتني بإسهاب وحتي دون تفكير ...................

فيا لحظك أيها البستان بين البساتين .............

لديك زهرة تعبقك طيباً ومرمي نضير ................

" فكل رحالة سيمر يوماً بك ................ سيمكث مقرراً عدم الرحيل "

الأستاذة الكبيرة

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

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

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

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

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

أسف للإطالة

أشكرك شكراً جزيلاً

سوف أنسى الأمس واليوم و قــد أنــسى غــــــــــــــــــــدا

و سأنسى فترة في العمر قـــد ضاعت ســــــــــــــــــدى

غير أني سوف لا أنسى ســــــــــــــــــــــــــؤالا واحدا

حــــين قال القلب يوما فـــي ارتـــباك: كــــيف أنسي

#5

اخي الفاضل just now

السلام عليكم ورحمة الله وبركاته

اقتباس
لماذا قمتي بتغير حقل رقم الموظف إلي ترقيم تلقائي

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

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

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

نأتي الان الى الجزئية الهامة في سؤالك

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

هذه الجزئية من السؤال بالذات تختلف اختلافا كليا عما تريده في مشاركتك وها انت تعود لصوابك ورشدك بعد اكتشافك المشكلة

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

انظر ماذا يقول لك الاستاذ احمد الحربي بشأن العلاقات

اقتباس
العلاقات وأنواعها وخصائصها :

تنقسم العلاقات من حيث الأنواع إلى ثلاثة أقسام :

1- علاقة واحد لواحد (One To One) :

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

مثال :

العلاقة بين جدول بيانات الموظف وجدول بيانات الراتب :

الحقول كالتالي : رقم الموظف ، اسم الموظف ، تاريخ التعيين ، تاريخ المباشرة ، الدورات التي حصل عليها ، المؤهل ، مقدر الراتب ، مقدار العلاوة السنوية .. الخ

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

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

2- علاقة متعدد لمتعدد (Many To Many) :

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

مثال :

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

جدول المعلمين يتضمن الحقول التالية : رقم المعلم(مفتاح أساسي) ، اسم المعلم .

جدول الفصول يتضمن الحقول التالية : رقم الفصل (مفتاح أساسي) ، اسم الفصل .

جدول الربط يتضمن الحقول التالية : رقم المعلم (مفتاح فرعي لجدول المعلمين ) ، رقم الفصل (مفتاح فرعي لجدول الفصول) لتكون البيانات كالتالي :

اسم المعلم : محمد ورقمه 10 ، علي ورقمه 11 في جدول المعلمين

اسم الفصل : الأول ورقمه 5 ، الثاني ورقمه 6 ، الثالث ورقمه 7 في جدول الفصول .

وفي جدول الربط تكون البيانات كالتالي :

رقم المعلم 10 ، رقم الفصل6

رقم المعلم 10 ، رقم الفصل7

رقم المعلم 11 ، رقم الفصل6

رقم المعلم 11 ، رقم الفصل5

3- علاقة واحد لمتعدد (One To Many) :

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

مثال :

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

أنواع العلاقات بين الجداول من حيث الربط :

تنقسم إلى ثلاثة أقسام :

1- ربط داخلي :

وفيه يتم إظهار سجلات الآباء المرتبطين بأبناء فقط أما الآباء الذين ليس لديهم أبناء فسيتم تجاهلهم ولن يظهروا في النتائج . تستخدم فيه العبارة INNER JOIN

وعبارة SQL هنا هي :

SELECT fields FROM tbl1 INNER JOIN tbl2 ON tbl1.ID=tbl2.No

2- ربط خارجي تام :

وفيه يتم إظهار جميع السجلات من الجدولين بلا شروط بل سيحضر جميع السجلات من الجدول الأول وكذلك من الجدول الثاني وتستخدم فيه العبارة FULL OUTER JOIN

وعبارة SQL هنا هي :

SELECT fields FROM tbl1 FULL OUTER JOIN tbl2 ON tbl1.ID=tbl2.No

3- ربط خارجي أيمن :

وفيه يتم إظهار سجلات الجدول الأيمن جميعها سواء ما كان له أبناء أم لا ولا يظهر من سجلات الجدول الأيسر إلا ما كان له موافق في سجلات الجدول الأيمن وتستخدم فيه العبارة RIGHT JOIN

وعبارة SQL هنا هي :

SELECT fields FROM tbl1 RIGHT JOIN tbl2 ON tbl1.ID=tbl2.No

4- ربط خارجي أيسر :

وفيه يتم إظهار سجلات الجدول الأيسر جميعها سواء ما كان له أبناء أم لا ولا يظهر من سجلات الجدول الأيمن إلا ما كان له موافق في سجلات الجدول الأيسر وتستخدم فيه العبارة LEFT JOIN

وعبارة SQL هنا هي :

SELECT field1 FROM tbl1 LEFT JOIN tbl2 ON tbl1.ID=tbl2.No

ملاحظة : الجدول الأيمن أي يمين العبارة RIGHT JOIN

الجدول الأيسر أي يسار العبارة LEFT JOIN .

العلاقات من حيث تعدد الجداول :

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

1- ربط ثلاثة جداول فأكثر :

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

مثال : لنفترض أن لدينا ثلاثة جداول

الأول : جدول بيانات الزبون

الثاني : جدول الطلبات

الثالث : جدول المنتجات

وأردنا معرفة الزبائن الذين اشتروا سلعة معينة فنقوم بربط جدول المنتجات بالطلبات لأخذ اسم السلعة ومن ثم ربط الطلبات بالزبائن لمعرفة اسم الزبون

2- ربط جدولين :

وهذا مر معنا وهو الأكثر .

3- ربط الجدول مع نفسه :

ونحتاج هذا حين تتعدد مهام الجدول :

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

يتكون الجدول من الحقول التالية :

رقم الموظف(للجميع)

اسم الموظف

رقم المدير : وهذا الحقل يكون فارغاً في سجل المدراء ويأخذ قيمة رقم الموظف (المدير) بالنسبة لسجل رؤساء الأقسام

رقم رئيس القسم : وهذا الحقل يكون فارغاً في سجل المدراء ورؤساء الأقسام ويأخذ قيمة رقم الموظف (رئيس القسم) بالنسبة لسجل الموظفين

فلمعرفة المدير من رئيس القسم من الموظف كالتالي :

إذا كان حقل رقم المدير فارغاً فهذا يعني أنه مدير

وإذا كان حقل رقم المدير ورقم رئيس القسم فارغاً فهذا يعني أنه رئيس قسم

وإذا لم يكن حقل رقم رئيس القسم فارغاً فهذا يعني أنه موظف

ولمعرفة رؤساء الأقسام الذين ينتمون إلى مديرهم نقوم بربط الجدول مع نفسه بين حقلي رقم الموظف ورقم رئيس القسم

ولمعرفة الموظفين الذين ينتمون إلى رئيس القسم نقوم بربط الجدول مع نفسه بين حقلي رقم الموظف ورئيس القسم

تم تحرير المشاركة بواسطة أحمد الحربي: Feb 23 2004, 12:13 AM

ولمزيد من الايضاح بالشرح المصور انظر ماذا كتب لك الاستاذ محمد طاهر

العلاقات بين الجداول فى الأكسيس

وهذا مثال على هذه العملية

Just_NOW_UP2.rar

اختكم

زهره

#6

السلام عليكم

الأخت الغالية الأستاذة زهرة

أنا فعلا عاجز عن الشكر فهذا كرم بالغ لا أستحقه

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

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

أشكرك جدا جدا

وأنا سأقرأ ردك بعناية مرات ومرات

يكافئك المولي عز وجل بما تستحقين

سوف أنسى الأمس واليوم و قــد أنــسى غــــــــــــــــــــدا

و سأنسى فترة في العمر قـــد ضاعت ســــــــــــــــــدى

غير أني سوف لا أنسى ســــــــــــــــــــــــــؤالا واحدا

حــــين قال القلب يوما فـــي ارتـــباك: كــــيف أنسي

هذا الموضوع مغلق.

مواضيع مشابهة