2010-04-08 7 views
12

मैं माइस्क्ल डेटाबेस के साथ 2 वेब आधारित सिस्टम विकसित करने में व्यस्त हूं और तालिकाओं/विचारों/संग्रहीत दिनचर्या की मात्रा वास्तव में बहुत अधिक हो रही है और यह जटिलता को संभालने के लिए और अधिक चुनौतीपूर्ण है।बड़े डेटाबेस के लिए नामकरण सम्मेलन का उपयोग कैसे करें?

अब प्रोग्रामिंग भाषाओं में हमारे पास नेमस्पेसिंग है उदा। जावा पैकेज, सी ++ नेमस्पेस सॉफ़्टवेयर को विभाजित करने के लिए, इसे एक साथ समूहीकृत करने के लिए चीजों को और समझने योग्य बनाने के लिए। दूसरी ओर डेटाबेस में एक फ्लैट संरचना (कम से कम MySQL) उदा। टेबल और संग्रहीत प्रक्रियाएं एक ही स्तर पर हैं। इसलिए किसी को अधिक रचनात्मक होना है, नामकरण सम्मेलन बनाना, शायद एक से अधिक डेटाबेस का उपयोग करना या चीजों को देखने के लिए टूल का उपयोग करना।

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

आपके द्वारा उपयोग किए जाने वाले टूल का उल्लेख करने के लिए स्वतंत्र महसूस करें, लेकिन इसे खोलने के लिए इसे प्रतिबंधित करने का प्रयास करें और अधिमानतः लिनक्स समाधान ठीक है।

b.t.w डिज़ाइन के मामले में डेटाबेस को कितनी तालिकाओं पर विचार किया जाना चाहिए?

+1

यह सीधे मदद नहीं करता है, लेकिन आप रिफैक्टरिंग डेटाबेस देखना चाहते हैं (http://databaserefactoring.com/index.html) –

+0

आह, मेरी इच्छा सूची पर। धन्यवाद :-) –

उत्तर

3

एकमात्र समाधान जो मैंने पाया है वह आमतौर पर लागू होता है जो उपसर्गों की एक श्रृंखला विकसित करना और उन्हें टेबल पर लागू करना है (उदाहरण के लिए, मुख्य रूप से मानव संसाधन से संबंधित टेबल सभी एचआर_ शुरू करेंगे)। मैं आम तौर पर उपसर्ग को अन्य "ऑब्जेक्ट्स" में एप्लिकेशन (फॉर्म, रिपोर्ट, व्यू, संग्रहीत प्रक्रियाओं) में ले जाता हूं।

यह समाधान सही से बहुत दूर है और एक हैक का कुछ है लेकिन यह सिस्टम को ऑर्डर करने का एक मामला लाता है।

1

निश्चित रूप से, निश्चित रूप से नामकरण सम्मेलनों का उपयोग करें। MySQL डेटाबेस डिज़ाइन उन अंतिम स्थानों में से एक है जहां मैं हंगेरी नोटेशन का उपयोग करता हूं, लेकिन मैं अपनी सभी टेबल "टीबीएल" के साथ शुरू करता हूं, "वी", आदि के साथ मेरे सभी विचार

इसके अतिरिक्त, मैं MySQL वर्कबेंच में एकाधिक डेटाबेस आरेख बनाता हूं , आम तौर पर प्रति डोमेन कम से कम एक आरेख, जो मुझे आर्किटेक्चर में "मॉड्यूल" को देखने में मदद करता है।

यह एक ऐसा क्षेत्र है जहां एसक्यूएल सर्वर जैसे उत्पाद के बड़े फायदे हैं, क्योंकि डेटाबेस ऑब्जेक्ट्स डेटाबेस के अंदर कई स्कीमा से संबंधित हो सकते हैं, प्रोग्रामिंग में नेमस्पेस की तरह।

1

अच्छा ... MySQL में कोई वास्तविक समाधान नहीं है। कुछ डेटाबेस (उदाहरण के लिए PostgreSQL) के साथ आपके पास नामस्थान हैं और आप यह कर सकते हैं।

आप नामस्थानों का अनुकरण करने के लिए एकाधिक डेटाबेस का उपयोग करके इसके आसपास काम कर सकते हैं लेकिन इससे कई समस्याएं हो सकती हैं।

व्यक्तिगत रूप से मैं बस इस तरह से सबकुछ नाम दूंगा कि आपका प्रबंधन उपकरण इसे अलग कर सकता है (जैसे phpMyAdmin स्वचालित रूप से समूह डेटाबेस में अंडरस्कोर का उपयोग करता है)।

+0

phpMyAdmin जो अंडरस्कोर को पहचानता है वह अच्छा है। मुझे लगता है कि अगर किसी का नामकरण सम्मेलन सही है तो कोड उत्पन्न करने में सक्षम होना चाहिए उदा। डेटा एक्सेस ऑब्जेक्ट्स जो नामस्थान, कक्षाओं और विधियों के लिए डीबी संरचनाओं को मैप करते हैं। कुंजी स्थिरता होगी। –

+0

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

+0

