2008-11-29 10 views
6

मैं उपयोगकर्ता-आधारित वेबसाइट बना रहा हूं। प्रत्येक उपयोगकर्ता के लिए, मुझे विभिन्न प्रकार की जानकारी स्टोर करने के लिए कुछ MySQL तालिकाओं की आवश्यकता होगी (यानी, userInfo, उद्धरण सबमिट, और दरें सबमिट की गई)। क्या यह एक बेहतर विचार है:क्या यह मेरी साइट पर प्रत्येक उपयोगकर्ता को MySQL डेटाबेस असाइन करने के लिए अनुचित है?

ए) साइट के लिए एक डेटाबेस (यानी, "mySite") और उसके बाद सैकड़ों या हजारों टेबल बनाएं (यानी, "userInfo_bob", "quotessubmitted_bob", "userInfo_shelly ", और" quotesSubmitted_shelly ")

या

ख) सैकड़ों या डेटाबेस के हजारों बनाएं (जो है," बॉब "," शैली ", आदि) और डेटाबेस प्रति केवल एक जोड़ी टेबल (जो है, "बॉब" के अंदर: userInfo, उद्धरण सबमिट, दरें सबमिट, आदि)

क्या मुझे एक डेटाबेस का उपयोग करना चाहिए, और उस डेटा में कई तालिकाओं का उपयोग करना चाहिए abase, या डेटाबेस और डेटाबेस के कुछ डेटाबेस और कुछ टेबल?


संपादित करें:

समस्या यह है कि मैं कौन क्या रेट किया है का ट्रैक रखने की जरूरत है। इसका मतलब है कि यदि किसी उपयोगकर्ता ने 300 उद्धरण रेट किए हैं, तो मुझे यह जानने में सक्षम होना चाहिए कि उपयोगकर्ता ने कितने उद्धरण दिए हैं।

शायद मुझे यह करना चाहिए?

उद्धरण के लिए एक तालिका। उपयोगकर्ताओं को सूचीबद्ध करने के लिए एक टेबल। बनाई गई सभी रेटिंग दस्तावेज करने के लिए एक तालिका (यानी, तीन कॉलम: उपयोगकर्ता, उद्धरण, रेटिंग)। यह उचित लगता है। क्या इसमें कोई समस्या है?

+1

आपके संपादन के अनुसार, सभी रेटिंगों को संग्रहीत करने के लिए एक तालिका का उपयोग करने में कोई समस्या नहीं है, वास्तव में यह एक बहुत ही सामान्य डेटाबेस डिज़ाइन है। आपके मूल प्रश्न पर, प्रति उपयोगकर्ता एकाधिक टेबल और एकाधिक डेटाबेस हालांकि, मूर्खतापूर्ण है। (कोई अपराध नहीं) edg के लिंक पर एक नज़र डालें। मुझे यकीन है कि वे – Sekhat

+0

सही रास्ते पर निश्चित रूप से मदद करेंगे। – dkretz

उत्तर

37

एक डेटाबेस का उपयोग करें।

उपयोगकर्ताओं को पकड़ने के लिए एक तालिका का उपयोग करें और उद्धरण रखने के लिए एक तालिका।

उन दो तालिकाओं के बीच आपके पास एक सारणी है जिसमें उपयोगकर्ताओं को उद्धरण के लिए मिलान करने के लिए जानकारी शामिल है, यह तालिका उस रेटिंग को रखेगी जिसे उपयोगकर्ता ने उद्धरण दिया है।

यह सरल डिज़ाइन आपको व्यावहारिक रूप से असीमित संख्या में उद्धरण, असीमित उपयोगकर्ताओं को स्टोर करने की अनुमति देगा, और आप शून्य या अधिक उपयोगकर्ताओं और इसके विपरीत प्रत्येक उद्धरण को मिलान करने में सक्षम होंगे।

मध्य में तालिका में उपयोगकर्ता कुंजी और उद्धरण तालिका में शामिल होगी।

आपको कुछ डेटाबेस डिज़ाइन मूलभूत बातों की समीक्षा करने में मदद मिल सकती है, यहां स्टैक ओवरफ्लो पर बहुत से संबंधित प्रश्न हैं।

इन के साथ शुरू ...

What is normalisation?

What is important to keep in mind when designing a database

How many fields is 'too many'?

More tables or more columns?

+4

मुझे यहां edcho गूंजना होगा। वास्तव में, वास्तव में, वास्तव में, इस तरह की एक परियोजना उपक्रम करने से पहले और अधिक पढ़ें और डेटाबेस डिजाइन का अध्ययन करने की जरूरत है। आपको लगता है कि सही पैर क्या है, इसे शुरू करना वास्तव में आसान है, केवल यह पता लगाने के लिए कि ए) यह सही पैर नहीं है बी) आपके पैर के नीचे एक चट्टान और सी है ... – GregD

+1

... आपके पास कोई पैराशूट नहीं है। सभी ईमानदारी से यदि आप इस तरह के प्रश्न पूछ रहे हैं (इसमें कुछ भी गलत नहीं है), तो उपयोगकर्ता के लिए वेबसाइट तैयार करने के लिए यह थोड़ा जल्दी है, खासकर यदि आप इसके लिए भुगतान कर रहे हैं। यदि आप इसे सीखने के लिए कर रहे हैं, तो सलाह दीजिए कि एडीजी ने एक अध्ययन दिया है, पढ़ें .. – GregD

+1

सी) चट्टान मांस में पिरान्हा से पीड़ित पानी खाने से गिर जाती है, जो आपको समाप्त कर देती है अगर आप भाग्यशाली भाग्य से द्रव्यमान को याद करते हैं जंजीर चट्टानों का। – Sekhat

2

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

5

