سؤال

لدي قاعدة بيانات مع اثنين من الجداول - دعنا نسميها فو وبار.كل فو قد تكون ذات صلة إلى أي عدد من أشرطة كل شريط قد تكون ذات صلة إلى أي عدد من فوس.كنت تريد أن تكون قادرة على استرداد ، مع استعلام واحد ، foos التي ترتبط مع بعض شريط القضبان التي ترتبط مع بعض foo.

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

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

المحلول

ويسمى هذا علاقة عديدة لكثير. الحل "قياسي" هو إعداد جدول ثالث، مع المفتاح الأساسي من كل جدول في كل صف حيث هناك علاقة.

ويسمى الجدول الثالث على جدول تقاطع. "الجدول مفرق" من ويكيبيديا: http://en.wikipedia.org/wiki/Junction_table

وكمثال على ذلك:

Foo
UID
Col1
Col2

Bar
UID
Col1
Col2

Foo_Bar
UID
Foo_UID
Bar_UID

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

select *
from foo
where uid in (
    select foo_uid
    from foo_bar
    where bar_uid=<some bar uid>)

و(لم تجد أي المغفلين الدقيق لهذا السؤال، ولكن الأسئلة التالية توسع حول هذا الموضوع.)

كثير لكثير من مسألة تصميم الجدول
كثير لكثير من العلاقات التصميم - تقاطع تصميم الجدول

نصائح أخرى

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

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