3NF तक सामान्यीकरण
पहले, दूसरे और तीसरे सामान्य रूप तथा उनसे दूर होने वाली विसंगतियाँ
3NF तक सामान्यीकरण, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
साक्षात्कारकर्ता सामान्यीकरण के बारे में क्यों पूछते हैं
सामान्यीकरण डेटाबेस के मॉडल-निर्माण की एक मूलभूत अवधारणा है, और साक्षात्कारकर्ता इसका उपयोग यह जाँचने के लिए करते हैं कि आप डिज़ाइन स्तर पर डेटा की अखंडता समझते हैं या नहीं। प्रश्न अक्सर ऐसा होता है: "सामान्यीकरण क्या है और यह क्यों महत्वपूर्ण है?"
सामान्यीकरण स्तंभों और तालिकाओं को व्यवस्थित करने की प्रक्रिया है, जिससे अनावश्यक दोहराव कम हो और अद्यतन, प्रविष्टि तथा विलोपन संबंधी विसंगतियों को रोका जा सके। प्रत्येक सामान्य रूप (1NF, 2NF, 3NF) एक अधिक कठोर नियम जोड़ता है।
एक अच्छा उत्तर केवल पाठ्यपुस्तक वाली परिभाषाएँ नहीं बताता, बल्कि उन विसंगतियों का नाम भी लेता है जिन्हें सामान्यीकरण दूर करता है।
तीन विसंगतियाँ
सामान्य रूपों पर जाने से पहले उन समस्याओं को समझिए जिन्हें वे हल करते हैं। एक ही जगह पर सब कुछ संग्रहीत करने वाली खराब ढंग से डिज़ाइन की गई तालिका तीन विसंगतियों से ग्रस्त होती है:
- अद्यतन विसंगति: एक ही तथ्य कई पंक्तियों में संग्रहीत होता है, इसलिए बदलाव के लिए उन सभी पंक्तियों को बदलना पड़ता है, वरना डेटा असंगत हो जाता है।
- प्रविष्टि विसंगति: आप किसी तथ्य को उससे असंबंधित डेटा दिए बिना जोड़ नहीं सकते (जैसे, ऑर्डर के बिना कोई उत्पाद नहीं जोड़ सकते)।
- विलोपन विसंगति: एक पंक्ति हटाने पर गलती से कोई दूसरा स्वतंत्र तथ्य भी मिट जाता है।
यदि आप किसी उदाहरण तालिका में इन विसंगतियों को पहचान सकते हैं, तो आप सामान्यीकरण के हर चरण का औचित्य बता सकते हैं।
एक असामान्यीकृत प्रारंभिक तालिका
यह साक्षात्कार का एक प्रसिद्ध उदाहरण है: ऑर्डर, ग्राहकों और उत्पादों को मिलाने वाली एक चौड़ी तालिका। पंक्तियों में ग्राहक का ईमेल और उत्पाद की कीमत बार-बार दिखाई देती है। विसंगतियाँ यहीं मौजूद हैं।
साक्षात्कार में आपका काम इस तालिका को 3NF तक सामान्यीकृत करना और हर विभाजन को समझाना है।
-- Unnormalized: everything in one table
CREATE TABLE orders_flat (
order_id INT,
customer_id INT,
customer_email VARCHAR(255),
product_id INT,
product_name VARCHAR(100),
unit_price DECIMAL(10,2),
quantity INT
);पहला सामान्य रूप (1NF)
1NF के अनुसार प्रत्येक स्तंभ में एक ही एकल मान होना चाहिए और किसी खाने के भीतर दोहराए जाने वाले समूह या सरणियाँ नहीं होनी चाहिए।
यदि कोई स्तंभ 'phone1, phone2' जैसी अल्पविराम से अलग की गई सूची रखता है या आपके पास product1, product2, product3 जैसे स्तंभ हैं, तो तालिका 1NF का उल्लंघन करती है।
समाधान यह है कि हर मान के लिए अपनी अलग पंक्ति दें। साक्षात्कारकर्ता आपसे सुनना चाहते हैं: "एकल मान, कोई दोहराए जाने वाला समूह नहीं, और हर पंक्ति की पहचान करने वाली कुंजी।"
-- Violates 1NF: a list inside one column
-- phones = '555-1111, 555-2222'
-- 1NF fix: one phone per row
CREATE TABLE customer_phone (
customer_id INT,
phone VARCHAR(20),
PRIMARY KEY (customer_id, phone)
);फलनात्मक निर्भरताएँ
2NF और 3NF समझाने के लिए आपको कार्यात्मक निर्भरता शब्दावली का उपयोग करना होगा। हम A -> B लिखकर कहते हैं कि "A, B को निर्धारित करता है": A के प्रत्येक मान के लिए B का ठीक एक मान होता है।
हमारी ऑर्डर तालिका में:
customer_id -> customer_emailproduct_id -> product_name, unit_priceorder_id, product_id -> quantity
वास्तव में सामान्यीकरण का उद्देश्य यह सुनिश्चित करना है कि हर गैर-कुंजी स्तंभ पूरी कुंजी पर और केवल कुंजी पर निर्भर हो।
दूसरा सामान्य रूप (2NF)
2NF तब लागू होता है जब प्राथमिक कुंजी संयुक्त हो। यह किसी गैर-कुंजी स्तंभ को कुंजी के केवल एक भाग पर निर्भर होने से रोकता है (इसे आंशिक निर्भरता कहते हैं)।
हमारी ऑर्डर-पंक्ति की कुंजी (order_id, product_id) है। लेकिन product_name और unit_price केवल product_id पर निर्भर हैं, पूरी कुंजी पर नहीं। यह आंशिक निर्भरता है, इसलिए यह 2NF का उल्लंघन करती है।
समाधान यह है कि उत्पाद की विशेषताओं को product_id पर आधारित products तालिका में ले जाएँ।
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
unit_price DECIMAL(10,2)
);
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);तीसरा सामान्य रूप (3NF)
3NF पारगामी निर्भरताओं को दूर करता है: ऐसी गैर-कुंजी विशेषता जो सीधे कुंजी पर निर्भर होने के बजाय किसी दूसरी गैर-कुंजी विशेषता पर निर्भर हो।
मान लीजिए किसी orders तालिका में customer_id और customer_email हैं। यहाँ order_id -> customer_id -> customer_email है। ईमेल कुंजी पर केवल customer_id के माध्यम से निर्भर है; यह पारगामी निर्भरता है।
समाधान यह है कि ग्राहकों को उनकी अपनी तालिका में अलग कर दें। अब प्रत्येक तालिका के गैर-कुंजी स्तंभ केवल उसकी कुंजी पर निर्भर होंगे।
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_email VARCHAR(255)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);एक-पंक्ति स्मरण-सहायिका
साक्षात्कारकर्ता ऐसे अभ्यर्थी को पसंद करते हैं जो 3NF को एक वाक्य में संक्षेपित कर सके। इसका प्रसिद्ध रूप है:
"हर गैर-कुंजी स्तंभ कुंजी पर, पूरी कुंजी पर और केवल कुंजी पर निर्भर होना चाहिए।"
- कुंजी -> 1NF (एक कुंजी और एकल मान होते हैं)।
- पूरी कुंजी -> 2NF (कोई आंशिक निर्भरता नहीं)।
- केवल कुंजी -> 3NF (कोई पारगामी निर्भरता नहीं)।
यह एक पंक्ति आवश्यकता पड़ने पर आपको तीनों रूप फिर से बनाने में सक्षम बनाती है।
BCNF: आगे पूछा जाने वाला प्रश्न
कोई कुशल साक्षात्कारकर्ता बॉयस-कॉड सामान्य रूप (BCNF) के बारे में पूछ सकता है, जो 3NF का अधिक कठोर रूप है।
BCNF के अनुसार प्रत्येक कार्यात्मक निर्भरता X -> Y के लिए X एक सुपरकुंजी होनी चाहिए। 3NF उस दुर्लभ स्थिति में अपवाद की अनुमति देता है जब आश्रित विशेषता किसी अभ्यर्थी कुंजी का भाग हो; BCNF उस अपवाद को भी हटा देता है।
व्यवहार में आपको BCNF के उल्लंघन अक्सर नहीं दिखेंगे, लेकिन इसका नाम लेना और यह कहना कि "BCNF, प्रधान विशेषताओं के लिए बिना किसी अपवाद वाला 3NF है" विषय की गहरी समझ का संकेत देता है।
सामान्यीकरण कब न करें (NOT)
वरिष्ठ स्तर का उत्तर इस समझौते को स्वीकार करता है। सामान्यीकरण डेटा की अखंडता सुधारता है, लेकिन पढ़ने की गति घटा सकता है, क्योंकि किसी प्रश्न का उत्तर देने के लिए अधिक संयोजन आवश्यक होते हैं।
जानबूझकर किया गया असामान्यीकरण इन स्थितियों में स्वीकार्य है:
- कार्यभार में पढ़ने की गतिविधि अधिक हो और संयोजन मुख्य बाधा हों।
- आप विश्लेषण या रिपोर्ट तैयार करने वाली परत बना रहे हों (तारा-स्कीमा, जिसके बारे में आगे बताया जाएगा)।
- आप दोहराई गई प्रति को समकालिक रख सकते हों (ट्रिगर, ETL, संग्रहीत दृश्य)।
कहिए: "OLTP की अखंडता के लिए सामान्यीकरण करें; OLAP की पढ़ने की गति के लिए सोच-समझकर असामान्यीकरण करें।"
श्वेतपट पर चरण-दर-चरण अभ्यास
अब सबको एक साथ लागू करें। प्रत्यक्ष साक्षात्कार में, जब आपको कोई अव्यवस्थित तालिका दी जाए:
- अभ्यर्थी कुंजी बताइए और कार्यात्मक निर्भरताएँ सूचीबद्ध कीजिए।
- एकलता और दोहराए जाने वाले समूहों की जाँच कीजिए (1NF)।
- यदि कुंजी संयुक्त है, तो आंशिक निर्भरताओं की जाँच कीजिए (2NF)।
- गैर-कुंजी से गैर-कुंजी निर्भरताओं की जाँच कीजिए (3NF)।
- परिणामी तालिकाएँ प्राथमिक और विदेशी कुंजियों के साथ बनाइए।
इन चरणों को ज़ोर से समझाते हुए बोलना ही ठीक वह चीज़ है जिसका साक्षात्कारकर्ता मूल्यांकन करता है।
त्वरित जाँच
सामान्य रूपों के अपने ज्ञान की जाँच कीजिए।
पुनरावलोकन: 3NF तक सामान्यीकरण
अब आप सामान्यीकरण से जुड़े साक्षात्कार के मुख्य प्रश्न का शुरू से अंत तक उत्तर दे सकते हैं:
- सामान्यीकरण दोहराव कम करके अद्यतन, प्रविष्टि और विलोपन संबंधी विसंगतियों को दूर करता है।
- 1NF: एकल मान, कोई दोहराए जाने वाले समूह नहीं।
- 2NF: संयुक्त कुंजी पर कोई आंशिक निर्भरता नहीं।
- 3NF: कोई पारगामी (गैर-कुंजी से गैर-कुंजी) निर्भरता नहीं।
- इसे इस प्रकार संक्षेपित कीजिए: "कुंजी, पूरी कुंजी और केवल कुंजी।"
- BCNF 3NF को और कठोर बनाता है; पढ़ने की गतिविधि अधिक वाले विश्लेषण के लिए सोच-समझकर असामान्यीकरण करें।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “3NF तक सामान्यीकरण” पाठ निःशुल्क है?
हाँ—“3NF तक सामान्यीकरण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“3NF तक सामान्यीकरण” में मैं क्या सीखूँगा?
पहले, दूसरे और तीसरे सामान्य रूप तथा उनसे दूर होने वाली विसंगतियाँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“3NF तक सामान्यीकरण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- 3NF तक सामान्यीकरण
- ER मॉडलिंग और संबंधों की कार्डिनैलिटी
- स्टार स्कीमा और डेटा वेयरहाउस डिज़ाइन
- पूर्ण मॉक इंटरव्यू समस्या-संग्रह