क्या यह जांचने के लिए एक उपकरण है कि क्या मेरा डेटाबेस तीसरे सामान्य रूप से सामान्यीकृत है?


20

मैंने हाल ही में सामान्यीकरण के बारे में सीखा, और यह समझा कि नया स्कीमा लागू करते समय यह कितना महत्वपूर्ण है।

अगर मेरा डेटाबेस 2NF या 3NF है तो मैं कैसे जांच सकता हूं?

मैनुअल समीक्षा एक निश्चित विकल्प है, लेकिन मैं यहां एक स्वचालित टूल की तलाश कर रहा हूं।

मैं एक पॉइंट-एंड-क्लिक टूल की तलाश नहीं कर रहा हूं, और अधिक कुछ जो तालिका 3NF के अनुरूप बनाने के लिए संभावित अनुकूलन को उजागर करेगा। मुझे लगता है कि यह स्तंभों के नामों के अच्छे नमूना डेटा और / या शब्दार्थ विश्लेषण के आधार पर आँकड़ों का उपयोग कर सकता है।


1
मुझे उम्मीद है कि ऐसा कोई उपकरण मौजूद नहीं है। 2NF / 3NF को लागू करने की आवश्यकता नहीं है। एक स्कीमा / मॉडल को डिजाइन करना अक्सर व्यावहारिकताओं और प्रदर्शन के विचारों को ध्यान में रखना होता है, जो आमतौर पर खिड़की से बाहर xNF को काटता है
फिल '

2
क्या इसका मतलब यह है कि सामान्यीकरण का उपयोग वास्तविक में नहीं किया जाता है? मैंने इसे एक शुरुआती बिंदु के रूप में उपयोग करने की योजना बनाई है, और जब यह प्रदर्शन धीमा कर देता है, तो इसे असामान्य बनाने पर विचार करेगा।
____

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

मैं फिल से सहमत नहीं हूं। सामान्यीकरण कभी-कभी होता है। अन्य बार स्टार स्कीमा बेहतर है। यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं। स्वचालन से पहले सार्थक होने के लिए आपको बहुत अधिक तालिकाओं की आवश्यकता होगी।
वाल्टर मिटी

जवाबों:


24

सामान्यीकरण बिल्कुल वास्तविक दुनिया में उपयोग किया जाता है ... और उम्मीद है कि आप जानते हैं कि 3NF केवल तीसरा है ... अब क्या है, 8? लेकिन 3NF एक आसान लक्ष्य होना चाहिए।

हालांकि ... मैं यह कहने के लिए उद्यम करूंगा कि ऐसा कोई उपकरण नहीं हो सकता है।

सामान्यीकरण, तकनीकी रूप से, प्रत्येक तालिका की एक विशेषता है। किसी दिए गए डेटाबेस के भीतर, विभिन्न तालिकाओं के सामान्यीकरण के विभिन्न स्तर हो सकते हैं।

प्रत्येक तालिका तथ्यों का प्रतिनिधित्व करती है ... एक निश्चित प्रकार की चीज़ (व्यक्ति, खाता, आदेश, शिपमेंट, आइटम, स्थान) के उदाहरणों के बारे में तथ्य, कभी-कभी, विदेशी कुंजियाँ, जो आपको उस चीज़ के बारे में अन्य प्रकार के तथ्यों की ओर ले जाती हैं।

सामान्यीकरण के साथ यह भी करना है कि अस्पष्ट और निरर्थक डेटा पैटर्न को रोकने के लिए टेबल के डिज़ाइन के साथ-साथ टेबल की डिज़ाइन की क्षमता को कैसे सही और कुशलतापूर्वक दर्शाया गया है।

इस प्रकार, वास्तविक तथ्यों की समझ की आवश्यकता है ... जो स्वचालित साधनों के दायरे से बाहर है।

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

ऐसी दुनिया में जहां सभी प्रशिक्षक सभी विषयों को पढ़ाते हैं और प्रत्येक छात्र किसी भी संयोजन को ले सकता है लेकिन प्रत्येक प्रशिक्षक के प्रत्येक विषय पर एक से अधिक पाठ्यक्रम नहीं, यह तालिका वास्तव में 3NF में हो सकती है। वास्तविक दुनिया में, इस तालिका के लिए 3NF का दावा करना बेतुका है।

