سؤال

عند إنشاء بنية قاعدة بيانات، ما هي الإرشادات الجيدة التي يجب اتباعها أو الطرق الجيدة لتحديد مدى تسوية قاعدة البيانات؟هل يجب عليك إنشاء قاعدة بيانات غير طبيعية وتقسيمها مع تقدم المشروع؟هل يجب عليك إنشائه بشكل طبيعي بالكامل ودمج الجداول حسب الحاجة للأداء؟

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

المحلول

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

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

هناك مقالتان جيدتان:

http://www.agiledata.org/essays/dataNormalization.html

نصائح أخرى

@GrizzlyGuru قال لي رجل حكيم ذات مرة "قم بالتطبيع حتى يؤلمك، وقم بإلغاء الوضع الطبيعي حتى ينجح".

ولم يخذلني بعد :)

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

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

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

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

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

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

أشعر أن تطبيع قاعدة البيانات هو شكل من أشكال الفن.

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

القاعدة الأساسية الجيدة التي أتبعها هي تطبيع نفس المعلومات المتكررة مرارًا وتكرارًا.

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

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

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

دع الاختبار يخبرك إذا كنت بحاجة إلى دمج الجداول.يمكن للاستعلام المكتوب جيدًا أن يغطي أي عملية تطبيع زائدة.

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

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

أرى هذا بشكل مشابه لأداء الكود، أي.اكتب تعليمات برمجية مرنة وقابلة للصيانة وقم بتقديم تنازلات من أجل الأداء عندما يعرف أن هناك مشكلة في الأداء.

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

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

الحقيقة هي أن "ذلك يعتمد". يعتمد ذلك على الكثير من العوامل بما في ذلك:

  • الكود (مشفر يدويًا أو مُدار بواسطة أداة (مثل حزم ETL))
  • التطبيق الأساسي (معالجة المعاملات، تخزين البيانات، إعداد التقارير)
  • نوع قاعدة البيانات (MySQL، DB/2، Oracle، Netezza، إلخ.)
  • بنية قاعدة البيانات (جدولية، عمودية)
  • جودة DBA (استباقية، متفاعلة، غير نشطة)
  • جودة البيانات المتوقعة (هل تريد فرض جودة البيانات على مستوى التطبيق أم على مستوى قاعدة البيانات؟)

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

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

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

لذا، بافتراض نفس جودة التعليمات البرمجية، فإن إلغاء التسوية قد لا يمنحك أداءً أفضل في الواقع.

شيء آخر يجب ذكره هو أن الأجهزة رخيصة هذه الأيام، لذا فإن توفير قوة معالجة إضافية لحل المشكلة غالبًا ما يكون أكثر فعالية من حيث التكلفة من قبول التكاليف المحتملة لتنظيف البيانات التالفة.

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

على سبيل المثال، عند استخدام تقنية تعيين الكائنات العلائقية، سيكون لديك مجموعة غنية من الدلالات لمختلف علاقات متعدد إلى واحد ومن متعدد إلى متعدد.أسفل الغطاء، سيوفر ذلك لجداول الانضمام مفتاحين أساسيين فعالين.على الرغم من أنها نادرة نسبيًا، إلا أن التسوية الحقيقية غالبًا ما تمنحك علاقات مع 3 مفاتيح أساسية أو أكثر.في مثل هذه الحالات، أفضل الالتزام بـ O/R وإنشاء الكود الخاص بي لتجنب حالات الشذوذ المختلفة في قاعدة البيانات.

فقط حاول استخدام الحس السليم.

يقول البعض أيضًا - ويجب أن أتفق معهم - أنه إذا وجدت نفسك تنضم إلى 6 جداول (الرقم السحري) معًا في معظم استفساراتك - لا تشمل إعداد التقارير ذات الصلة -، فقد تفكر في إلغاء التسوية قليلاً.

لا تنسى أم جميع مناقشات تطبيع قاعدة البيانات حول Coding Horror (تم تلخيصه في مدونة High Scalability).

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