سؤال

لا تحتاج إلى تخزين الملفات الثنائية في varbinary(max) عمود على SQL Server 2005 مثل هذا:

FileInfo

  • FileInfoId int, PK, هوية
  • FileText varchar(max) (يمكن أن تكون فارغة)
  • FileCreatedDate التاريخ والوقت الخ.

FileContent

  • FileInfoId int, PK, FK
  • FileContent varbinary(max)

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

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

لقد وجدت هذه الصفحة, ولكن ليس متأكدا مما إذا كان ينطبق في هذه الحالة.

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

المحلول

هناك لا أداء ولا التشغيلية ميزة.منذ SQL 2005 لوب أنواع بالفعل المخزنة لك المحرك في فصل تخصيص وحدة مستقلة ب-شجرة.إذا كنت دراسة الجدول مؤشر المنظمة من SQL Server سترى أن كل قسم قد تصل إلى 3 وحدات التخصيص:بيانات LOB الصف تجاوز:

Table Organization

لوب مجال (varchar(max), nvarchar(max), varbinary(max), XML, CLR UDTs فضلا عن إهمال أنواع النص ntext و صورة) سوف يكون في سجل البيانات نفسها في فهرس متفاوت المسافات فقط بصمة صغيرة جدا:مؤشر في لوب توزيع الوحدة ، انظر تشريح سجل.

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

إذا لوب محتوى ملف كامل ثم ربما يجب عليك الترقية إلى SQL server 2008 باستخدام FILESTREAM.

نصائح أخرى

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

تحرير:كما أشار ريموس Rusanu على بعض DBMS تطبيقات مثل SQL2005 ، كائن كبير أنواع بشفافية المخزنة على طاولة منفصلة بشكل فعال في تخفيف عملية العيب من وجود كبير السجلات.إدخال هذه الميزة ضمنا يؤكد على [صحيح] جدول واحد النهج ضعف.

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

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

يمكن أن يساعد في فصل الصورة، (n) النص، (n) varchar (max) و varbinary (كحد أقصى) من الجداول الأوسع البالسة للحصول على بعض القيود من SQL Server.

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

في حال كنت ترغب فعليا في الحفاظ على بيانات LOB من وحدة تخصيص الجدول، ما زلت تستطيع تعيين "أنواع القيمة الكبيرة من الصف" جدول الجدول.

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