2009-02-20 13 views
9

मैं अभ्यास के लिए एक छोटा मंच बना रहा हूँ। मैं देखता हूं कि phpBB जैसे फ़ोरम थ्रेड टेक्स्ट को एक अलग तालिका में संग्रहीत करते हैं।आप फ़ोरम की डीबी स्कीमा कैसे तैयार करेंगे?

क्यों? इसे एक ही टेबल में क्यों न स्टोर करें?

कुछ की तरह: thread_id, thread_date, thread_text, thread_author

क्यों यह इस तरह से किया जाता है? आपको इसे कैसे करना होगा?

+0

मैं सहमत नहीं, इस विषय को बड़े पैमाने पर यहाँ और अन्य साइटों पर चर्चा की गई। http://stackoverflow.com/questions/548793/a-good-tutorial-on-creating-a-php-forum-from-scratch/548810#548810 – barfoon

+0

@barfoon, यह एक मंच बनाने के बारे में है, वह है नहीं कर रहा है जानना चाहते हैं कि phpbb ऐसा करता है जो करता है। मुझे लगता है कि यह एक अच्छा सवाल है। अब अगर उसने पूछा, फोरम बनाने का सबसे अच्छा तरीका क्या है, तो मैं आपसे सहमत हूं। – Malfist

+0

"आपको क्या लगता है सबसे अच्छा तरीका है?" phpbb के लिए विशिष्ट ध्वनि नहीं है। – barfoon

उत्तर

1

वे टेबल के आकार के आकार के कारण टेक्स्ट को उसी तालिका में संग्रहीत नहीं करते हैं।

इस तरह, यहां तक ​​कि प्रविष्टियों की एक बहुत बड़ी संख्या के साथ, धागा सूची तालिका छोटे, अच्छी तरह से अनुक्रमित है और यह इसे स्कैन करने के तेज है। प्राथमिक कुंजी का उपयोग करके, जब आवश्यक हो, टेक्स्ट को केवल तभी एक्सेस किया जाता है।

छोटे मंचों के लिए, मुझे लगता है कि यह आवश्यक नहीं है, क्योंकि थोड़ा कोडिंग ओवरहेड है।

+1

टेक्स्ट कॉलम दोनों इंजनों में बाहर की पंक्तियों को संग्रहीत किया जाता है, यह तालिका आकार पर शायद ही कोई प्रभाव पड़ता है। – Quassnoi

+0

मैं सहमत हूं - मुझे लगता है कि मारियो का स्पष्टीकरण सही है –

1

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

+0

अच्छा विचार, कभी इसके बारे में सोचा नहीं। – Quassnoi

2

InnoDBFULLTEXT अनुक्रमण का समर्थन नहीं करता है और MyISAM लेनदेन का समर्थन नहीं करता है।

phpBB पता नहीं है, लेकिन शायद यही कारण है कि वे टेबल अलग है।

+0

आप 1 सेकंड मेरे से आगे थे>< – Mario

3

कभी भी phpbb guts के अंदर नहीं देखा, लेकिन यह पूर्ण-पाठ अनुक्रमण के कारण है। लेनदेन की अनुमति देने के लिए मुख्य तालिका के लिए इनो-डीबी इंजन और क्या नहीं। पूर्ण पाठ अनुक्रमण के लिए MyIsam।

+1

खैर ... phpBB, कम से कम में संस्करणों से पहले 3.0, सभी तालिकाओं के लिए MyISAM इस्तेमाल किया। http://www.postgresql.org/docs/current/static/storage-toast.html - –

3

एक बात के लिए, सबसे रिलेशनल डेटाबेस की फाइल सिस्टम लेआउट कि मनमाने ढंग से पाठ या डेटा के बड़े ब्लॉकों के संचय सिस्टम धीमा हो सकता इस तरह है। चूंकि डेटा आमतौर पर पंक्ति द्वारा संग्रहीत किया जाता है, जब खोज करते समय डेटाबेस को अब असंबंधित फ़ील्ड की तलाश करते समय चर-लंबाई वाले टेक्स्ट फ़ील्ड पर छोड़ना पड़ता है।

दूसरा, एक तालिका में सब कुछ डाल यह बहुत कठिन बाद में डेटा मॉडल में जोड़ने के लिए, आप प्रत्येक thread_id के लिए अधिक डेटा की आवश्यकता है, तो उदाहरण के लिए, बनाता है।

डिजाइनिंग डेटाबेस स्कीमा को अच्छी तरह से कुछ शिक्षा की आवश्यकता है। आपको http://en.wikipedia.org/wiki/Database_normalization से शुरू करना चाहिए। तीसरे-सामान्य रूप को समझना सुनिश्चित करें।

4

मैं वास्तव में नहीं जानता कि क्यों यह किया जाता है, लेकिन एक कारण मैं कल्पना कर सकते हैं पोस्ट मेटाडाटा (तिथि, लेखक, आदि) के लिए खोज और पुनर्प्राप्ति के अनुकूलन है।

According to Joel (और जोएल हमेशा सही है! ;-) डेटाबेस अपने डेटा को निश्चित-लंबाई वाले फ़ील्ड में निश्चित लंबाई के रिकॉर्ड लिखते हैं, इसलिए बाइट लंबाई से पॉइंटर को बढ़ाकर एक पंक्ति से अगले तक कूदना आसान है एक रिकॉर्ड का। लेकिन पोस्ट टेक्स्ट को स्टोर करने के लिए उपयोग किए जाने वाले बड़े टेक्स्ट फ़ील्ड में एक निश्चित आकार नहीं हो सकता है, क्योंकि एक पोस्ट की लंबाई एक विस्तृत श्रृंखला में भिन्न होती है और सभी पदों को पकड़ने के लिए पर्याप्त निश्चित लंबाई भंडारण बनाने से अंतरिक्ष की जबरदस्त मात्रा बर्बाद हो जाती है। इसका मतलब है कि उसी तालिका में पोस्ट टेक्स्ट को संग्रहीत करना क्योंकि अन्य जानकारी इसे बहुत धीमी कर देती है जब आप बड़ी संख्या में पोस्ट के लिए मेटाडेटा पुनर्प्राप्त करना चाहते हैं, जैसा कि हर बार कोई मुख्य मंच पृष्ठ देखता है।

दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करने का तरीका एक तालिका में निश्चित लंबाई वाले फ़ील्ड (यानी पोस्ट टेक्स्ट को छोड़कर सबकुछ) रखना है और चर-लंबाई वाले फ़ील्ड (यानी पोस्ट टेक्स्ट) दूसरे में है।

+0

कि कुछ के लिए सच हो सकता है डीबीएमएस लेकिन शायद ही आधुनिक लोगों के अधिकांश के लिए (मान लीजिए कि 'विरासत' या 'आदिम' हैं)। –

12

मैं ऑनलाइन शांत स्कीमा पाया।

schema http://yensdesign.com/tutorials/forumsdatabase/schemaFull.jpg

किसी भी बुनियादी मंच के डेटाबेस स्कीमा के लिए बहुत अच्छी स्टार्टर लगता है।

मैं जानता हूँ कि यह पुराना है, लेकिन मैं किसी को जो वाला फिर से इस सवाल को खोजने के है के लिए इस पोस्ट होता लगा।

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