هل هناك مصفوفة إجابة يمكنني استخدامها لتحديد ما إذا كنت بحاجة إلى مفتاح خارجي أم لا؟

StackOverflow https://stackoverflow.com/questions/1979849

سؤال

على سبيل المثال ، لدي جدول يخزن الفئات ، وجدول يخزن class_attributes. يحتوي class_attributes على class_attribute_id و class_id ، بينما تحتوي الفئات على class_id.

أعتقد أنه إذا كانت مجموعة البيانات هي "طفل فقط" أو "ينتمي فقط إلى" أو "مملوكة فقط" ، فأنا بحاجة إلى FK لتحديد الوالد. بدون class_id في جدول class_attributes ، لم أستطع أبدًا معرفة الفئة التي تنتمي إليها هذه السمة.

ربما هناك مصفوفة إجابة مفيدة لهذا؟

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

المحلول

ويكيبيديا مفيد.

في سياق قواعد البيانات العلائقية ، يكون المفتاح الخارجي عبارة عن قيد مرجعي بين جدولين.1 يحدد المفتاح الخارجي عمودًا أو مجموعة من الأعمدة في جدول واحد (مرجع) يشير إلى عمود أو مجموعة من الأعمدة في جدول آخر (مشار إليه). يجب أن تكون الأعمدة في جدول المرجع هي المفتاح الأساسي أو مفتاح المرشح الآخر في الجدول المشار إليه.

(ويستمر في المزيد والمزيد من التفاصيل)

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

نصائح أخرى

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

http://en.wikipedia.org/wiki/Database_Normalization

وإلى حد ما إزالة العطور:

http://en.wikipedia.org/wiki/denormalization

أود أن أقول ، إنه العكس. أولاً ، تقوم بتصميم نوع الكائنات التي تحتاجها. لتلك سوف تنشئ جدول.

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

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

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

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

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

لا تهتم بنوع العلاقة - يتعلق الأمر أكثر بالتعبير عن العلاقة.

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

يمكنك أيضًا القيام بذلك مع علاقات فردية ، لكن بعض الناس يجادلون بأنه يجب عليك تجنبها.

في حالة وجود علاقة متعددة إلى العديد من الأشياء ، كنت ترغب في إنشاء جدول انضمام ، ثم يكون لكل من الجداول الأصلية مفتاحًا خارجيًا إلى جدول الانضمام.

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