سؤال

في حد المتحركة المناقشة في فريقي كنت اعتقد معظم الناس ما مثل المفاتيح الأساسية.كان لدينا المجموعات التالية-

  1. الباحث/ BigInt التي تعداد هي جيدة بما فيه الكفاية المفاتيح الأساسية.
  2. يجب أن يكون هناك على الأقل 3 الأعمدة التي تشكل المفتاح الأساسي.
  3. معرف GUID الإنسان للقراءة الصف معرفات كل شيء يجب أن تعامل بشكل مختلف.

ما هو أفضل نهج PKs?سيكون رائعا إذا كنت يمكن أن تبرر رأيك.هل هناك أفضل النهج الذي سبق ؟

تحرير:أي شخص لديه عينة بسيطة/خوارزمية لتوليد الإنسان للقراءة معرفات للصفوف موازين حسنا ؟

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

المحلول

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

تعداد رجات يجب أن يكون الافتراضي الخاص بك ، لا استخدامها يجب أن يكون مبررا.

نصائح أخرى

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

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

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

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

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

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

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

هذا من الصعب جدا-خط عرض ، في بعض النواحي.

ليس لدي أي مشكلة معينة باستخدام GUID عندما تكون هناك حاجة إليها ، لكنها تميل إلى أن تكون كبير (كما في 16-64 بايت) و يتم استخدامها في كثير من الأحيان.في كثير من الأحيان جيدة تماما 4-قيمة البايت تكفي.باستخدام GUID فيها 4-قيمة البايت تكفي النفايات مساحة القرص ، ويبطئ حتى فهرستها الوصول إلى البيانات لأن هناك عدد أقل القيم في صفحة الفهرس ، وبالتالي فإن المؤشر سوف تكون أعمق وأكثر الصفحات يجب أن تكون قراءة الحصول على المعلومات.

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

  • البديل مفاتيح مفيدة عندما لا السمة أو مجموعة من الصفات في الجدول هو مناسبة لتحديد الصفوف فريد.
  • الطبيعية مفاتيح المفضل ، عندما يكون ذلك ممكنا ، لجعل الجدول أكثر قابلية للقراءة.الطبيعية مفاتيح تسمح أيضا المفتاح الخارجي في يعتمد الجدول على القيمة الحقيقية بدلا من مركب الهوية.E. g.عندما تحتاج إلى تخزين state (CA, TX, NY) قد تستخدم كذلك char(2) مفتاح الطبيعية بدلا من int.
  • استخدام مركب المفاتيح الأساسية عند الاقتضاء.لا إضافة "id"بديل الرئيسية دون داع عندما جيدة تماما مركب من وجود مفتاح (وهذا ينطبق بشكل خاص في العديد إلى العديد من الجداول).ولاية ثلاثة أعمدة رئيسية في كل الجدول هو هراء مطلق.
  • المعرفات الفريدة العمومية هي الحل عندما كنت في حاجة للحفاظ على تفرد على مواقع متعددة.هم أيضا مفيد إذا كنت بحاجة القيم في المفتاح الأساسي أن تكون فريدة من نوعها ، ولكن لم يؤمر أو متتالية.
  • الباحث مقابلBIGINT:ليس هذا الجدول يتطلب 64 بت مجموعة المفاتيح الأساسية ، ولكن مع زيادة توافر 64 بت الأجهزة يجب أن لا يكون عبء يعطي مزيدا من التأكيد أنه لن تجاوز.الباحث هو بالطبع أصغر ، حتى إذا كان الفضاء في قسط التأمين يمكن أن تعطي ميزة طفيفة.

أحب قاعدة بيانات مبرمج بلوق كمصدر لهذا النوع من المعلومات.

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

أنا أحب الألغام فريدة من نوعها.

أنا دائما أذهب مع بديل الرئيسية.مركب مفتاح (عادة عمود الهوية, تعداد, أو GUID) هو المفتاح غير موجود في قاعدة البيانات نفسها.مفتاح الطبيعية ، من ناحية أخرى ، هو الذي وحده يعرف بشكل فريد التوالي.أقرب ما أستطيع قوله في الحياة هناك لا يكاد أي الحقيقي الطبيعية المفاتيح.ولا حتى أشياء مثل SSN في الولايات المتحدة هو مفتاح الطبيعية.مركب المفاتيح الأساسية هي كارثة في انتظار أن يحدث.لا يمكنك تعديل أي من البيانات (الذي هو عيب رئيسي من أي الطبيعية مفتاح مركب أو لا), ولكن الأسوأ من ذلك هو أنه مع مفتاح مركب, الآن عليك أن يديم هذا المفتاح البيانات في كل جدول مرتبط.ما العملاقة النفايات.

