سؤال

أنا مرتبك بعض الشيء على صنع قاعدة بيانات علائقية جيدة. أنا أستخدم phpmyadmin لإنشاء قاعدة بيانات. لدي الجداول الأربعة التالية. لا تقلق بشأن هذا المكان والأسعار اختياريين.

  1. شخص (إلزامي)
  2. البند (إلزامي)
  3. المكان (اختياري)
  4. السعر (اختياري)

العنصر هو الجدول الرئيسي. سيكون لها دائما شخص مرتبط. * أعلم أنك تنضم إلى MySQL للجداول. إذا كنت أرغب في ربط الجداول معًا ، يمكنني استخدام المفاتيح المركبة (باستخدام المعرفات من كل جدول) ، ومع ذلك ، هل هذه هي الطريقة الأكثر صحة لربط الجداول؟ وهذا يعني أيضًا أن العنصر سيكون له 5 معرفات بما في ذلك. كل هذا يسبب قيمًا خالية (يبدو أنه لا ، لا أستطيع أن أفهمها) لأنه إذا كان المكان والسعر اختياريًا ولم يتم استخدامه في إدخال واحد إلى جدول العناصر ، فسوف يكون لدي قيمة فارغة هناك. الرجاء المساعدة!

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

هل كانت مفيدة؟

المحلول

القيم الخالية

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

أنا شخصياً أعتقد أن هذا موقف واحد حيث NULL القيم مثالية ، وبالتأكيد لن يكون لدي أي شكوك حول وضع هذا في تصميم قاعدة البيانات الخاصة بي.

إحدى الطرق التي رأيتها بالآخرين يحققون نفس الشيء بدونه NULL القيم هي إنشاء سجل في الجداول الاختيارية (المكان والسعر في مثالك) مع معرف 0 يدل على عدم وجود سجل ذي صلة - ولكن هذا يجعل 10 مرات فقط من العمل لمطور التطبيق لتصفية هذه السجلات - من الأسهل بكثير الانضمام وإذا لم تحصل على أي سجلات ، فلا توجد سجلات ذات صلة في الجدول الاختياري.

فقط تذكر أن تفعل أ LEFT أو RIGHT OUTER انضم إذا كنت تريد العودة ItemS بغض النظر عما إذا كان لديهم Place أو Price مرتبط (ستحصل NULL القيم في أعمدة الجدول الاختيارية ل ItemS التي ليس لها سجلات مرتبطة) و INNER انضم إذا كنت فقط تريد Itemق فعل لديك سجل اختياري مرتبط.

مفاتيح مركبة

المفتاح المركب هو مفتاح في جدول يتكون من أكثر من عمود واحد. إذا كان كل من Person, Item, Place و Price تحتوي جميعها على معرف (حتى لو كان مجرد رقم تلقائي) لن تحتاج إلى مفتاح مركب - مجرد عمود مفتاح أساسي في كل جدول ، وعمود مفتاح خارجي في Item جدول لكل جدول ذي صلة - على سبيل المثال item_id, person_id, place_id, price_id. أنت ذكرت ذلك Item يحتوي على معرفه الخاص ، لذلك يجب ألا تحتاج إلى مفتاح مركب - مجرد مفتاح أساسي على item_id عمودي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top