@Jay: MySQL के मामले में आप डेटाबेस में शामिल हो सकते हैं, यही कारण है कि मैंने इसे एक विकल्प के रूप में दिया। लेकिन मैं आपसे सहमत हूं कि यह अनुशंसित है और मुझे वास्तव में कोई संकेत नहीं है कि क्वेरी प्लानर कैसे संभालता है। – Wolph

1

कुछ डेटाबेस में आपके पास स्कीमा हैं जिनका आप उपयोग कर सकते हैं, लेकिन मुझे लगता है कि mySQL में नहीं। संबंधित तालिकाओं को एक साथ रखने के लिए नामकरण सम्मेलन आपकी सबसे अच्छी शर्त हैं। एक चीज जिसे मैं विशेष रूप से करने की कोशिश करता हूं वह अलग-अलग तालिकाओं में फ़ील्ड नामकरण में बहुत ही समान है। यदि मेरी उपयोगकर्ता तालिका उपयोगकर्ता_आईडी के लिए कॉल करती है, तो मैं इसे अलग-अलग संबंधित तालिकाओं में person_id, userid, user, आदि के रूप में नहीं देखना चाहता हूं। साथ ही तालिका से तालिका तक उसी प्रकार के फ़ील्ड का उपयोग करते समय उसी डेटाटाइप का उपयोग करें (और यदि यह स्ट्रिंग डेटा है तो आकार)। फिर आप लगातार जुड़ने के लिए डेटा को परिवर्तित नहीं कर पाएंगे।

जहां तक ​​आपको एक बड़ी डेटाबेस होने की आवश्यकता है, यह तालिका का कितना रिकॉर्ड है, तालिकाओं की संख्या नहीं है। कई छोटे डेटाबेस में सैकड़ों टेबल हैं।मैं टेबल की संख्या के बारे में चिंता लगभग कभी नहीं होगा जब तक कि मैंने देखा कि किसी को बनाने टेबल Financials2009, Financials2010, आदि की तरह कुछ

+0

आप MySQL में dbname.tablename से * चुन सकते हैं। –

+2

लगातार फ़ील्ड नामों का उपयोग करने पर Ditto।मैं इन दिनों डेटाबेस पर काम कर रहा हूं, जहां न केवल अनौपचारिक अनावश्यक डेटा है, लेकिन जब वे खेतों की प्रतिलिपि करते हैं, तो वे उन्हें अलग-अलग नाम देते हैं! तो एक टेबल में हमारे पास "बेसकोस्ट" है और दूसरे में हमारे पास "लागत" है और दूसरे में हमारे पास "राशि" है। एक और क्षेत्र यहां "वितरित" है और वहां "datedelivered" और दूसरी तालिका में "deliverydate" है। और वे कम से कम अनुमान लगा सकते हैं। कौन जानता होगा कि "प्रोडिड" और "स्टाइल" एक ही बात है? आदि Argggh !! – Jay

2

Oracle ई-बिजनेस सूट 25,000 से अधिक टेबल और चारों ओर 33,000 बार देखा गया है। मैं कहूंगा कि एक बड़ी स्कीमा थी।

1

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

हम एचएलजीईएम के जवाब को प्रतिबिंबित करने के लिए लगातार नामकरण के बारे में भी सावधानी बरत रहे थे।

पीछे की ओर, एक नामकरण सम्मेलन जो प्रत्येक तालिका नाम को "खंड नाम" के साथ उपसर्ग करता, शायद एक अच्छा विचार होगा, लेकिन हमने इसके बिना काफी अच्छा प्रदर्शन किया।

कितना बड़ा बड़ा है? मुझे नहीं पता, एक अत्यधिक व्यक्तिपरक सवाल है। मैं आम तौर पर सोचता हूं कि एक डेटाबेस बड़ा होता है जब मैं एक बार में अपने सिर में पूरी चीज नहीं देख सकता। व्यावहारिक शब्दों में, मुझे लगता है कि जब आप कुछ दर्जन टेबल पास करते हैं। रिकॉर्ड्स की संख्या बहुत अधिक अप्रासंगिक है: एक डेटाबेस जिसमें दो टेबल हैं जिनमें एक बिलियन रिकॉर्ड हैं, उन्हें समझना आसान होगा; एक 1000 टेबल वाले डेटाबेस जिसमें दस रिकॉर्ड होते हैं, उन्हें समझना मुश्किल होगा। दूसरी ओर

0

डेटाबेस एक फ्लैट संरचना (MySql कम से कम)

के और अधिक है ... लेकिन आप एक ही mysql उदाहरण है, उदा पर चल रहे विभिन्न डेटाबेस हो सकता है

SELECT * 
FROM common.address adr 
purchasing.orders pod 
WHERE pod.cust_id=adr.cust_id 

(एनबी mysql 'यूएसई dbname' से बचने की कोशिश करें)। प्रश्नों में अपने उपनाम नामों को मानकीकृत करना एक अच्छा विचार है।

डिज़ाइन के संदर्भ में डेटाबेस को कितनी तालिकाओं पर विचार किया जाना चाहिए?

मुझे नहीं लगता कि एक मानक मीट्रिक है। मैं शायद 50 के आसपास भ्रमित हो जाना शुरू कर दूंगा। ओरेकल डीबी में से एक में मेरा 1567 है (हाँ, यह सामान्यीकृत है (प्रकार))

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