2008-08-20 10 views
5

तो, आप एक वेब एप्लिकेशन लिख रहे हैं और आपके पास साइट के कई क्षेत्र हैं जहां उपयोगकर्ता फाइल अपलोड कर सकते हैं। इसके लिए मेरी मूल कार्यप्रणाली सर्वर पर वास्तविक फ़ाइल को संग्रहीत करना है, और एक डेटाबेस तालिका है जो संग्रहीत फ़ाइल नाम को उस रिकॉर्ड से जोड़ती है जो उससे संबंधित है।फ़ाइल कब एक फ़ाइल है?

मेरा प्रश्न यह है: क्या फ़ाइल के प्रत्येक "प्रकार" के लिए एक अलग तालिका होनी चाहिए? साथ ही, फ़ाइलों को सर्वर पर संदर्भ-संबंधित स्थानों में संग्रहीत किया जाना चाहिए, या सभी एक साथ?

कुछ उदाहरण: उपयोगकर्ता प्रोफ़ाइल फ़ोटो, नौकरी आवेदन CVs, सीएमएस पृष्ठों पर संबंधित दस्तावेजों, आदि

उत्तर

3

आपके उदाहरण से, दो तालिकाओं के लिए एक तर्क है, क्योंकि आपके पास फाइलें हैं जो दो अलग-अलग चीजों से जुड़ी हो सकती हैं।

  • सीवी, फोटो उपयोगकर्ता से जुड़े होते हैं।
  • अनुलग्नक एक सीएमएस पृष्ठ से जुड़े हुए हैं।

आप एक तालिका में इन रखते हैं, (और आप उन एक से अधिक फोटो या सीवी के लिए अनुमति देना चाहते हैं) तो आप फ़ाइलों> उपयोगकर्ताओं और फ़ाइलों> cms_pages संबद्ध करने के लिए दो लिंक-टेबल की जरूरत है। तर्कसंगत रूप से यह एक एचएबीटीएम संबंध का तात्पर्य है, जो सही नहीं है और असंगत डेटा के लिए अनुमति देता है।

दो तालिका दृष्टिकोण थोड़ा क्लीनर है और केवल फाइलों को एक साधारण संबंधित इकाई के साथ सही प्रकार की इकाई के साथ जोड़ने की अनुमति देता है।

लेकिन मुझे नहीं लगता कि इस प्रश्न का कोई "सही" जवाब है, जब तक कि आपको विभिन्न फ़ाइल प्रकारों के लिए विभिन्न प्रकार के मेटाडेटा को स्टोर करने की आवश्यकता न हो।

प्रत्येक फ़ाइल के लिए mimetype को संग्रहीत करने, या गणना करने में सक्षम होना सुनिश्चित करें, इसलिए इसे सही HTTP शीर्षकों के साथ ब्राउज़र पर सही तरीके से वापस किया जा सकता है।

2

से आप क्या कहा है मैं सिर्फ एक में यादृच्छिक के साथ फ़ाइलें (UUID या क्या-नहीं) फ़ाइल नाम संग्रहीत करेंगे जगह। इसके बाद मेरे पास 'अनुलग्नक' तालिका या कुछ ऐसी होगी जिसमें आपकी सभी बाहरी फ़ाइलों के संदर्भ शामिल होंगे। इस तालिका में उस फ़ाइल के लिए मेटा-डेटा भी होगा, तो यह किस प्रकार की फ़ाइल है (चित्र, सीवी आदि) और इसी तरह।

हालांकि आप जिस एफएस का उपयोग कर रहे हैं उसके आधार पर एक निर्देशिका में फ़ाइलों की संख्या के लिए कठिन सीमा हो सकती है।

2

विभिन्न स्थानों में विभिन्न फ़ाइलों को संग्रहीत करने के कई कारण हो सकते हैं।

सबसे पहले, एक निर्देशिका में फ़ाइलों की संख्या पर प्रतिबंध एक विचार हो सकता है।

दूसरी सुरक्षा सार्वजनिक रूप से देखने योग्य हो सकती है - अगर कुछ सार्वजनिक रूप से देखने योग्य हैं (जैसे उदाहरण के लिए प्रोफाइल फोटो) लेकिन अन्य नहीं हैं (जैसे सीवी) तो उन्हें अलग-अलग निर्देशिकाओं में रखने के लिए आसान प्रबंधन करना आसान होगा।

तीसरा, फ़ाइलों को विभाजित करने के लिए सरल व्यवस्थापक कार्य आसान हो सकते हैं, उदाहरण के लिए फ़ाइल एक्सप्लोरर में ब्राउज़ करना, या बैकअप प्रबंधित करना, या एकाधिक स्थानों पर फ़ाइल संग्रहण को विभाजित करने के लिए एप्लिकेशन को संशोधित करना।

फ़ाइल नाम विवादों का मुद्दा भी है, लेकिन यदि आप डेटाबेस आईडी फ़ील्ड से मिलान करने के लिए सब कुछ नाम बदलते हैं (उदाहरण के लिए) तो यह कोई मुद्दा नहीं होगा।

लेकिन दिन के अंत में यह संभवतः वॉल्यूम और आपकी पसंद पर निर्भर करता है।

2

प्रत्येक फ़ाइल प्रकार के लिए एक अलग तालिका केवल तभी प्रासंगिक हो जाती है जब आप प्रत्येक प्रकार की फ़ाइल के लिए अन्य मेटाडेटा (और इसलिए, अतिरिक्त कॉलम) संग्रहीत करते हैं। यदि प्रत्येक फ़ाइल प्रकार के लिए आपकी टेबल में केवल वही कॉलम होते हैं (उदा।, फ़ाइल नाम, फ़ाइल प्रकार, डेटअपलोडेड, आदि) तो यह सब एक टेबल पर रखने का अर्थ होगा।

संबंधित मुद्दे