दो समस्याओं (वास्तव में बहुत अधिक है, लेकिन इन के साथ शुरू करते हैं।)

  1. आप डेटाबेस नाम के लिए पैरामीटर का उपयोग नहीं कर सकते।

  2. आप टेबल पर अपना पहला परिवर्तन करने के लिए क्या करेंगे? (संकेत: कार्य एक्स (# डेटाबेस))।

और "कई तालिकाओं" से पता चलता है कि आप प्रति उपयोगकर्ता तालिकाओं के बारे में सोच रहे हैं। यह एक और समान समस्याग्रस्त विचार है।

7

मैं एक डेटाबेस है, और कई टेबल कि डेटाबेस में, या कई डेटाबेस और डेटाबेस प्रति कुछ तालिकाओं का उपयोग करना चाहिए?

न तो, आप एक डेटाबेस का उपयोग करना चाहिए, उपयोगकर्ताओं के लिए एक मेज, आदि के भावों का मेज, दरों के लिए एक मेज,

फिर आप जो कहते हैं (उदाहरण के लिए) अपने उद्धरण तालिका में किसी स्तंभ के साथ कौन सा उपयोगकर्ता उद्धरण के लिए है।

CREATE TABLE user (
    user INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    ... 
); 

CREATE TABLE quote (
    quote INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    user INT(10) UNSIGNED NOT NULL, 
    ... 
); 

CREATE TABLE rate (
    rate INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    user INT(10) UNSIGNED NOT NULL, 
    ... 
); 

तब आप अपने SELECT बयान में एसक्यूएल का उपयोग JOIN रों टेबल एक साथ लिंक करने के लिए।

संपादित करें - उपर्युक्त उपयोगकर्ताओं और दरों के बीच एक से अधिक संबंधों को मान रहा था - जहां 'कई से अधिक' रिश्ते हैं जिन्हें आपको प्रत्येक प्रकार के डेटा के लिए एक टेबल की आवश्यकता होती है, और फिर पंक्तियों के साथ एक और तालिका प्रत्येक उपयोगकर्ता < -> दर जोड़ी।

0

आपका डिज़ाइन त्रुटिपूर्ण है .. आपको प्रत्येक खाते के लिए नई संस्थाओं को जोड़ने के बजाय, सही उपयोगकर्ता को विदेशी कुंजी का उपयोग करके टुपल्स को बाध्य करना चाहिए।

0

हमारे पास एक समान प्रणाली है, जिसमें कई उपयोगकर्ता और उनके प्रासंगिक डेटा हैं। हमने एक डेटाबेस और सामान्य टेबल दृष्टिकोण का पालन किया है। इस तरह आपके पास एक ही टेबल होल्डिंग उपयोगकर्ता की जानकारी होगी और एक टेबल होगा जिसमें उनके सभी डेटा होंगे। डेटा के साथ-साथ हमारे पास उपयोगकर्ता आईडी का संदर्भ है जो हमें जानकारी को अलग करने में मदद करता है।

0

एक डेटाबेस में कई तालिकाओं या एक ही टेबल वाले कई डेटाबेस के बीच क्या अंतर है? क्या यह बेहतर सुरक्षा या विभिन्न प्रकार के बैकअप के लिए है?

मैं mySQL के बारे में निश्चित नहीं हूँ, लेकिन MSSQL में यह इस तरह है:

  • आप अलग तरह से बैकअप डेटाबेस के लिए की जरूरत है आप अलग अलग डेटा फ़ाइलों में टेबल रखने पर विचार करने की जरूरत है। डिफ़ॉल्ट रूप से वे सभी प्राथमिक फ़ाइल में हैं। आप विभिन्न भंडारण निर्दिष्ट कर सकते हैं।

  • सभी लेनदेन tempdb में हैं। यह बहुत अच्छा नहीं है क्योंकि यदि यह लेनदेन लॉग भर जाता है तो सभी डेटाबेस काम करना बंद कर देते हैं। फिर आप प्रत्येक उपयोगकर्ता के लिए अलग SQL सर्वर के साथ समाप्त कर सकते हैं। यदि आप हजारों ग्राहकों के बारे में बात कर रहे हैं तो कौन सा बकवास है।

-1

एक डेटाबेस और एक तालिका का उपयोग करें। आपको एक तालिका "उपयोगकर्ता" की आवश्यकता होगी और यह तालिका इन तालिकाओं (प्राथमिक - विदेशी कुंजी) से जुड़ी होगी।

0

तुलना के लिए, एक समय जब आप वास्तव में अलग डेटाबेस चाहते हैं तो आपके पास कई वेबहोस्टिंग क्लाइंट होंगे जो डेटाबेस के साथ अपनी चीजें करना चाहते हैं - फिर आप सुरक्षा सेट अप कर सकते हैं ताकि वे केवल अपने डेटा तक पहुंच सकें।

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

0

प्रत्येक आवश्यक इकाई सेट (सबमिट किए गए उद्धरणों के लिए एक तालिका, सबमिट दरों के लिए एक तालिका) के अनुसार उचित रूप से बनाए गए इंडेक्स वाली एक तालिका।

CREATE TABLE quotesSubmtited (
    userid INTEGER, 
    submittime DATETIME, 
    quote INTEGER, 
    quotedata INTEGER, 
    PRIMARY KEY (userid, submittime), 
    FOREIGN KEY quote REFERENCES quotesList (quoteId), 
    FOREIGN KEY userid REFERENCES userList (userId) 
); 

CREATE INDEX idx1 ON quotesSubmitted (quote); 

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

मुझे यह भी लगता है कि आप जॉइन और विदेशी कुंजी के बारे में नहीं जानते हैं, इसलिए सुनिश्चित करें कि आप उनके बारे में भी पढ़ लें। बहुत उपयोगी!

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