اذهب إلى المحتوى
  • 0

إستفسار عن العلاقة Foreign Key في قاعدة البيانات

Mohamed Sherif14

السؤال

Recommended Posts

  • 1
بتاريخ 57 دقائق مضت قال Mohamed Sherif14:

أرجوا ان يكون الملف مفهوم

Book1.xlsx

ماهو الجدول رقم 3 في الملف أعلاه؟ هل هو البيانات التي تريد عرضها للمستخدم  بعد تنفيذ sql query  وكنتيجة لها؟ إذا كان هذا هو المقصود ومشكلتك فقط في أسماء الحقول التي تريد تغييرها فيمكنك فعل ذلك كما تقدم في رد سابق وتستطيع إستعمال الخاصية as لتغيير أسماء الأعمدة وإظهارها بالإسم الجديد ولكن هذا كله يحصل وينتهي أثناء تشغيلك للكود وإخراج النتائج, أي أن أسماء الأعمدة في الجداول مرتبطة بالschema مسبقة التعريف.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بشكل عام الجواب لا. فال Foreign Key فقط يمكنه أن يكون مرجعاً لأعمدة فريدة من جدول آخر، أي أنّ ال Foreign key لا بدّ أن يكون مفتاحاً مرشّحاً في جدول آخر كما أنّ ال Primary key هو مفتاح مرشّح في الجدول.

حيث المفتاح المرشح هو أقل المفاتيح الفائقة super key صفاتٍ -أي أقلها عدد أعمدة- (والمفتاح الفائق: هو صفة أو مجموعة صفات من الجدول تعطي تعريفاً فريداً لكل سطر).

يمكنك الرجوع إلى موسوعة حسوب عبر الرابط التالي لتتعرف أكثر على استخدام المفتاح الأجنبي Foreign key موسوعة حسوب - مفاتيح الجداول

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لنفرض أن لديك ثلاثة جداول وهي كالتالي table1, table2, table3 ويحتويtable1 على foreign-key للجدول table2 وبهذه الحالة تستطيع الوصول الى معلومات سطر واحد أو أكثر في table2 طالما كان الforeign-key الموجود في بيانات table1 مرتبطاً ببيانات موجودة فعلاً في table2. وععمل ذلك يكون من خلال الأداة join  في قاعدة البيانات (mysql) أو ما يقابلها في قاعدة البيانات المعنية.

إذا أردنا الوصول الى بيانات في table3 من خلال البحث في table1 ولايوجد foreign-key للجدول table3 في table1, ولكن كان table3 يمتلك foreign-key في table2 فإنك بهذه الحالة تستطيع الوصول الى بيانات table3 في table1 عن طريق table2 لأن الأخير يعمل كسجر في هذه الحالة وتستطيع ذلك من خلال عمل أكثر من join واحدة لعمل الربط.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 19 دقائق مضت قال علي محسن:

لنفرض أن لديك ثلاثة جداول وهي كالتالي table1, table2, table3 ويحتويtable1 على foreign-key للجدول table2 وبهذه الحالة تستطيع الوصول الى معلومات سطر واحد أو أكثر في table2 طالما كان الforeign-key الموجود في بيانات table1 مرتبطاً ببيانات موجودة فعلاً في table2. وععمل ذلك يكون من خلال الأداة join  في قاعدة البيانات (mysql) أو ما يقابلها في قاعدة البيانات المعنية.

إذا أردنا الوصول الى بيانات في table3 من خلال البحث في table1 ولايوجد foreign-key للجدول table3 في table1, ولكن كان table3 يمتلك foreign-key في table2 فإنك بهذه الحالة تستطيع الوصول الى بيانات table3 في table1 عن طريق table2 لأن الأخير يعمل كسجر في هذه الحالة وتستطيع ذلك من خلال عمل أكثر من join واحدة لعمل الربط.

شكرا للمشاركه و لكن :

المطلوب ليس الوصول للمعلومه بل جعل البيان المكتوب في صف الforeign key هو الاسم الفعلى للبيان في ال parent و ليس الكود :)

لنفرض حسب مثال حضرتك ان T1 يحتوي علي 2 atribute [الكود] و هو ال (T1)primary key + [الاسم] و ال T2 يحتوي علي 3 atribute [الكود] و هو ال (T2)primary key + [الاسم] + [الاسم2] و هو ال foreign key T1

كيف يظهر value  [الاسم2] الفعلي في الجدول و ليس value الforeign key  ;)

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

 

بتاريخ 2 ساعات قال Mohamed Sherif14:

شكرا أ-معاذ

أذا حسب كلام حضرتك ان يجب تعببن 2 primary key داخل ال parent هذه الحاله

أهلا بك محمد

لا لن نقوم بتعيين primary key ثاني حيث لا يجوز أن يكون لكل جدول إلا primary key واحد فقط. لكنّنا إذا أردنا أن نعين foreign key لخاصة ما يجب أن تحقق هذه الخاصة شروط معينة.

مثلا لدينا جدول ما وليكن table1 يحوي عدة صفات من بينها صفة phone وهي ليست primary key، لكنها فريدة unique ولا يمكن أن تكون خالية not null. في حال تحقق هذان الشرطان يمكننا القول عن هذه الصفة ضمن الجدول أنها super key، وبما أن هذا المفتاح الفائق super key مكون من أدنى حد ممكن من الصفات (من صفة واحدة هي phone) فيمكننا القول عنه أنه candidate key (مفتاح مرشح). ومنه هذا المفتاح المرشح من الجدول table1 والذي ليس primary key i مؤهل ليكون له مرجع في جدول آخر.

أي يمكننا وضع صفة phoneRef ضمن جدول آخر وليكن table2 ليكون foreign key للصفة phone من الجدول table1.

للتلخيص، يمكننا وضع مفتاح أجنبي في جدول ما فقط للصفات التي تحقق شرط ال candidate key في جدول آخر.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Mohamed Sherif14:

شكرا للمشاركه و لكن :

المطلوب ليس الوصول للمعلومه بل جعل البيان المكتوب في صف الforeign key هو الاسم الفعلى للبيان في ال parent و ليس الكود :)

لنفرض حسب مثال حضرتك ان T1 يحتوي علي 2 atribute [الكود] و هو ال (T1)primary key + [الاسم] و ال T2 يحتوي علي 3 atribute [الكود] و هو ال (T2)primary key + [الاسم] + [الاسم2] و هو ال foreign key T1

كيف يظهر value  [الاسم2] الفعلي في الجدول و ليس value الforeign key  ;)

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 34 دقائق مضت قال علي محسن:

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

أرجوا ان يكون الملف مفهوم

Book1.xlsx

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعات قال علي محسن:

ماهو الجدول رقم 3 في الملف أعلاه؟ هل هو البيانات التي تريد عرضها للمستخدم  بعد تنفيذ sql query  وكنتيجة لها؟ إذا كان هذا هو المقصود ومشكلتك فقط في أسماء الحقول التي تريد تغييرها فيمكنك فعل ذلك كما تقدم في رد سابق وتستطيع إستعمال الخاصية as لتغيير أسماء الأعمدة وإظهارها بالإسم الجديد ولكن هذا كله يحصل وينتهي أثناء تشغيلك للكود وإخراج النتائج, أي أن أسماء الأعمدة في الجداول مرتبطة بالschema مسبقة التعريف.

 

تمام كده المسأله واضحه

و شكرا لحضرتك معلش اسف تعبتك معايا :D

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...