2010-02-04 19 views
17

कैसे डिज़ाइन करें मेरे पास एक वेब ऐप है जिसे मैंने एक ट्रकिंग कंपनी के लिए बनाया है जिसे मैं सास के रूप में पेश करना चाहता हूं। डेटाबेस डिजाइन करने का सबसे अच्छा तरीका क्या है?सास डेटाबेस

क्या मुझे प्रत्येक कंपनी के लिए एक नया डेटाबेस बनाना चाहिए? या क्या मुझे एक डेटाबेस का उपयोग टेबल के साथ करना चाहिए जिसमें कंपनी का उपसर्ग है? या क्या मुझे प्रत्येक तालिका में से एक के साथ एक डेटाबेस का उपयोग करना चाहिए और टेबल में एक कंपनी आईडी फ़ील्ड जोड़ना चाहिए? या क्या ऐसा करने का कोई और तरीका है?

+0

एसएएस? एक सेवा के रूप में सॉफ्टवेयर? –

+0

आपने जो कहा है वह बहुत अस्पष्ट है। आपके आवेदन में 'कंपनी' क्या दर्शाती है? –

+0

हाँ सेवा के रूप में सॉफ्टवेयर –

उत्तर

24

लगभग 10 साल पहले इसी तरह की स्थिति का सामना करना पड़ा, हमने प्रति ग्राहक डेटाबेस का चयन किया। हमारे पास सैकड़ों (हजारों) ग्राहक नहीं हैं। वापस देखकर यह हमारे द्वारा किए गए सर्वोत्तम निर्णयों में से एक था। बैकअप आसान हैं। विश्लेषण के लिए हमारे कार्यालय में एक ग्राहक को कॉपी करना आसान है (केवल अंतिम बैकअप लें)। स्केलिंग आसान है (एक बड़े सर्वर को एक अलग सर्वर पर ले जाना एक तनावग्रस्त एसक्यूएल सर्वर पर संसाधनों को मुक्त कर सकता है)। जोएल & जेफ ने stack overflow podcast (हाल ही में एक नहीं) पर इसके बारे में चर्चा की थी और जोएल ने वही किया जो मैं करता हूं ... प्रत्येक क्लाइंट को अपना डेटाबेस मिलता है। डेटाबेस purists अक्सर सभी को एक डीबी में लंपने के लिए बहस करेंगे, लेकिन मैं कभी ऐसा नहीं करता।

+2

मुझे यह जोड़ना चाहिए कि डेटाबेस को स्वयं क्लाइंट के लिए नामित किया गया है। सभी डेटाबेस में टेबल बिल्कुल वही नामित हैं। –

+3

आप इसे कैसे बनाए रखते हैं? यदि स्कीमा बदलता है तो क्या होगा - क्या आपको सभी डेटाबेस के स्कीमा बदलना होगा? –

+0

हम्म, निम्नलिखित पॉपलर सास प्रसाद में से कौन सा क्लाइंट प्रति डेटाबेस का उपयोग करता है? ट्रेलो, बेसकैम्प, Google Apps, सेल्सफोर्स सीआरएम, फ्रीजेंट, ज़ीरो, वर्कडे ... –

1

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

2

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

प्रत्येक को अपने सर्वर या सर्वर उदाहरण पर रखते हुए हमें डेटाबेस संरचना को समान नामों के साथ रखने की अनुमति मिलती है और सभी सर्वरों में परिवर्तनों को प्रसारित करना आसान बनाता है क्योंकि हमें डेटाबेस नाम बदलने की आवश्यकता नहीं है।

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

9

क्या मुझे प्रत्येक कंपनी के लिए एक नया डेटाबेस बनाना चाहिए?

हां - डॉन डिकिंसन पैसे पर थे। हालांकि, नीचे एक परिशोधन देखें।

या मुझे उन डेटाबेस के साथ एक डेटाबेस का उपयोग करना चाहिए जिसमें कंपनी का नाम उपसर्ग है?

लॉर्ड नो! क्लाइंट के लिए अलग-अलग के लिए अपने डेटाबेस प्रश्नों को बदलना आपको पागल हो जाएगा! साथ ही, आप लगभग निश्चित रूप से गतिशील एसक्यूएल चलाते हैं (जहां क्वेरी चलाने से पहले कोड में तालिका का नाम बदल दिया जाता है), जो प्रदर्शन को नुकसान पहुंचाएगा क्योंकि अधिकांश सर्वर क्वेरी प्लान और अंतरिम परिणामों को कैश करना चाहते हैं - यह तालिका के नामों पर काम नहीं करता है बदलते रहें।

या मैं एक प्रत्येक तालिका के साथ एक डेटाबेस का उपयोग करना चाहिए और सिर्फ तालिकाओं के लिए एक कंपनी आईडी फ़ील्ड जोड़ सकता हूँ?

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

तो, आप कह सकते हैं कि "नि: शुल्क परीक्षण" और "कांस्य" ग्राहक सभी का उपयोग कर एक डेटाबेस में लुप्त हो गए हैं आईडी उन्हें अलग करने के लिए; "चांदी" उपयोगकर्ताओं को अपना स्वयं का डेटाबेस मिलता है (लेकिन आप अभी भी स्कीमा में ग्राहक_आईडी फ़ील्ड रखते हैं, इसलिए आपको ग्राहक के दो स्तरों के बीच प्रश्नों को बदलने की ज़रूरत नहीं है), और "सोना" ग्राहकों को अपना डेटाबेस सर्वर मिलता है।

मैंने सास कंपनी में कुछ साल पहले ऐसा कुछ किया - और ग्राहक आमतौर पर बुनियादी ढांचे (पढ़ना: प्रदर्शन और लचीलापन) के साथ-साथ सुविधाओं पर अपग्रेड पथ प्राप्त करने के लिए खुश हैं।

+0

मुझे वास्तव में तीसरा विकल्प पसंद आया ... – Romias

+0

अंतिम विकल्प स्थिति को संभाल नहीं सकता है जहां "कांस्य" ग्राहक "चांदी" या "सोना" में अपग्रेड करना चाहता है –

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