الآن لاختيار البديل مفتاح, أنا العصا مع الهوية الأعمدة (أعمل في الغالب MS SQL Server).GUID كبيرة جدا و توصي Microsoft ضد استخدامها بوصفها PK.إذا كان لديك عدة ملقمات, كل ما عليك القيام به هو جعل الزيادة 10 أو 20 أو ما كنت أعتقد أن أقصى عدد من الخوادم سوف أي وقت مضى الحاجة إلى مزامنة/التوسع ، فقط inc البذور لكل جدول على كل لاحقة server و لن بيانات الاصطدام.

بطبيعة الحال ، لأن الزيادة ، لقد جعل الهوية العمود a BigInt (المعروف طويل [64 بت]).

تفعل قليلا من الرياضيات ، حتى إذا قمت بإجراء الزيادة 100, يمكن أن يكون لا يزال 92,233,720,368,547,758 (> 92 كوادريليون) الصفوف في الجدول الخاص بك.

أعتقد أن استخدام كلمة "الرئيسية" في عبارة "الابتدائية" المفتاح هو في المعنى الحقيقي أو مضللة.

أولا استخدام التعريف أن "المفتاح" هو السمة أو مجموعة من السمات التي يجب أن تكون فريدة من نوعها داخل الجدول ،

ثم وجود أي مفتاح يخدم عدة بعضها بعضا في كثير من الأحيان تتعارض الأغراض.

  1. استخدام ينضم الظروف إلى واحد أو العديد من السجلات في الجداول التي لها علاقة بهذا الجدول الأصل.(صراحة أو ضمنا تحديد المفتاح الخارجي في تلك الطفل الجداول)
  2. (ذات الصلة) كفالة الطفل السجلات يجب أن يكون السجل الأصل في الأصل علامة التبويب ؛ e (الطفل الجدول FK يجب أن توجد الرئيسية في الجدول الأصل)
  3. لزيادة perforamce من الاستفسارات التي تحتاج إلى تحديد موقع بسرعة سجل معين/صف في الجدول.

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

