DB Design: طاولة الأعضاء منفصلة أو كلها في طاولة واحدة؟

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

سؤال

أريد إنشاء جدول من الأصدقاء مع معلومات شخصية وتسجيل الدخول إلى التفاصيل.

ما أفضل لفصل جدول الأعضاء إلى طاولتين، يحتوي المرء على تفاصيل ضئيلة، ثانية مع تفاصيل أخرى.

أو البقاء في طاولة واحدة؟

لدي الكثير من الجداول التي تحتوي على المفتاح الأجنبي للعضو.

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

المحلول

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

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

أفترض أن هناك بعض المفتاح الأساسي (PK)، مثل عنوان الصوديد أو البريد الإلكتروني أو شيء ما. بالنظر إلى هذا المعرف الفريد، اسأل نفسك: "إذا أعطيت بالضبط أو أي بريد إلكتروني (أو أي بريد إلكتروني أو أيا كان تستخدمه ك TK) ما هي تفاصيل هذا الصديق أنا متأكد تماما من؟ على سبيل المثال، معطى FriendID = 2112، أنا بالتأكيد تعرف اسم الصديق الأول، الاسم الأخير، وتاريخ الميلاد، لكنني لا تعرف تماما رقم هاتف الصديق أن هناك أكثر من واحد منهم.

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

Catable Geeks تسمي هذا التحلل بناء على التبعيات الوظيفية.

نصائح أخرى

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

لا شك في ذلك: قم دائما بتقسيم الجداول عندما يكون من المعنى منطقيا.

على سبيل المثال: صديق 1: توم جونز يعيش في وادي الأصدقاء 2: أرين جونز يعيش أيضا لأن أخوه

الجداول :

Friends
Id  Name          Address
1   Tom Jones     1
2   Erin Jones    1

Adresses 
Id Address
1  The valley

وإلا فإن الأمور ستأتي دائما مثل:

Friends
Id  Name          Address
1   Tom Jones     The Valey
2   Erin Jones    The Valley

والتي سوف تؤدي إلى استفسارات خاطئة.

هذه مجرد قضية واحدة، هناك العديد. مثل ما إذا كان الأمر كذلك لديه 2 عناوين بريد إلكتروني و 3 أرقام هواتف محمولة؟ ماذا لو تغير StreetName و 5 أصدقاء يعيشون فيه؟

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

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

أقرأ عن تطبيع للقضية بأكملها.

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