سؤال

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

سؤالي هو هذا:هل يجب أن يكون هناك جدول مختلف لكل "نوع" من الملفات؟وأيضًا، هل يجب تخزين الملفات في مواقع ذات صلة بالسياق على الخادم أم جميعها معًا؟

بعض الأمثلة:صور الملف الشخصي للمستخدم، والسيرة الذاتية لطلبات الوظائف، والمستندات ذات الصلة على صفحات نظام إدارة المحتوى (CMS)، وما إلى ذلك.

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

المحلول

من المثال الخاص بك، هناك وسيطة لجدولين، حيث أن لديك ملفات يمكن ربطها بشيئين مختلفين.

  • السير الذاتية والصور المرتبطة بالمستخدم.
  • ترتبط المرفقات بصفحة CMS.

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

يعد أسلوب الجدولين أكثر نظافة قليلاً ويسمح فقط بربط الملفات بالنوع الصحيح للكيان من خلال علاقة بسيطة تنتمي إلى.

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

تأكد أيضًا من تخزين نوع mimetype أو القدرة على حسابه لكل ملف حتى يمكن تقديمه بشكل صحيح مرة أخرى إلى المتصفح، باستخدام رؤوس HTTP الصحيحة.

نصائح أخرى

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

قد تكون هناك حدود صارمة لعدد الملفات في دليل واحد، اعتمادًا على نوع FS الذي تستخدمه.

قد تكون هناك أسباب مختلفة لتخزين ملفات مختلفة في مواقع مختلفة.

أولاً، قد يكون من الاعتبار تقييد عدد الملفات في دليل واحد.

ثانيًا، قد يمثل الأمان مشكلة - إذا كان بعضها قابلاً للعرض بشكل عام (مثل صور الملف الشخصي على سبيل المثال) ولكن البعض الآخر ليس كذلك (مثل السير الذاتية)، فسيكون من الأسهل إدارتها وضعها في أدلة مختلفة.

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

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

ولكن في نهاية المطاف، ربما يعتمد الأمر على الأحجام وتفضيلاتك الخاصة.

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

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