سؤال

ما هو عيب اختيار قيمة كبيرة للحد الأقصى عند إنشاء عمود varchar أو varbinary؟

أنا أستخدم MS SQL ولكني أفترض أن هذا سيكون ذا صلة بقواعد البيانات الأخرى أيضًا.

شكرًا

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

المحلول

يعتمد ذلك على ما إذا كان من المعقول تخزين كمية كبيرة من البيانات في عمود معين.

إذا أعلنت عن عمود لن يخزن أبدًا الكثير من البيانات بشكل صحيح (على سبيل المثال،الاسم الأول للموظف هو VARCHAR(1000))، فسينتهي بك الأمر بمجموعة متنوعة من المشكلات

  1. العديد من واجهات برمجة تطبيقات العميل، إن لم يكن معظمها (أي.تقوم برامج تشغيل ODBC، وبرامج تشغيل JDBC، وما إلى ذلك) بتخصيص مخازن مؤقتة للذاكرة على العميل تكون كبيرة بما يكفي لتخزين الحد الأقصى لحجم عمود معين.لذلك، على الرغم من أن قاعدة البيانات تقوم فقط بتخزين البيانات الفعلية، إلا أنه يمكنك زيادة حجم الذاكرة التي يستخدمها تطبيق العميل بشكل كبير.
  2. ستفقد القدرة على توجيه قواعد التحقق من صحة البيانات (أو نقل معلومات حول البيانات) من تعريف الجدول.إذا كانت قاعدة البيانات تسمح للأسماء الأولى المكونة من 1000 حرف، فمن المحتمل أن ينتهي الأمر بكل تطبيق يتفاعل مع قاعدة البيانات إلى وجود قواعد خاصة به بشأن حجم اسم الموظف.إذا لم يتم التخفيف من ذلك عن طريق وضع طبقة إجراءات مخزنة بين جميع التطبيقات والجداول، فإن هذا يؤدي عمومًا إلى وجود تطبيقات مختلفة لها قواعد مختلفة.
  3. ينص قانون مورفي على أنه إذا سمحت بـ 1000 حرف، فسيقوم شخص ما في النهاية بتخزين 1000 حرف في العمود، أو على الأقل قيمة كبيرة بما يكفي لإحداث أخطاء في تطبيق واحد أو أكثر (على سبيل المثال.لم يتحقق أحد لمعرفة ما إذا كان حقل اسم الموظف في كل تطبيق يمكنه عرض 1000 حرف).

نصائح أخرى

ويعتمد على RDBMS. IIRC، مسقل يخصص فوق 2 بايت varchars> 255 حرفا (لتتبع طول VARCHAR). MSSQL <= 2000 من شأنها أن تسمح لك لتخصيص صف حجم> 8060 بايت، ولكن ستفشل إذا حاولت إدراج أو تحديث على التوالي التي في الواقع تجاوز 8060 بايت. SQL 2005 [1] يسمح للإدراج، ولكن تخصيص صفحة جديدة لتجاوز وترك مؤشر خلف. هذا، بالطبع، الآثار الأداء.

[1] VARCHAR (حد أقصى) إلى حد ما من حالة خاصة، ولكن ستخصص أيضا صفحة تجاوز إذا كان طول الحقل> 8000 أو الصف> 8060. هذا هو العجز عن السداد MSSQL، ويمكن تغيير السلوك مع أنواع كبيرة في الخيار صف البيانات.

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

ووالتصميم الجيد، يجب عليك دائما تحد من حجم الحقول إلى قيمة واقعية.

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