ياجماعة عندي سؤال...
عملت مرة تجربة لرؤية الفرق بين عمود الفورين كي والعمود الأصلي من نفس الجدول من حيث المساحة
يعني كان فيه عمود جدول كان لازم أضع فيه قيمة واحدة من خمس قيم كل قيمة من هذي الخمس القيم
حجمها فوق 30 حرف فبدلا ما أكتبها في عمود في نفس الجدول عملت لها جدول خاص يعوض عنها برقم
( يعني ما أرجع أكتب هذي القيم الخمسة نفسها لأ أكتب رقم بدلا عنها ) من أجل أوفر في المساحة المشكلة
عملت الطريقتين عملت جدول فيه هذا العمود صاحب القيم الخمس في قاعدة بيانات لنفسه وطبقت نفس
الفكرة في قاعدة بيانات جديدة لكن هذي المرة أستخدمت الفورين كي وعندما جئت لمشاهدة حجم قاعدة
البيانات ظهرت قاعدة البيانات الأثنين بنفس الحجم لماذا ؟ المفروض تكون قاعدة البيانات المستخدم فيها
فورين كي أصغر من الأولى لأنها يتم التعويض عنها برقم في عمود الفورين ... هل أحد يقدر يشرح السبب/
أو الفروقات والأختلافات بين الطريقتين و أيهما أفضل...وشكرا
الأخ عبدالله عمر
التعليقات
في البداية دعني اشرح لك ماهو ال foreign key ولماذا نستخدمه :
ال foreign key هو مفتاح يكون اساسي في الجدول الاول وفرعي في الجدول الثاني وتكون وظيفته عمل ربط بين هذين الجدولين في قاعدة البيانات على سبيل المثال لدينا هذان الجدولان
class(class_id , class_name)
student(student_id ,student_name ,age ,class_id)
لاحظ هنا لدينا ال class_id هو عبارة عن primary key اي المفتاح الاساسي في جدول ال class واستخدمته للوصل بينه وبين جدول ال student ليصبح foreign key في جدول الstudent
ومن فوائده
- منع التكرار : كي لا تقم بتكرار رقم و اسم الصف في كل مرة تقوم باضافة تلميذ جديد نكتفي بوضع رقم الصف فقط
- تحسين اداء الاستعلامات : باستخدامه نستطيع اجراء استعلامات بشكل اسرع ومرتب اكثر
- الربط بين الجداول : وهذه هي الوظيفية الاهم والاساسية له
لذلك ان كان لديك جداول بينهم ربط بالمعلومات ف انصحك ان تستخدم ال foreign key بكل تأكيد لتحسين العمل وضمان اخترافيته
اما بالنسبة لسؤالك عن المساحة ف ان ال foreign key لا يأخذ سوى مساحة عاموده ومن الطبيعي ان يكون الجدول الجديد مساحته اقل حجما من الجدول الاساسي لانه لا يقوم بأدراج كامل البيانات بها وانما الرقم فقط
لذلك اظن انه لديك بيانات اخرى في الجدول الجديد غير ال foreign key لذلك وجدت المساحة كبيرة ارجو التأكد والتدقيق في ذلك
بالتوفيق لك
بالإضافة للشرح في التعليق السابق. بشكل عام، الفرق الرئيسي بين الطريقتين هو أن استخدام ال foreign key يتيح لك الحفاظ على تنظيم أفضل للبيانات وتجنب تكرار البيانات، وبالتالي توفير المساحة.
ولكن الفرق في الحجم قد يكون ناتجًا عن عوامل أخرى .ربما لم تكن القيم التي استبدلت بالأرقام كبيرة بما يؤثر على الحجم الكلي للبيانات بشكل يظهر عند مقارنة حجم القواعد.
ولكن استخدم ال foreign key إذا كانت لديك علاقات بين البيانات في جداول مختلفة وتحتاج إلى تحقيق تنظيم أفضل وتجنب تكرار البيانات.
فهمك الأولي صحيح
إذا كنت قد قمت بإنشاء عمود في جدول باستخدام FOREIGN KEY يجب أن تكون هناك فارق في حجم قاعدة البيانات بين الجدولين لكن هناك بعض النقاط التي يمكن أن تسبب عدم ظهور الفارق المتوقع
1-الفهرسة (Indexing): إذا كانت القيم التي تقوم بتخزينها في العمود الأصلي مفهرسة يمكن أن يكون هناك فارق في حجم قاعدة البيانات
2-تكنولوجيا قاعدة البيانات: قد تختلف طرق التنفيذ من نظام إدارة قواعد البيانات (DBMS) إلى آخر قد يكون هناك تفاوت في كيفية التعامل مع البيانات والترتيبات الداخلية.
3-حالة البيانات (NULL values): إذا كان لديك NULL values في العمود الأصلي فإن FOREIGN KEY قد يتطلب قيما غير قابلة للإشارة (non-NULL values) مما قد يؤدي إلى زيادة في حجم البيانات
بخصوص أيهما أفضل يعتمد ذلك على سياق استخدامك ومتطلبات التطبيق الفورين كي تستخدم لتحقيق علاقات بين الجداول وهي طريقة قوية للربط بين البيانات ومن الجيد أيضا مراعاة أداء الاستعلامات وسهولةالصيانةعند اتخاذ قرار بتصميم قاعدةالبيانات