डेटाबेस सामान्य रूप क्या हैं और क्या आप उदाहरण दे सकते हैं? [बन्द है]


277

रिलेशनल डेटाबेस डिज़ाइन में, डेटाबेस सामान्यीकरण या बस सामान्यीकरण की एक अवधारणा है, जो डेटा अतिरेक को कम करने और डेटा अखंडता में सुधार करने के लिए कॉलम (विशेषताएँ) और तालिकाओं (संबंधों) के आयोजन की एक प्रक्रिया है। (जैसा कि विकिपीडिया पर लिखा गया है )।

जैसा कि अधिकांश लेख कुछ तकनीकी हैं और इस प्रकार समझना कठिन है, मैं किसी से 1NF, 2NF, 3NF, यहां तक ​​कि 3.5NF (Boyce-Codd) के बारे में उदाहरणों के आधार पर स्पष्टीकरण को समझने के लिए आसान लिखने के लिए कह रहा हूं।

जवाबों:


435

1NF सामान्य रूपों का सबसे बुनियादी है - एक तालिका में प्रत्येक सेल में केवल एक जानकारी होनी चाहिए, और कोई डुप्लिकेट पंक्तियाँ नहीं हो सकती हैं।

2NF और 3NF सभी प्राथमिक कुंजी पर निर्भर होने के बारे में हैं। याद रखें कि एक प्राथमिक कुंजी कई स्तंभों से बनी हो सकती है। जैसा कि क्रिस ने अपनी प्रतिक्रिया में कहा:

डेटा कुंजी [1NF], संपूर्ण कुंजी [2NF] और कुछ नहीं बल्कि कुंजी [3NF] पर निर्भर करता है (इसलिए मेरी मदद करें Codd )।

2NF

मान लें कि आपके पास एक तालिका है जिसमें एक निश्चित सेमेस्टर में पाठ्यक्रम हैं, और आपके पास निम्नलिखित डेटा हैं:

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

यह 2NF में नहीं है , क्योंकि चौथा कॉलम पूरी कुंजी पर निर्भर नहीं करता है - लेकिन इसका केवल एक हिस्सा है। कोर्स का नाम कोर्स की आईडी पर निर्भर है, लेकिन इसका किस सेमेस्टर में लिया गया है, इससे कोई लेना-देना नहीं है। इस प्रकार, जैसा कि आप देख सकते हैं, हमारे पास डुप्लिकेट जानकारी है - कई पंक्तियाँ हमें बता रही हैं कि IT101 प्रोग्रामिंग है, और IT102 डेटाबेस है। तो हम तय करते हैं कि पाठ्यक्रम के नाम को किसी अन्य तालिका में ले जाएं, जहां कोर्सिड एनटीआईआरई कुंजी है।

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

अतिरेक नहीं!

3NF

ठीक है, तो मान लें कि हम पाठ्यक्रम के शिक्षक का नाम और उनके बारे में कुछ विवरण आरडीबीएमएस में जोड़ते हैं:

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

अब उम्मीद है कि यह स्पष्ट होना चाहिए कि टीचरनाम शिक्षक पर निर्भर है - इसलिए यह 3NF में नहीं है । इसे ठीक करने के लिए, हम उतना ही करते हैं जितना हमने 2NF में किया था - इस तालिका से शिक्षकनाम फ़ील्ड को बाहर निकालें, और इसे अपने आप में रखें, जिसमें शिक्षक की कुंजी है।

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

कोई अतिरेक नहीं !!

याद रखने वाली एक महत्वपूर्ण बात यह है कि यदि कोई चीज 1NF में नहीं है, तो यह 2NF या 3NF में नहीं है। इसलिए प्रत्येक अतिरिक्त नॉर्मल फॉर्म में उन सभी चीजों की आवश्यकता होती है जो निम्न सामान्य रूपों में होती हैं, साथ ही कुछ अतिरिक्त स्थितियां भी होती हैं, जिन्हें सभी को पूरा करना चाहिए ।


9
चीजों के बीच संबंध के संदर्भ में इसके बारे में सोचें। अगर मैं आपसे पूछता हूं "आईडी IT101 के साथ पाठ्यक्रम का नाम क्या है?", तो आप मुझे जवाब दे सकते हैं, है ना? इसी तरह, अगर मैं आपसे पूछता हूं कि "किस शिक्षक के पास आईडी 332 है?" आप मुझे बता सकते हैं कि शिक्षक क्या है। इस प्रकार, पाठ्यक्रम का नाम इसकी आईडी पर निर्भर है।
स्मैशरी

9
हालाँकि, आप दूसरे तरीके से नहीं जा सकते - अगर मैं आपसे पूछता "श्री जोन्स की आईडी क्या है?" आप एक अनूठा उत्तर देने में सक्षम नहीं हो सकते हैं, क्योंकि दो श्री जोन्स हो सकते हैं। तो आईडी नाम पर निर्भर नहीं है - यह वह नाम है जो आईडी पर निर्भर है।
स्मैशरी

2
आप इसे इस तरह भी सोच सकते हैं - नीचे तीसरी तालिका देखें (इसमें शिक्षकनाम के साथ पहला)। पहली पंक्ति में "मिस्टर जोन्स" होने से मुझे क्या रोकना है, लेकिन फिर दूसरी पंक्ति में "श्री ब्लॉग्स" डालना है? मुझे ऐसा करने की अनुमति नहीं दी जानी चाहिए , क्योंकि वे दोनों को 332 की आईडी मिली है।
स्मैशरी

