2010-12-11 12 views
7

मैं अपना पहला वेब ऐप लिख रहा हूं, और मुझे पता है कि स्कीमा महत्वपूर्ण है लेकिन वास्तव में एक अच्छा लिखने के बारे में जानने के लिए पर्याप्त नहीं है।क्या किसी को वेब ऐप पर प्रत्येक उपयोगकर्ता के लिए एक नई टेबल बनाना चाहिए?

क्या प्रत्येक उपयोगकर्ता खाते में संग्रहीत जानकारी को संभालने के लिए मानक प्रोटोकॉल है? मेरी वृत्ति एक सारणी है जो उपयोगकर्ता की कुंजी और लॉग-इन जानकारी संग्रहीत करती है, और उनकी तालिका में एक हैंडल (शायद कुंजी?), और उसके बाद प्रत्येक उपयोगकर्ता के लिए एक टेबल होती है।

लेकिन मुझे आश्चर्य है कि प्रत्येक उपयोगकर्ता के लिए टेबल रखने के आसपास प्रदर्शन समस्याएं हैं या यदि ऐसा करने के लिए यह एक अविश्वसनीय रूप से बेवकूफ तरीका लगता है। ऐसा लगता है कि यह एक "हल समस्या" होनी चाहिए क्योंकि मूल रूप से सभी वेब ऐप्स में उपयोगकर्ता खाते होते हैं, लेकिन मैं खोज के माध्यम से कुछ भी नहीं ढूंढ पा रहा हूं। क्या विभिन्न प्रकार के वेब डेटा स्टोर करने के लिए "हल" स्कीमा के साथ कोई संसाधन हैं?

+0

मुझे यह बहुत पुराना पता है लेकिन मैं सुरक्षा कारण के लिए उसी तरह सोच रहा था। उदाहरण के लिए अन्य उपयोगकर्ताओं को छोड़कर अन्य तालिकाओं तक पहुंचने के लिए। –

+0

@ सैलेम एफ तो हां, इस तरह से संभावित सुरक्षा मुद्दे इस तरह से कर रहे हैं, लेकिन अलग-अलग तालिकाओं वाले बिगजर सुरक्षा मुद्दों भी हैं। बस शब्दों में कहें, आप नहीं चाहते कि आपका वेब ऐप कभी भी फ्लाई पर टेबल बनाये। आप केवल तालिका में डेटा जोड़ने या निकालना चाहते हैं। तालिकाओं को जोड़ना और बनाना पंक्तियों को जोड़ने और हटाने से अधिक अनुमतियों का एक स्तर है। और आप नहीं चाहते हैं कि आपके वेब ऐप को टेबल बनाने या हटाने की अनुमति हो। इस प्रकार आप अपने पूरे डेटाबेस को हैकर द्वारा हटाए गए या कॉपी किए गए हैं। अन्य कारण भी हैं, लेकिन यह सुरक्षा कारण है। – araneae

+0

@aranesa आपको यह अनुमति स्तर के बारे में सही है, अगर उपयोगकर्ता दूसरों को कच्चे तक पहुंच सकते हैं तो वह अन्य टेबल तक पहुंच सकता है। लेकिन विचार उपयोगकर्ताओं को केवल अपनी ही टेबल पर रखता था और नई टेबल को हटाने या बनाने की अनुमति नहीं देता था।या तो डीबी को नियंत्रित करने वाले हैकर लाभ के तरीके वह करेंगे जो वह चाहते हैं –

उत्तर

11

आमतौर पर आप प्रत्येक उपयोगकर्ता के लिए एक अलग तालिका नहीं बनाएंगे - यह समाधान अच्छी तरह से स्केल नहीं करता है।

इसके बजाय आप आमतौर पर सभी उपयोगकर्ताओं के डेटा को एक ही तालिका में डालते हैं (या डेटा के प्रति एक टेबल) और WHERE क्लॉज में स्थितियों का उपयोग यह सुनिश्चित करने के लिए करते हैं कि उपयोगकर्ता केवल अपना डेटा पढ़/लिख सके।

0

हाँ निश्चित रूप से एक अच्छा विचार नहीं है। आपको क्या करना चाहिए, कुछ वेब अनुप्रयोग ढांचे से परिचित होना है क्योंकि उनमें से अधिकांश/सभी पहले से ही आपके लिए यह उपलब्ध कराते हैं। अच्छी पसंद उदाहरण के लिए Django है।

+0

इस तरह की सीखने से मुझे लगता है ..... मैं यहां हूं क्योंकि मैं पूरी तरह से mysql और पायथन में लिखे गए मेरे आवेदन के सर्वर के लिए Django का उपयोग नहीं कर सकता और डेटाबेस को डिजाइन करने के अच्छे तरीकों को समझने की आवश्यकता है। – nsij22

4

जब तक आपका ऐप कुछ कस्टम नहीं है, तो आप काम करने के लिए एक वेब-ऐप फ्रेमवर्क चुनना चाहेंगे। साधारण चीजों के लिए सबसे आम रूपरेखाएं समान रूप से अच्छी तरह से काम करती हैं (हालांकि उस पर कुछ कठोर असहमति है)। मैं मानता हूं कि आपके पास एक प्रोग्रामिंग भाषा है जहां आपको लगता है कि आप सबसे मजबूत हैं इसलिए मैं सुझाव दूंगा कि आप वेब ढांचे के लिए अपनी प्राथमिक मार्गदर्शिका दें। भाषा के आधार पर कुछ सामान्य चौखटे हैं (यह एक विस्तृत सूची के लिए यहां तक ​​कि एक पास नहीं है):

के रूप में स्कीमा के बारे में आपका प्रश्न, आप database normalization में देखना चाहेंगे। अधिकांश ढांचे में पहले से ही उपयोगकर्ता निर्माण और प्रमाणीकरण से निपटने के लिए टूल होंगे, लेकिन सामान्य रूप से आप प्रति उपयोगकर्ता एक टेबल नहीं बनाना चाहेंगे। अधिक सामान्य दृष्टिकोण उपयोगकर्ताओं को बुलाए जाने वाले टेबल के लिए है, जिसमें कुछ id प्राथमिक कुंजी के रूप में था और फिर इसे एक विदेशी कुंजी के रूप में उपयोग किया जाता है जो अन्य डेटा का संदर्भ देता है।

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

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