سؤال

أنا أتساءل فقط ما الحل الأمثل هو هنا.

قلت تطبيع البيانات الخاصة بنا.المفتاح الأساسي من النظام كله varchar.أنا أتساءل يجب أن تتصل هذه varchar إلى الباحث عن التطبيع أو ترك ذلك ؟ من الأسهل أن تترك كما varchar, ولكن قد يكون أكثر الأمثل

فعلى سبيل المثال لا يمكن أن يكون

People
======================
name      varchar(10)   
DoB       DateTime    
Height    int  

Phone_Number
======================
name      varchar(10)   
number    varchar(15)

أو أنا يمكن أن يكون

People
======================
id        int Identity   
name      varchar(10)   
DoB       DateTime  
Height    int  

Phone_Number
======================
id        int   
number    varchar(15)  

إضافة العديد من الآخر إلى علاقات كثيرة بالطبع.

ما رأيك ؟ أيهما أفضل ولماذا ؟

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

المحلول

هل يمكن حقا استخدام الأسماء الأولية المفاتيح ؟ ليس هناك مخاطر عالية من العديد من الناس مع نفس الاسم ؟

إذا كنت حقا محظوظا جدا أن اسم السمة يمكن أن تستخدم المفتاح الأساسي ، ثم - وبكل الوسائل - استخدام ذلك.في كثير من الأحيان, على الرغم من أنك سوف تضطر إلى تقديم شيء ما ، مثل customer_id ، إلخ.

وأخيرا:"اسم" هو كلمة محجوزة في واحد على الأقل DBMS ، حتى النظر في استخدام شيء آخر, على سبيل المثالfullname.

نصائح أخرى

أعتقد أن غالبية الناس الذين طوروا أي كبيرة الحجم العالم الحقيقي تطبيقات قاعدة البيانات سوف أقول لكم أن بديل مفاتيح الحل الواقعي الوحيد.
أعلم المجتمع الأكاديمي سوف نختلف ولكن هذا هو الفرق بين النقاء النظري و العملي.

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

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

استخدام غير المستخدم من إنشاء البيانات (متتابعة Guid (أو غير متتابعة إذا DB لا دعم لهم أو لا يهتمون الانقسامات الصفحة) أو الهوية رجات (إذا كنت لا تحتاج إلى Guid)) هو أسهل بكثير وأكثر أمانا.

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

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

أعتقد إذا VARCHAR كان أكبر هل تلاحظ أنك تكرار قليلا جدا من البيانات في جميع أنحاء قاعدة البيانات.بينما إذا ذهبت مع الرقمية ID عمود أنك لا تكرار ما يقرب من نفس الكمية من البيانات عند إضافة الأجنبية الرئيسية أعمدة الجداول الأخرى.

وعلاوة على ذلك ، فإن البيانات النصية هو الألم الملكي من حيث المقارنات حياتك أسهل بكثير عندما كنت تفعل حيث id = user_id مقابل حيث اسم مثل inputname (أو شيئا من هذا القبيل).

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

ومع ذلك أنت لم توضح ما "اسم".في الممارسة فمن النادر جدا أن سلسلة هي مناسبة باعتباره المفتاح الأساسي.إذا كان اسم الشخص ، فإنه لن يعمل كما PK, منذ أكثر من شخص واحد يمكن أن يكون لها نفس الاسم, الناس يمكن تغيير أسماء وهلم جرا.

شيء واحد أن الآخرين لا يبدو أن يكون الذكر هو أن ينضم على الباحث المجالات تميل إلى أداء أفضل من ينضم على varchar المجالات.

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

السؤال الأصلي هو واحد من التطبيع.إذا كان لديك تطبيع قواعد البيانات, كما قلت, ثم كنت لا تحتاج إلى تغيير ذلك من أجل تطبيع الأسباب.

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

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

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

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

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

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