30
@instantsetsuna - पूर्ण विवरण: कुछ अदालतों में, एक गवाह से पूछा जाता है कि क्या वे "सत्य, संपूर्ण सत्य और सत्य के सिवाय और कुछ नहीं बताएंगे, इसलिए भगवान की मदद करो"; जैसा कि ईश्वर को माना जाता है कि वह अधिकार से युक्त होता है, जब यह पता चलता है कि क्या आप सच कह रहे हैं। डेटाबेस के मामले में, हम कह सकते हैं "डेटा कुंजी पर निर्भर करता है, पूरी कुंजी और कुछ भी नहीं है लेकिन कुंजी है, इसलिए मुझे Codd मदद"। टेड कॉड वह है जो रिलेशनल डेटाबेस के विचार के साथ आया है - कुंजी पर निर्भर होने वाली चीजें, आदि, इसलिए वह रिलेशनल डेटाबेस के मामले में जाने का अधिकारी होगा।
स्मैशरी

5
@ शमाशरी 2NF और 3NF में क्या अंतर है?
ज़ो हस

119

मेरे पास सटीक शब्दों के लिए एक अच्छी स्मृति कभी नहीं थी, लेकिन मेरे डेटाबेस वर्ग में मुझे लगता है कि प्रोफेसर ने हमेशा कुछ ऐसा कहा:

डेटा कुंजी [1NF], संपूर्ण कुंजी [2NF] और कुंजी [3NF] पर निर्भर करता है।


72
... तो मुझे कोडित करने में मदद करें। en.wikipedia.org/wiki/Ted_Codd
स्मैशरी

6
तो क्या अंतर है The data depends on the key [1NF], nothing but the key [3NF]? कृपया हमें भ्रमित न करें, क्योंकि 1 सेंटेंस उत्तर उत्तर को स्पष्ट नहीं करता है लेकिन आगंतुकों को भ्रमित करता है!
प्रत्यूष

2
"प्रत्येक तालिका में प्रत्येक सेल में केवल एक जानकारी होनी चाहिए, और कोई डुप्लिकेट पंक्तियाँ नहीं हो सकती हैं।" - मैं यह नहीं देखता कि "डेटा कुंजी पर निर्भर करता है" उस सब से मेल खाता है।
साइमन फोर्सबर्ग

46

यहाँ एक त्वरित, संयुक्त रूप से butchered प्रतिक्रिया है, लेकिन एक वाक्य में:

1NF: आपकी तालिका को डेटा के अनियंत्रित सेट के रूप में व्यवस्थित किया गया है , और कोई दोहराए जाने वाले कॉलम नहीं हैं।

2NF: किसी अन्य स्तंभ के कारण आप अपनी तालिका के एक कॉलम में डेटा नहीं दोहराते हैं।

3NF: आपकी तालिका का प्रत्येक स्तंभ केवल आपकी तालिका की कुंजी से संबंधित है - आपके पास तालिका में ऐसा स्तंभ नहीं होगा जो आपकी तालिका में किसी अन्य स्तंभ का वर्णन करता हो जो कुंजी नहीं है।

अधिक विस्तार के लिए, विकिपीडिया देखें ...


1
जहाँ तक मैं बता सकता हूँ, दोहराने वाले समूहों में से 1NF का दोहराव स्तंभों को दोहराना नहीं है, बल्कि एकल स्तंभ जो एक ही विशेषता के लिए बार-बार आने वाले मानों का प्रतिनिधित्व करते हैं, अर्थात परमाणु नहीं हैं। मैं इसे उदाहरण के लिए आधार पर रखता हूं (1) stackoverflow.com/questions/23194292/… / (2) stackoverflow.com/questions/26357276/…
अंडरस्कोर_ड

34

1NF: प्रति कॉलम केवल एक मान

2NF: तालिका में सभी गैर प्राथमिक कुंजी कॉलम पूरे प्राथमिक कुंजी पर निर्भर होना चाहिए।

3NF: तालिका में सभी गैर प्राथमिक कुंजी स्तंभ संपूर्ण प्राथमिक कुंजी पर DIRECTLY निर्भर होना चाहिए।

मैंने यहाँ पर अधिक विस्तार से एक लेख लिखा है


क्योंकि आपने अटेंशन नहीं दिया। मैंने रोपण प्रदान करने के लिए उत्तर संपादित किया है।
रॉबर्ट हार्वे

जब भी संभव हो, उदाहरण को उत्तर में ही शामिल करें। एक आकस्मिक उपयोगकर्ता को आपके उत्तर को पढ़ने में सक्षम होना चाहिए और ब्लॉग लिंक पर क्लिक किए बिना उससे कुछ मूल्य प्राप्त करना चाहिए। इसका उत्तर दूसरे शब्दों में स्व-निहित होना चाहिए।
रॉबर्ट हार्वे

मैं उसका ध्यान रखूंगा। धन्यवाद :)
आर्कटिकस

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

3
@Arcturus लेख के माध्यम से पढ़ा, अभी भी सामान्यीकरण के लिए बेहतर स्पष्टीकरणों में से एक है।
ओलिएन 04
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.