DB Design: طاولة الأعضاء منفصلة أو كلها في طاولة واحدة؟
-
23-08-2019 - |
سؤال
أريد إنشاء جدول من الأصدقاء مع معلومات شخصية وتسجيل الدخول إلى التفاصيل.
ما أفضل لفصل جدول الأعضاء إلى طاولتين، يحتوي المرء على تفاصيل ضئيلة، ثانية مع تفاصيل أخرى.
أو البقاء في طاولة واحدة؟
لدي الكثير من الجداول التي تحتوي على المفتاح الأجنبي للعضو.
المحلول
ذلك يعتمد كثيرا على ما هي التفاصيل "الأخرى". هذا سؤال شائع ومثير للاهتمام، وليس هناك إجابة "صعبة وسريعة" للوهلة الأولى. ولكن إذا كنا نفكر في هذه القضية أكثر تجريم، حول العلاقة الفعلية بين السمات ("التفاصيل") لأي شيء معين تريد أن تمثله، قد نجد بعض الوضوح.
في سؤالك الذي تنص على أن الأصدقاء لديهم تفاصيل "الحد الأدنى" و "الآخر". بدلا من تصنيف هذه التفاصيل ك "الحد الأدنى" أو "الآخر"، دعنا نتصنيفها بما إذا كان يمكن تحديد أي فرد ("ذرية") بشكل كامل من خلال ما يجعل صديق فريد من نوعه.
أفترض أن هناك بعض المفتاح الأساسي (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 أيضا، أو قطعة من الورق لهذه المسألة :-)
ولكن إذا كنت ترغب في الحصول على قاعدة بيانات، تعاملها كواحد.
أقرأ عن تطبيع للقضية بأكملها.