यह समझने के लिए कि यह 3NF में नहीं है, इसके द्वारा प्रस्तुत तथ्यों की प्रकृति की समझ की आवश्यकता है। हमारी वास्तविकता में, यह तालिका 3NF नहीं है क्योंकि (अन्य कारणों के साथ) विषय और प्रशिक्षक उन तरीकों से एक साथ जुड़े हुए हैं जिनका छात्र के साथ कोई लेना-देना नहीं है। यदि हमारे पास ऐसे पाठ्यक्रम हैं जहां प्रशिक्षक हमारे डेटाबेस में कहीं और संग्रहीत विषयों को पढ़ाते हैं, तो हम दूसरी तालिका से एक विदेशी कुंजी के बजाय यहां दोनों मानों की नकल क्यों करेंगे, यह दर्शाता है कि छात्र को पाठ्यक्रम के लिए साइन अप किया गया था? यदि प्रशिक्षक को बदल दिया जाता है, तो हमें कई स्थानों पर कई रिकॉर्ड बदलने होंगे।

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

भले ही मैं जो कुछ भी लिखता हूं, उसके साथ आंखों से आंखें मिलाकर नहीं देखता, मैं क्रिस डेट की किताब, डेटाबेस डिजाइन और रिलेशनल थ्योरी: नॉर्मल फॉर्म्स और ऑल दैट जैज की सिफारिश करूंगा, जो रिलेशनल मॉडल के अंतर्निहित सिद्धांत के बारे में विस्तार से विस्तार से बताता है।


2
इस विस्तृत उत्तर के लिए धन्यवाद। हालांकि, आपके उदाहरण के बाद, यह एक उपकरण के लिए संभव होना चाहिए जो नमूना डेटा का विश्लेषण करता है ताकि यह पता लगाया जा सके कि "प्रशिक्षक" मान बहुत बार दोहराया जाता है, और दूसरी तालिका में भी दिखाई देता है, इसलिए यह सुझाव देता है कि यह विदेशी कुंजी या किसी अन्य परिवर्तन के लिए उम्मीदवार हो सकता है। इस तालिका को 3nf अनुरूप बना देगा, या मैं कुछ याद कर रहा हूँ?
____

2
सच है, लेकिन प्रमुख शब्द अभी भी "सुझाव है।" एक उपकरण स्पष्ट अतिरेक की तलाश करके संरचनात्मक परिवर्तन का सुझाव दे सकता है, लेकिन मैं अभी भी यह सुनिश्चित करूंगा कि वास्तविक अतिरेक और सहसंबंध का एक आकस्मिक रूप ऐसे उपकरण के बीच अंतर करना मुश्किल होगा। डेटा की वास्तविक दुनिया की प्रकृति का ज्ञान आवश्यक है।
माइकल - sqlbot

@ack__: 3 के सामान्य रूप में होना या न होना एक जोड़ी की नहीं बल्कि संबंध का एक गुण है। इसलिए मैं यह नहीं देख सकता कि विदेशी कुंजी संबंध स्थापित करने का तीसरे सामान्य रूप से कोई लेना-देना नहीं है।
चमत्कार 173

मुझे लगता है कि बड़ा मुद्दा यह है कि बहु-स्तंभ कार्यात्मक निर्भरता का निर्धारण समस्याग्रस्त esp है। यदि मान समान हो सकते हैं और फिर भी विभिन्न संस्थाओं का प्रतिनिधित्व करते हैं (यानी जहां समग्र कुंजी शामिल हैं)। एक तालिका पर विचार करें: (address_text, शहर, State_province, mail_code, देश)। अब यह सामान्यीकृत नहीं है। (शहर, State_province) -> (देश)। तो पूरी तरह से सामान्य करने के लिए हमें इसे कम से कम तीन तालिकाओं में तोड़ना होगा, शायद चार (मेल_कोड हैंडलिंग)! लेकिन मिश्रित कुंजियाँ इस समस्या को मक्खी का पता लगाने के लिए बनाती हैं। साथ ही कॉम्प। चाबियाँ nf के विचार के लिए महत्वपूर्ण हैं इसलिए उन्हें अनदेखा नहीं किया जा रहा है!
क्रिस ट्रैवर्स

क्या कोई समझा सकता है कि "एक ऐसी दुनिया में जहां एक छात्र केवल एक विषय में एक पाठ्यक्रम ले सकता है और सभी प्रशिक्षकों ने सभी विषयों को पढ़ाया है, इस तालिका को वास्तव में 3NF में कहा जा सकता है" ऐसा लगता है कि छात्र -> विषय और कुछ भी नहीं। तब इस तालिका के लिए कुंजी (छात्र, प्रशिक्षक) 3NF को नहीं तोड़ेंगे? हर विषय को पढ़ाने वाला हर शिक्षक हमारी क्या मदद करता है?
ड्रू वर्ली

5

रिलेशनल सिद्धांत को विकसित करने में औपचारिक तरीकों का उपयोग करने के बिंदु का हिस्सा उन प्रक्रियाओं को विकसित करना था जो स्वचालित हो सकते हैं। मुझे पूरा यकीन है कि सीजे डेट सही तरीके से आता है और कहता है कि उनके परिचय में डेटाबेस सिस्टम

