2010-08-01 11 views
5

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

+2

मैं गतिशील तालिका निर्माण –

उत्तर

5

प्रत्येक उपयोगकर्ता की अपनी तालिका क्यों होगी? एक उपयोगकर्ता को बस एक टेबल में प्रवेश होना चाहिए। फिर आप उस उपयोगकर्ता की आईडी का उपयोग अन्य तालिकाओं में अन्य रिकॉर्ड देखने के लिए करते हैं।

यदि आपके पास डेटाबेस में 6 टेबल होते हैं तो प्रत्येक बार जब आप उपयोगकर्ता को जोड़ते हैं तो आपको भी अन्य टेबल भी जोड़ना होगा।

तो अब आपके पास 10 उपयोगकर्ता और 60 टेबल हैं।

+1

अब विशिष्ट उपयोगकर्ता के लिए सही तालिका से कनेक्ट करने पर विचार करें ... :) –

+0

यिक्स! हाँ क्या एक दुःस्वप्न – griegs

2

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

+0

एंटीटी-एट्रिब्यूट-वैल्यू (ईएवी) टेबल को हल करने से पहले अन्य समाधानों की तलाश करता हूं, आम तौर पर खराब प्रदर्शन होता है - खराब प्रदर्शन, लेकिन कार्यक्षमता आवश्यकताओं को समायोजित करने के लिए एक आवश्यक बुराई हो सकती है। –

+0

@ ओएमजी, ईएवी कैसे खेलता है? आपके पास डेटा के प्रकार के आधार पर अलग-अलग टेबल हैं, लेकिन आप एंट्री को किसी फ़ील्ड के माध्यम से उपयोगकर्ता से लिंक करते हैं। मुझे यकीन नहीं है कि यह ईएवी से कैसे संबंधित है। –

1

प्रत्येक उपयोगकर्ता के लिए अलग-अलग तालिका की आवश्यकता नहीं है। लेकिन डेटाबेस के साथ कुछ तरह के अनुकूलन हो सकते हैं।

उपयोगकर्ता वास्तव में एकल तालिका की पंक्ति का प्रतिनिधित्व करता है। उपयोगकर्ता के संबंध में विशिष्ट उद्देश्य के लिए अन्य टेबल हो सकते हैं। मान लीजिए "टिप्पणियाँ" तालिका में उपयोगकर्ता द्वारा टिप्पणियां होती हैं, और इस तालिका में उपयोगकर्ता से कई टिप्पणियां हो सकती हैं। फिर इस उपयोगकर्ता तालिका में टिप्पणी तालिका के साथ कई संबंध हैं।

कुछ ऑप्टिमाइज़ेशन जो मैं यहां देखता हूं वे बना रहे हैं (प्रमाण पत्र मामलों में भौतिक दृश्य), कॉलम इंडेक्सिंग क्वेरी के इस्तेमाल के आधार पर, यहां तक ​​कि डेटा/उपयोगकर्ता या आवेदन के लिए कुछ अन्य संबंधित मानदंडों के आधार पर टेबल्स का विभाजन।

+0

भौतिक विचार कुख्यात असामान्य हैं; टेबल विभाजन एक ऐसी सुविधा है जिसके लिए आपको भुगतान करना है (यह केवल SQL सर्वर के एंटरप्राइज़/डेवलपर संस्करण पर उपलब्ध है, ओरेकल के बारे में पता नहीं है ...)। ओपी क्या पूछ रहा है उससे परे दोनों अवधारणाएं हैं। –

3

आपके प्रश्न का उत्तर "नहीं" है। आम तौर पर ये साइटें क्या करती हैं, उनमें उपयोगकर्ताओं के लिए एक सारणी होती है जहां तालिका की कुंजी एक पूर्णांक आईडी फ़ील्ड होती है, और गुण उपयोगकर्ता के गुण होते हैं (जैसे नाम, स्क्रीन का नाम, पासवर्ड इत्यादि)। SQLite में, ऐसा लगता है:

create table User (id integer, email string); 

फिर आपके पास कुछ तालिकाओं, ब्लॉग_पोस्ट और टिप्पणियां हैं। इनमें से प्रत्येक तालिका में सभी उपयोगकर्ताओं के ब्लॉग पोस्ट और टिप्पणियां हैं। किसी उपयोगकर्ता की पहचान करने के लिए, एक "user_id" फ़ील्ड होता है जो उस तालिका में किसी विशेष उपयोगकर्ता से संबंधित पंक्ति की पहचान करता है।

create table BlogPosts (id integer, description text, user_id integer); 
create table Comments (id integer, description test, blogpost_id integer, user_id integer); 

वाक्यविन्यास अन्य डेटाबेस के लिए समान है। "user_id" किसी उपयोगकर्ता को ब्लॉग पोस्ट और किसी उपयोगकर्ता को टिप्पणी करता है। blogpost_id किसी उपयोगकर्ता को ब्लॉग पोस्ट से जोड़ता है। यानी आप प्रत्येक उपयोगकर्ता को अपने सभी प्रश्नों और टिप्पणियों से जोड़ सकते हैं।

आप प्रति उपयोगकर्ता एक टेबल बना सकते हैं, लेकिन फिर आपको एक मैपिंग करना होगा कि कौन सा उपयोगकर्ता किस डेटाबेस से कनेक्ट होता है, और आपको हमेशा प्रत्येक उपयोगकर्ता के लिए डेटाबेस से नए कनेक्शन खोलने की आवश्यकता होती है।

0

आप इसे सुरक्षित रूप से नहीं कर सकते हैं, क्योंकि पैरामीटरयुक्त क्वेरी पैरामीटर के रूप में तालिका-नाम नहीं ले सकते हैं।

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