ومن الواضح أن أي غير meaningfull غير الطبيعية الرئيسية (مثل GUID أو التي يتم إنشاؤها تلقائيا صحيح عاجزة تماما عن تلبية #4.

ولكن في كثير من الأحيان مع العديد من (معظم) الجداول تماما الطبيعية الرئيسية التي يمكن أن توفر #4 غالبا ما تتكون من سمات متعددة و تكون واسعة بشكل مفرط ، أو واسعة بحيث استخدامه لأغراض #1, #2 #3 سوف يسبب أداء غير مقبول consequencecs.

الجواب بسيط.استخدام على حد سواء.استخدام بسيط السيارات-توليد جزء لا يتجزأ الرئيسية لجميع ينضم و FKs في الطفل الجداول ، ولكن التأكد من أن كل الجدول الذي يتطلب اتساق البيانات (عدد قليل جدا من الجداول لا) يكون بديل الطبيعية فريدة من نوعها الرئيسية التي من شأنها منع إدراج بيانات غير متناسقة الصفوف...بالإضافة إلى, إذا كان لديك دائما على حد سواء ، ثم جميع الاعتراضات ضد باستخدام مفتاح الطبيعية (ما إذا كانت التغييرات ؟ يجب أن تتغير في كل مكان هو المشار إليها كما FK) تصبح موضع نقاش ، كما كنت لا تستخدم ذلك من أجل أن...كنت تستخدم فقط في جدول واحد حيث هو PK, لتجنب تتعارض duplciate البيانات...

كما أن Guid, كن حذرا جدا استخدامها ، مثل استخدام المعرفات الفريدة العمومية في فهرس يمكن خرطوم مؤشر تجزئة.الأكثر شيوعا الخوارزميات المستخدمة لإنشاء منهم يضع "عشوائية" جزء من guid في بت الأكثر أهمية المواقف...وهذا يزيد من الحاجة العادية مؤشر التجزئة / وإعادة فهرسة كما يتم إضافة صفوف جديدة.

قليلا خارج الموضوع لكني مضطرة أن تتناغم مع...

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

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

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

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

Cat1.subcatA.record1
Cat1.subcatA.record2
Cat1.subcatB.record1
Cat2.subcatA.record1

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

من فضلك, من فضلك, من فضلك, إذا كنت كتابة التعليمات البرمجية التي كنت من أي وقت مضى للحفاظ على فضلك لا تستخدم مفتاح ذكي!

أنا من محبي السيارات-الزيادة كما المفتاح الأساسي.أنا أعرف في أعماق قلبي أن هذا هو شرطي ، ولكن لا تجعل من السهل جدا أن نوع البيانات من قبل عندما كان المضافة (ORDER BY ID DESC, و you'r سبيل المثال).

3 أعمدة يبدو بفظاعة قاسية إنسانيا تحليل.

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

زيادة تلقائية بالنسبة لنا البشر.:-(

عموما, ذلك يعتمد.

شخصيا, أنا أحب تعداد رجات.

لكن, شيء واحد أستطيع أن أقول لك أن لا تثق البيانات من مصادر أخرى مثل المفتاح الخاص بك.أقسم في كل مرة كنت قد فعلت ذلك يعود إلى لدغة لي.حسنا, مرة أخرى أبدا!

يجب أن يكون هناك على الأقل 3 الأعمدة التي تشكل المفتاح الأساسي.

أنا لا أفهم هذا.

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

الباحث/ BigInt التي تعداد هي جيدة بما فيه الكفاية المفاتيح الأساسية.

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

إعادة GUID

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

في وظيفتي السابقة ، حيث كان لدينا قواعد بيانات من 100 الى 500 مليون السجلات في قاعدة البيانات لدينا شباب جادل بقوة ضد Guid, و بحجم مناسب رقم عشري.ورأوا أن (وكيل أوراكل) حجم الفرق في التخزين الداخلية عن سلسلة Guid - vs - قيمة عشرية من شأنه أن يجعل الفرق ملحوظ جدا في عمليات البحث.( أكبر مفاتيح = أعمق الأشجار لاجتياز)

عشوائية طبيعة Guid أيضا يقلل من ملء عامل فهرس الصفحات بشكل كبير - هذا يزيد بشكل كبير من تمزق القرص I/O.

السيارات زيادة الأعمدة.أنا قادر على جعل قانون العمل بسلاسة مع SQL Server أو Oracle, واحد باستخدام هوية أخرى باستخدام متواليات من خلال الدال ، و لا يمكن أن أكون أكثر سعادة.وأنا أتفق, Guid في بعض الأحيان ضرورية إذا كنت تفعل النسخ المتماثل البيانات أو إرسالها بعيدا إلى الحصول عليها في وقت لاحق عفر المعالجة.

لقد استعملت دائما بديلة الرئيسية - وهو autoincrementing عدد صحيح يسمى 'id'.يمكنني أن أرى الكثير من الأسباب للقيام بذلك حتى عندما وثمة خيار آخر هو واضح:

  • الاتساق
  • البيانات المستقلة (فريدة من نوعها ، لم تدمر من قبل التغييرات في الشكل)
  • الإنسان للقراءة

و أي سبب معقول لا:

  • غموض ينضم?- التعرج الجداول أفضل الممارسات ، IMHO
  • الأمثل الجداول ؟ - إزالة بايت واحد في دخول سابق لأوانه الأمثل ، IMHO
  • في الجدول القرار ؟ - لم تعد متسقة
  • زيادة المشاكل ؟ - إيه ؟ لماذا ؟
  • البيانات الهرمية هيكل ؟ - هذا denormalising, كل موضوع الدين.ويكفي أن أقول أنني معجب في بعض الظروف من الناحية النظرية ، ولكن أبدا في الممارسة :)

معقولة لأسباب ضد أنني لم أفكر أو تأتي عبر حتى الآن هي دائما موضع ترحيب...

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

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

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

أنا فقط استخدام السيارات الزيادة الباحث أو GUID.99 ٪ من الوقت لقد استخدم السيارات-زيادة كثافة العمليات.هذا ما تعلمت استخدام عندما علمت لأول مرة عن قواعد البيانات و لم أدر إلى سبب عدم استخدامها (على الرغم من أنني أعرف من الأسباب GUID سيكون أفضل).

أنا أحب السيارات زيادة رجات لأنه يساعد على سهولة القراءة.على سبيل المثال أستطيع أن أقول "نلقي نظرة على سجل 129383" وأنه من السهل جدا لشخص ما في العثور عليه.مع GUID الذي من المستحيل تقريبا القيام به.

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

  • هو المفتاح الأساسي التعريف ليس بشكل مفرط المعقدة ؟ هل تجنب إدخال أي تعقيد أجل التالية "أفضل الممارسات"?
  • هل هناك أفضل من الممكن المفتاح الأساسي التي تتطلب أقل النفقات العامة على قاعدة البيانات للتعامل مع (أيصحيح مقابلVARCHAR ، إلخ) ؟
  • أنا واثق تماما أن تفرد ومحددة نيس ثابتة من المفتاح الأساسي لم يتغير ؟

هذا الأخير هو الأرجح ما توجه معظم الناس إلى استخدام أشياء مثل Guid أو الذاتي تزايد عدد الأعمدة ، لأن الاعتماد على أشياء مثل العناوين وأرقام الهواتف أول/آخر الأسماء, الخ, فقط لا قطع عليه.الوحيد الثابت عن الناس أنا من أرقام الضمان الاجتماعي, ولكن بعد ذلك أنا لا حتى 100% معينة حول تلك الباقية إلى الأبد فريدة من نوعها.

نأمل أن يساعد هذا إضافة بعض الوضوح...

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

دائما تقريبا الاعداد الصحيحه.

لديهم أسباب وجيهة أخرى إلى جانب كونها أصغر/أسرع إلى عملية.التي تفضل كتابة - "404040" أو "3463b5a2-a02b-4fd4-aa0f-1d3c0450026c"?

إلا قليلا ذات الصلة ، ولكن شيء واحد لقد بدأت تفعل في الآونة الأخيرة عندما كنت صغيرة جداول التصنيف (أساسا تلك التي تمثل ENUMs في القانون) هي التي سوف تجعل المفتاح الأساسي شار(3) أو شار(4).ثم جعل تلك المفاتيح الأساسية ممثل من قيمة البحث.

على سبيل المثال لدي نظام نقلا عن الداخلية لدينا وكلاء المبيعات.لدينا "فئات التكاليف" أن كل اقتباس بند يتم تعيين واحد من...لذلك لدي نوع بحث جدول يسمى 'tCostCategories' ، حيث المفتاح الأساسي هو 'MTL', 'SVC', 'تأشيرة', 'الضريبة', 'ODC'.الأعمدة الأخرى في جدول البحث تخزين المزيد من التفاصيل ، مثل العادي الإنجليزية معاني رموز "المواد", "الخدمة", "السفر" ، "الضرائب", "التكاليف المباشرة الأخرى" ، وهكذا دواليك.

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

1 PartNumber 40 دولار MTL
2 OtherPartNumber $29.99 SVC
3 PartNumber2 150 دولار TRV

انه من الاسهل بكثير أن استخدام الباحث لتمثيل فئات ومن ثم ربط 1, 2, 3 على جميع الخطوط - لديك البيانات هناك في الجبهة من أنت ، وأداء لا يبدو تتأثر على الإطلاق (وليس أن أنا حقا اختبار.)

بقدر السؤال الحقيقي يذهب...أنا أحب RowGUID uniqueidentifiers.أنا لست 100% على هذا ولكن لا كل الصفوف الداخلية RowGuid هو على أي حال ؟ إذا كان الأمر كذلك, ثم استخدام RowGuid في الواقع تأخذ مساحة أقل من رجات (أو أي شيء آخر لهذه المسألة.) كل ما أعرفه هو أنه إذا كانت جيدة بما يكفي بالنسبة M$ لاستخدامها في GreatPlains ثم انها جيدة بما فيه الكفاية بالنسبة لي.(يجب أن البط??)

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

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

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

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

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

Guid.الفترة.

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


تحديث توضيح بياني.

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

عند استخدام GUID يمكنك إنشاء معرف في أي مكان.يمكن أن تكون ولدت من قبل الملقم البعيد ، التطبيق على شبكة الإنترنت, داخل قاعدة البيانات نفسها أو حتى داخل قواعد بيانات متعددة في multimaster الوضع.

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

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

إذا كنت نلقي نظرة على أكبر تطبيقات هناك سوف تلاحظ شيء مهم:أنهم جميعا استخدام ترميز Base64 Guid كما المفاتيح.والسبب في هذا بسيط ، استخدام المعرفات الفريدة العمومية تمكنك من نطاق بها بسهولة بينما يمكن أن يكون هناك الكثير من الأطواق من خلال القفز عند محاولة تغيير حجم رجات.

لدينا أحدث التطبيق يذهب خلال الفترة من الثقيلة إدراج الذي يستمر لمدة شهر.بعد أن 90+ ٪ من الاستفسارات كلها يختار لتقديم التقارير.إلى زيادة القدرات يمكنني إحضار إضافية DB خوادم خلال هذه كبيرة إدراج الفترة ؛ و في وقت لاحق بسهولة دمج هؤلاء في واحد DB لتقديم التقارير.تحاول أن تفعل ذلك مع رجات سيكون كابوس مطلقة.

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

هذا هو موضوع معقد سواء أدركت ذلك أم لا.قد تندرج تحت القسم على هذا ستاكوفيرفلوو التعليمات.

أي نوع من الأسئلة التي ينبغي أن لا تسأل هنا ؟

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

هذا وقد تم مناقشة لسنوات ستناقش لسنوات.فقط تلميحات من توافق رأيت أن الإجابات يمكن التنبؤ بها إلى حد ما اعتمادا على إذا كنت طالبا أو رجل (GUIDs هي السبيل الوحيد للذهاب!), بيانات نماذج (الطبيعية المفاتيح هي السبيل الوحيد للذهاب!), أو الأداء المنحى ديسيبل (رجات هي السبيل الوحيد للذهاب!).

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