के तपाईं डेटाबेससँग काम गर्दै हुनुहुन्छ जुन सैकड़ों रेकर्डहरू वा लाखौं रेकर्डहरू छन्, उचित डेटाबेस डिजाइन सधैँ महत्त्वपूर्ण छ। न केवल यो जानकारी पुन: प्राप्त गर्न धेरै सजिलो बनाउनेछ, यसले भविष्यमा डाटाबेस विस्तार गर्न पनि सरल बनाउनेछ। दुर्भाग्यवश, यो केही जालहरूमा पतन गर्न सजिलो छ जुन भविष्यमा चीजहरू गाह्रो बनाउन सक्छ।
त्यहाँ सबै डेटाबेस डेटाबेस सामान्य रूपमा लिखित छन्, तर यदि तपाइँ यी साधारण गलत गल्तीहरूबाट टाढा रहनु हुन्छ भने, तपाईलाई राम्रो डाटाबेस डिजाइनमा सही ट्रयाकमा हुनेछ।
डेटाबेस गल्ती # 1: तालिकामा दोहोरो टेबल
राम्रो डेटाबेस डिजाइन को लागि अंगूठे को एक बुनियादी नियम को दोहराव डेटा को पहिचान र उनको दोकान मा उन दोहराव स्तंभहरुलाई राखन को लागी छ। एक तालिकामा फिल्डहरू दोहोर्याउनेहरूलाई स्प्रेडशिटको संसारबाट आएको आम लागि सामान्य छ, तर जब स्प्रिेडसिटहरू डिजाइनद्वारा फ्लैट हुने गर्छन्, डेटाबेस सम्बन्धी हुनुपर्छ। यो 2 डी देखि 3 डी सम्म जाँदैछ।
सौभाग्य देखि, दोहोरो फिल्ड प्राय: स्थानमा सजिलो हुन्छ। यस तालिकामा मात्र हेर्नुहोस्:
अर्डरआईडी | Product1 | Product2 | Product3 |
1 | टेडी बियर | जेली बीन | |
2 | जेली बीन |
जब एक आदेशमा चार उत्पादनहरू हुन्छ तब के हुन्छ? हामीले तीन भन्दा बढी उत्पादनहरू समर्थन गर्न तालिकामा अर्को क्षेत्र थप्न आवश्यक छ। र यदि हामीले इनपुट डेटा मद्दत गर्न तालिकाको वरिपरि क्लाइन्ट अनुप्रयोगको निर्माण गर्यौं भने, हामी यसलाई नयाँ उत्पादन फिल्डको साथ परिमार्जन गर्न आवश्यक पर्दछ। र हामी जेलीबीन्ससँग सबै आदेशहरू क्रममा कसरी पाउन सक्छौं? हामी सबै उत्पादन क्षेत्रमा टेबलमा क्वेरीमा क्वेरी गर्न बाध्य हुनुपर्ने थियो SQL कथन जुन यस्तो देख्न सक्दछ: SELECT * बाट उत्पादनहरू उत्पादन 1 = 'जेली बीन' वा उत्पाद 2 = 'जेली बीन' वा उत्पाद 3 = 'जेली बीन'।
एक टेबल बनाउनुको सट्टामा सबै जानकारी सँगसँगै सामानहरू, हामीसँग तीन तालिकाहरू हुनुपर्छ जुन प्रत्येक जानकारीको फरक टुक्रा राख्छ। यस उदाहरणमा, हामी अर्डर तालिका चाहानुहुन्छ आफैं बारेमा जानकारी, एक उत्पादन तालिका हाम्रो सबै उत्पादनहरू र एक उत्पाद ओभर ट्याब्लेटले आदेशमा उत्पादनहरु लाई लिङ्क गरेको छ।
अर्डरआईडी | ग्राहकआईडी | अर्डर मिति | कुल |
1 | 7 | 1/24/17 | 19.99 |
2 | 9 | 1/25/17 | 24.99 |
ProductID | उत्पादन | गणना गर्नुहोस् |
1 | टेडी बियर | 1 |
2 | जेली बीन | 100 |
ProductOrderID | ProductID | अर्डरआईडी |
101 | 1 | 1 |
102 | 2 | 1 |
याद गर्नुहोस् कि कसरी प्रत्येक तालिकाको आफ्नै अनूठा आईडी फील्ड छ। यो प्राथमिक कुञ्जी हो। हामी अर्को तालिकामा विदेशी कुञ्जीको रूपमा प्राथमिक कुञ्जी मान प्रयोग गरेर तालिकाहरू लिङ्क गर्दछौं। प्राथमिक कुञ्जी र विदेशी कुञ्जीका बारे थप पढ्नुहोस्।
डेटाबेस गल्ती # 2: तालिकामा ट्याब्लेट एम्बेड गर्दै
यो अर्को साधारण गल्ती हो, तर यो सधै धेरै पटक दोहोर्याउने क्षेत्रको रूपमा खडा गर्दैन। डेटाबेस डाइरेक्ट गर्दा, तपाईं निश्चित गर्न चाहानुहुन्छ कि सबै डेटा तालिकामा आफैसँग सम्बन्धित छ। यो फरक छ कि स्पटिङ गर्ने बारेमा बच्चाको खेल जस्तो छ। यदि तपाईंसँग केला छ, एक स्ट्रबबेरी, एक आड र एक टेलिभिजन सेट, टेलिभिजन सेट कहीं सम्भव छ।
उही रेखाहरूसँग, यदि तपाईंसँग बिक्री व्यक्तिहरूको तालिका छ भने, त्यस तालिकामा सबै जानकारी विशेष रूपमा बिक्री बिक्री व्यक्तिसँग सम्बन्धित हुनुपर्छ। कुनै पनि थप जानकारी जुन त्यो बिक्री व्यक्तिको अनियमित छैन तपाईंको डेटाबेसमा अरु अन्य हुन सक्छ।
SalesID | पहिलो | अन्तिम | ठेगाना | फोन नम्बर | कार्यालय | OfficeNumber |
1 | सैम | इलियट | 118 मुख्य सेन्ट, अस्टिन, TX | (215) 555-5858 | अस्टिन डाउनटाउन | (212) 421-2412 |
2 | एलिस | स्मिथ | 504 द्वितीय स्ट्रीट, न्यूयर्क, NY | (211) 122-1821 | न्यूयर्क (पूर्व) | (211) 855-4541 |
3 | जो | पारीश | 428 अकेर सेन्ट, अस्टिन, TX | (215) 545-5545 | अस्टिन डाउनटाउन | (212) 421-2412 |
जबकि यो तालिका हुन सक्छ कि यो सबै व्यक्तिगत विक्रेता संग सम्बन्धित छ, यो वास्तव मा तालिका भित्र एम्बेडेड एक तालिका छ। नोट गर्नुहोस् कि कार्यालय र कार्यालय नम्बर कसरी "अस्टिन डाउनटाउन" संग दोहोर्याउँछ। के हो भने कार्यालय कार्यालय नम्बर परिवर्तन हुन्छ? तपाईंले जानकारी परिवर्तनको एक एकल टुक्राको लागि डेटा को सम्पूर्ण सेट अपडेट गर्न आवश्यक छ, जुन कहिल्यै राम्रो कुरा होइन। यी क्षेत्रहरू आफ्नै तालिकामा सारिनु पर्छ।
SalesID | पहिलो | अन्तिम | ठेगाना | फोन नम्बर | OfficeID |
1 | सैम | इलियट | 118 मुख्य सेन्ट, अस्टिन, TX | (215) 555-5858 | 1 |
2 | एलिस | स्मिथ | 504 द्वितीय स्ट्रीट, न्यूयर्क, NY | (211) 122-1821 | 2 |
3 | जो | पारीश | 428 अकेर सेन्ट, अस्टिन, TX | (215) 545-5545 | 1 |
OfficeID | कार्यालय | OfficeNumber |
1 | अस्टिन डाउनटाउन | (212) 421-2412 |
2 | न्यूयर्क (पूर्व) | (211) 855-4541 |
यो प्रकारको डिजाईनले तपाईंलाई बिक्री व्यक्ति तालिकामा अव्यवहारको सपना नबिना बिना कार्यालय तालिकामा थप जानकारी थप्न सक्ने क्षमता दिन्छ। कल्पना गर्नुहोस् कि कति काम गर्नु केवल सडक ठेगाना, शहर, राज्य र जिप कोड को ट्रयाक राख्न को लागी यदि सबै जानकारी कि बिक्री व्यक्ति तालिका मा थियो!
डाटाबेस गल्ती # 3: सूचनाको दुई वा बढी टुक्राहरू एकल क्षेत्रमा राख्नुहोस्
बिक्री व्यक्ति तालिकामा कार्यालय जानकारी इम्बेडिंग त्यो डेटाबेससँग मात्र समस्या थिएन। ठेगाना फिल्डले तीनवटा टुक्रा जानकारी समावेश गर्यो: सडक ठेगाना, शहर र राज्य। डेटाबेसमा प्रत्येक फिल्डमा मात्र जानकारीको एक मात्र भाग समावेश हुनु पर्छ। जब तपाईं सँग एक क्षेत्र मा जानकारी को धेरै टुकडे छ, यो जानकारी को लागि डेटाबेस क्वेरी गर्न कठिन हुन सक्छ।
उदाहरणका लागि, के यदि हामी अस्टिनका सबै बिक्री व्यक्तिहरूमा क्वेरी चलाउन चाहन्छौ भने? हामी ठेगाना फिल्ड भित्र खोजी गर्न आवश्यक छ, जुन केवल अपर्याप्त छैन, तर खराब जानकारी फिर्ता गर्न सक्दछ। सबै पछि, के हुन्छ यदि कसैलाई अस्टिन सडक मा पोर्टल्यान्ड, ओरेगन मा रहन्छ?
यहाँ के टेबल जस्तो देखिन्छ:
SalesID | पहिलो | अन्तिम | ठेगाना 1 | ठेगाना 2 | शहर | राज्य | जिप | फोन |
1 | सैम | इलियट | 118 मुख्य सेन्ट | अस्टिन | TX | 78720 | 2155555858 | |
2 | एलिस | स्मिथ | 504 द्वितीय सेंट | न्यूयोर्क | NY | 10022 | 2111221821 | |
3 | जो | पारीश | 428 Aker St | Apt 304 | अस्टिन | TX | 78716 | 2155455545 |
यहाँ टिप्पणी गर्न केहि चीजहरू छन्। पहिलो, "ठेगाना 1" र "ठेगाना 2" दोहोरो दोहोर्याउने क्षेत्रहरू गल्तीमा पर्दछ।
यद्यपि, यस अवस्थामा उनीहरूले डाटाको अलग टुक्राहरूको सन्दर्भ गर्दै छन् जुन सीधा तालिकामा जान सक्ने डाटाको दोहोरो समूहको तुलनामा बिक्री व्यक्तिमा सम्बन्धित छ।
साथै, बचाउनको लागि बोनस गल्तीको रूपमा, फोन नम्बरका लागि ढाँचा तालिकाबाट हटाइएको कसरी हेर्नुहोस्। तपाईंले सम्भवतः खेतको ढाँचा भण्डारण गर्नबाट जोगिनै पर्छ। फोन नम्बरको अवस्थामा, त्यहाँ थुप्रै तरिकाहरू छन् जुन फोन नम्बर लेख्न: 215-555-5858 वा (215) 555-5858। यसले तिनीहरूको फोन नम्बरद्वारा विक्रय व्यक्ति खोजी गर्न वा एकै क्षेत्रको कोडमा बिक्री व्यक्तिहरू खोज्न गाह्रो बनाउनेछ।
डाटाबेस गल्ती # 4: सही प्राथमिक कुञ्जी प्रयोग गरिएन
धेरै उदाहरणहरूमा, तपाइँ आफ्नो प्राथमिक कुञ्जीको लागि स्वचालित रूपमा वृद्धि गर्ने संख्या वा अन्य जेनेरेट नम्बर वा अल्फान्युमेरिक प्रयोग गर्न चाहनुहुन्छ। तपाइँ प्राथमिक कुञ्जीको लागि कुनैपनि वास्तविक जानकारी प्रयोग गर्नबाट बच्न पनि भइरहेको भए तापनि यसले राम्रो पहिचानकर्ता बनाउनेछ।
उदाहरणको लागि, हामीसँग हरेकको आफ्नै व्यक्तिगत सामाजिक सुरक्षा नम्बर छ, त्यसैले कर्मचारी डेटाबेसको लागि सामाजिक सुरक्षा नम्बर प्रयोग गरेर राम्रो विचार जस्तो आवाज हुन सक्छ। तर दुर्लभ हुँदा, यो परिवर्तन पनि एक सामाजिक सुरक्षा नम्बरको लागि सम्भव छ, र हामी कहिलेकाहीँ हाम्रो प्राथमिक कुञ्जी परिवर्तन गर्न चाहँदैनौं।
र यो साँचो कुञ्जीको रूपमा वास्तविक जानकारी प्रयोग गर्नमा समस्या हो। यसले परिवर्तन गर्न सक्छ।
डाटाबेस गल्ती # 5: नामकरण कन्फिगरेसन प्रयोग गरिँदैन
यो ठूलो सम्झौता जस्तो लाग्दैन जब तपाई पहिला तपाईको डाटाबेस डिजाइन गर्न सुरु गर्नुहुन्छ, तर एक पटक तपाईंलाई जानकारी प्राप्त गर्न डेटाबेस विरुद्ध प्रश्नहरूको जवाफ दिईरहेको छ, नामकरण सम्मेलनमा तपाइँले फिल्ड नामको सम्झना गर्न मद्दत गर्नेछ।
केवल कल्पना गर्नुहोस् कि यो प्रक्रिया कति गाह्रो हुन्छ यदि नामहरू FirstName को रूपमा भण्डारण गरिएको थियो, अन्तिम मेनु एक तालिकामा and first_name, last_name अर्को तालिकामा।
दुई सबैभन्दा लोकप्रिय नामकरण अधिवेशनहरूले क्षेत्रमा हरेक शब्दको पहिलो अक्षर पूंजीकरण गर्दै वा अन्डरकोरको प्रयोग गरी शब्दहरू अलग पार्दै छन्। तपाईंले पहिलो शब्द बाहेक सबै शब्दको पहिलो अक्षरको पूंजीकरण गर्ने केही विकासकर्ताहरू पनि हेर्न सक्नुहुन्छ: firstName, lastName।
तपाईं पनि एकल तालिका नाम वा बहुवचन तालिका नामहरू प्रयोग गर्न निर्णय गर्न चाहानुहुन्छ। के यो अर्डर तालिका वा अर्डर तालिका हो? के यो ग्राहक तालिका वा ग्राहक तालिका हो? फेरि, तपाईं अर्डर तालिका र ग्राहक तालिकाको साथ फंसाउन चाहनुहुन्न।
तपाईंले छनौट गर्नुभएको नामकरण सम्मेलन वास्तवमा एक नामकरण सम्मेलनमा छनौट र स्टिक गर्ने प्रक्रियाको रूपमा महत्त्वपूर्ण होइन।
डेटाबेस गल्ती # 6: सुधार अनुक्रमणिका
सूचकांक सही प्राप्त गर्न एक कठिन चीज मध्ये एक हो, विशेष गरी डाटाबेस डिजाईनमा ती नयाँ को लागी। सबै प्राथमिक कुञ्जी र विदेशी कुञ्जी अनुक्रमित गरिनु पर्छ। यी के के लिङ्कहरू सँगै सँगै छन्, त्यसैले कुनै अनुक्रमणिका बिना, तपाईले तपाईको डाटाबेसबाट खराब प्रदर्शनहरू देख्नुहुनेछ।
तर प्रायः के के छ भनेर बिर्सिएको छ अर्को क्षेत्रहरू। यी "WHERE" क्षेत्रहरू हुन्। यदि तपाई प्राय: तपाइँको खोजलाई WHERE खण्डमा फिल्ड प्रयोग गरेर तपाईँको खोजलाई सरोकार गर्न जाँदै हुनुहुन्छ भने, तपाइँ त्यस क्षेत्रमा एक सूचकांक राख्न सोच्न चाहानुहुन्छ। यद्यपि, तपाईं तालिकामा अत्यधिक सूचकांक गर्न चाहानुहुन्छ, जसले प्रदर्शनलाई पनि चोट पुर्याउन सक्छ।
कसरी निर्णय गर्ने? यो डाटाबेस डिजाइनको कलाको अंश हो। त्यहाँ तालिकामा राखिने कति अनुक्रमणिकाहरूमा कुनै पनि कडा सीमा छैन। मुख्यतः, तपाईले प्राय: WHERE खण्डमा प्रयोग गरिएको कुनै पनि क्षेत्रलाई सूचकांक गर्न चाहानुहुन्छ। तपाईको डाटाबेस ठीकसँग अनुक्रमणिका बारे थप पढ्नुहोस्।