يقوم بإنشاء DB مستخدمين محددة لأنواع البيانات أفضل الممارسات؟

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

سؤال

يقوم بإنشاء أنواع محددة من قبل المستخدم بدلا من استخدام أفضل أنواع أفضل الممارسات؟ في بلدي معاينات العمل، وضع كل الأنواع الأساسية محددة مسبقا، هل هي أفضل الممارسات؟ ما المزايا وما العيوب التي لديها.
شكرا جزيلا!

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

المحلول

في MS SQL Server - الفكرة رائعة. ومع ذلك، هناك كبير لكن لهم: لا يمكنك تغييرها بمجرد استخدامها، لأنه لا يوجد ALTER TYPE .... بيان. هذا يمكن أن يكون متاعب رئيسية.

النظر في هذا: لديك تطبيق مكتبة يحتوي على نوع محدد من قبل المستخدم ISBN = varchar (10) - يعمل مثل سحر. الآن قررت اللجنة الدولية توضيح حقل ISBN إلى 13 حرفا - لسوء الحظ، لا يوجد ALTER TYPE ISBNType..... لذا فإن خيارك الوحيد هو إسقاط جميع الأعمدة من هذا النوع في جميع قاعدة البيانات الخاصة بك، ثم أعد إنشاء النوع في شكله الجديد، وإعادة إنشاء كل الأعمدة مرة أخرى.

الفكرة رائعة وأحب استخدامها - ولكن في حالتها الحالية، إنها بجودة غير صالحة للاستعمال، في رأيي، وهو أمر مؤسف.

مارك

نصائح أخرى

متأخرا بعض الشيء، ولكن .. بلدي 2 CTS.

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

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

أيضا، UDTS كما هو محدد في أساليب ANSI SQL: 1999، ويمكن أن تكون بدقة. هذا يعني أن بعض التغييرات في قواعد الأعمال التي تتعامل مع القيود يمكن تغييرها في قاعدة البيانات، دون الحاجة إلى لمس التنفيذ.

ومع ذلك ... كما ينفذ UDTS حاليا الكثير مما هو مطلوب. أنا لست متأكدا من SQL Server ينفذ المعيار كما هو موضح، حتى أقل من أوراكل. وحتى لو فعلوا ذلك، فإن عيوب استخدام UDTs سيصبح واضحا على الفور أثناء استخدام الأدوات الثنائية، وأدوات إيثيلين أو غيرها من الأدوات البسيطة إلى حد ما: لا يفهمون عادة UDTs وحتى لو كانوا كذلك، فلن يكونوا كذلك قادرة على استخدامها لأن الأغلبية قاعدة نفسها على الأنواع الأساسية (int، char والتاريخ / الوقت).

بالنسبة لأدوات الإبلاغ، دعونا نفكر في UDT يحتوي على مزيج من الحقول. الآن، كيف سيتمكن أداة ETL ACNostic قاعدة البيانات من فهم النوع؟ يجب أن تكون قادرا على فهم الهيكل من أجل عرضه أو استخدامه للحسابات. وهذا في كل قاعدة بيانات مدعومة - مهمة صعبة. وبما أن لا أحد يستخدم UDTs، فلن يقومون بذلك. إنها حلقة مفرغة، لكن لا يزال يتعين علينا أن نعيش معها.

بصرف النظر عن ذلك، فإن دعم UDT في معظم قواعد البيانات ليس كل ما هو حار أيضا. يمكن أن تكون الأنواع المتغيرة بشدة. في حين أن بناء الجملة يجب أن يكون هو نفسه في كل مكان، فإن إدارتها غير معروفة في SQL: 1999، وبالتالي تختلف في كل مكان. حاول تغيير مالك UDT في SQL Server لمثال. كان ذلك صعبة للغاية - لست متأكدا من SQL Server 2016، ولكن بالنظر إلى أن UDTs لا تبدو وكأنها منطقة التركيز، لا أتوقع تحسينات كبيرة في هذا المجال.

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

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

كيف بارد أنواع البيانات المعرفة من المستخدمين في خادم MS SQL؟

شخصيا، أنا لا أستخدمها لكنني رأيتهم. مشكلة واحدة هي أن رمز العميل يتعرف على نوع الأساس فقط، IIRC، للحصول على خادم MS SQL على الأقل. القدرة / السلوكيات عبر الإصدارات.

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