"معاقبة" للمطورين أو إصلاحه تلقائيا؟ الزناد مقابل القيد

StackOverflow https://stackoverflow.com/questions/613682

سؤال

ودعونا نقول لدي عمود قاعدة البيانات التي يجب أن تكون دائما في أحرف كبيرة.

وهنا فكرتان:

1) إنشاء القيد عمود: col = UPPER(col)

2) إنشاء قبل إدراج / تحديث الزناد الصف الذي يحدد: col = UPPER(col)

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

ما النهج من شأنه أن كنت تستخدم ولماذا؟

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

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

المحلول

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

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

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

نصائح أخرى

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

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

وهو أفضل تطبيق هذا يشكل عائقا، فإنه يتجنب عبء اضافي ويفعل ما تريد - إجبار البيانات أن يكون في الشكل الذي يتطلب

.

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

وإضافة حالة مؤشر حساس ربما أفضل حل (راجع قاعدة بيانات حالة مؤشر القاسي )

وأو تغطية الزيادة من الاختبارات الآلي، وتجنب الحمل الزائد على خادم الإنتاج.

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

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

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