1980 के दशक के अंत या 1990 के दशक की शुरुआत में जारी किए गए कई CAS उपकरण ईआर आरेखों का विश्लेषण करके या नमूना डेटा के सांख्यिकीय विश्लेषण द्वारा हर संभव 5NF स्कीमा प्राप्त कर सकते हैं।

Visio Enterprise Architect (मुझे लगता है) उन लाइनों के साथ एक अपेक्षाकृत हाल ही में उपकरण है।


अच्छा लगा। मैं वास्तव में एक स्कीमा (ईआर आरेख और नमूना डेटा विश्लेषण) का विश्लेषण करने के लिए दोनों तरीकों की तलाश कर रहा था। क्या आपको Visio के अलावा किसी और हाल के सॉफ़्टवेयर के बारे में पता है? मेरे पास इसके लिए (अभी तक) लाइसेंस नहीं है।
___

1
लेकिन आपके ईआर आरेख अनिवार्य रूप से ऑब्जेक्ट-मॉडल आरेख हैं। यह मौजूदा डेटाबेस को लेने और अगर इसे इससे सामान्यीकृत किया जाता है, तो यह निर्धारित करने के लिए बिल्कुल समान नहीं है।
क्रिस ट्रैवर्स

2
सामान्यीकरण के लिए नमूना डेटा और सुझावों के साथ तालिकाओं का विश्लेषण एक्सेस की एक विशेषता थी, और शुरुआती संस्करणों में, अगर मुझे अच्छी तरह से याद है।
ypercube y

@ क्रिस: हाँ, मैं केवल शब्दार्थ विश्लेषण के लिए ईआर आरेखों की बात कर रहा था।
____

@ypercube: टिप के लिए धन्यवाद, मैं एक्सेस पर एक नज़र डालूंगा।
____

3

मुझे बहुत संदेह है कि आपको अभी भी एक उत्तर की आवश्यकता है, लेकिन यदि आप या कोई और व्यक्ति लाभान्वित हो सकता है, तो आप इस उपकरण को आजमाना चाह सकते हैं: http://uisacad5.uis.edu/cgi-bin/mcrem2/ database_design_tool.cgi


2

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


वास्तव में ऐसा करने के लिए कुछ मैनुअल समीक्षा होगी, मैं एक टूल से इसे पूरी तरह से स्वचालित रूप से करने की उम्मीद नहीं करता हूं। लेकिन मुझे पूरा यकीन है कि डीबी (कम से कम, इसके नमूने) और / या खेतों के नाम / प्रकार में मौजूदा डेटा का विश्लेषण करके अधिकांश काम को स्वचालित किया जा सकता है।
____ २३'१२

1
कैसे? जुड़ने की निर्भरता और कार्यात्मक निर्भरता पर सामान्यीकरण को परिभाषित किया गया है। एक कार्यात्मक निर्भरता को मूल रूप से आसानी से परिभाषित किया जाता है: सुपरकी के हर संभव मूल्य के लिए, कार्यात्मक निर्भरता में बिल्कुल एक मूल्य होता है। आप डेटा की समीक्षा को स्वचालित करके वहां नहीं पहुंच सकते हैं क्योंकि आपके पास अपने वर्तमान सेट के लिए, एक कार्यात्मक निर्भरता प्रतीत होती है, इसका मतलब यह नहीं है कि एक नई कुंजी अनुरूप होगी। यह पुराने सहसंबंध बनाम कार्य विभाजन के समान है। डेटाबेस में वर्तमान में क्या है, यह देखकर आप एक कार्यात्मक निर्भरता को प्रेरित नहीं कर सकते।
क्रिस ट्रैवर्स

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

शायद। लेकिन आइए एक वास्तविक उदाहरण लेते हैं जो बहुत ही नारकीय संबंधपरक डिजाइन वार है: पते। डाक पते को कैसे सामान्य किया जाना चाहिए? कितनी टेबल सुझाई जानी चाहिए? 3NF की मेरी समझ से, आपको देशों, राज्यों / प्रांतों और शहरों के लिए तालिकाओं की आवश्यकता है। मुझे नहीं पता कि पोस्टल कोड / शहर टूटने का कोई मतलब है लेकिन वे शायद करते हैं। लेकिन आप मौजूदा डेटा का विश्लेषण कैसे करते हैं और यह निर्धारित करते हैं कि (शहर, राज्य) -> देश? आप कैसे निर्धारित करते हैं कि क्या / यदि विश्व स्तर पर पोस्टल कोड इन निर्माणों से संबंधित नहीं हैं?
क्रिस ट्रैवर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.