سؤال

في بنية الجدول التالي:

Fruits 
(
    fruit_id,
    fruitName
)


Vegetables
(
    vegetable_id,
    vegetableName
)

favoriteFoods 
(
     food_id,
     foodName,
     type_id (References either a fruit or a vegetable)
)

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

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

المحلول

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

Food
    (
    food_id,
    foodName,
    foodType
    )

favoriteFoods
    (
    favoritefood_id,
    fkfood_id
    )

نصائح أخرى

وهذا يعتمد على ما كنت تنوي القيام به مع البيانات.

وإذا كان لسبب التطبيع هو مهم بالنسبة لك، الأعمال التالية بشكل جيد.

Fruits (    
     fruit_id,
     food_id references favoritefoods.food_id,
     fruitName)
Vegetables(
     vegetable_id,
     food_id references favoritefoods.food_id,
     vegetableName)
favoriteFoods (
     food_id,
     foodName)

لا يحتاج الجدول favoriteFoods إلى "معرفة" ما هو نوع من الطعام هو عليه، إن وجدت. يرتبط كل الفواكه والخضروات كل على الغذاء المفضل المقابلة.

إذا كنت تريد تحديد جميع الفواكه من favoriteFoods، مجرد الانضمام إلى طاولة الفواكه والجدول favoriteFoods. حتى أنت يمكن أن تشمل الطماطم على حد سواء الخضار والفواكه، إذا كان ذلك يناسب المبتكر.

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

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