What is Normalization in DBMS? Just know about First Normal Form with simple example

Normal Forms

What is Normalization in DBMS: वे Theoretical Rules जिनका किसी भी Relational Database Design के Compatible होना जरूरी होता है, Normal Forms कहलाते हैं। हर Normal Forms कुछ Strict Rules का समूह होता है। Theoretically Database जितने Higher Form में होता है, Relations के बीच का Design उतना ही अच्छा होता है।

जैसाकि हम पिछले चित्र में देखकर समझ सकते हैं, किसी भी Design की 6 Normal Forms हो सकती हैं। ये चित्र इस बात को दर्शाता है कि यदि कोई Design किसी Higher Form में है तो वह Design उसकी सभी Inner Normal Form में जरूर होता है। यानी यदि कोई Design Inner Normal Form में नहीं हो तो उसे Higher Normal Form में Define नहीं किया जा सकता है।

ज्यादातर Cases में यदि हम हमारे Relations या Tables Third Normal Form (3NF) तक भी Normalize कर लेते हैं, तो हम खराब Database Design के ज्यादातर Problems को Solve कर चुके होते हैं। यानी किसी Database की सभी Tables को 3rd Normal Form तक Normalize कर लेने पर उस Database की Design सम्बंधित ज्यादातर परेशानियां समाप्त हो जाती हैं। Boyce-Codd (BCNF) व 4th Normal Form को विशेष Situations को Handle करने के लिए कभी-कभार ही Database पर Apply किया जाता है। हालांकि इन दोनों Normalization Processes को भी Conceptually समझना सरल होता है और जरूरत पडने पर इन्हें Practice में भी लिया जा सकता है।

Fifth Normal Form के नियम बहुत ही Complex होते हैं और इन्हें Practically Use करना काफी मुश्किल होता है। कोई Relation 5th Normal Form में है या नहीं, इस बात को Verify करना काफी मुश्किल होता है। ज्यादातर Database Designers 5th Normal Form तक किसी भी Relation को Normalize नहीं करते हैं। यदि उन्हें लगता है कि उनका Relation 3rd Normal Form या जरूरत के आधार पर 4th Normal Form में है, तो वे ये मान लेते हैं कि उनका Design Generally Problem Free है।

चित्र में दर्शाए गए 6 Normal Forms के अलावा एक और Normal Form होता है, जिसे Domain/Key Normal Form कहा जाता है। ये एक पूरी तरह से Theoretical Concept होता है और आज के समय में इस Normal Form को किसी भी Practical Design में Use नहीं किया जाता है।

First Normal Form

यदि किसी Table के सारे Data एक 2-Dimensional Table के रूप में हैं और उनमें से किसी भी Data के Group का Repetition नहीं हो रहा है, तो उस Table को 1st Normal Form में माना सकते है।

1st Normal Form को समझने का मुख्‍य आधार ये है कि हम Data के Repeating Group की प्रकृति को समझें। किसी Relation का एक एसा Attribute, जिसमें एक से ज्यादा Data Store हो सकते हों, को Repeating Group Data कहा जाता है। जब हम किसी Repeating Group Data को ER-Diagram में Represent करना चाहते हैं, तब हम उस Repeating Group Data को Multivalued Attribute के रूप में Represent करते हैं।

उदाहरण के लिए मानलो कि हम किसी Employee के Relation के साथ प्रक्रिया कर रहे हैं और हमें किसी Employee के बच्‍चों के नाम व Birth Date को Employee के Relation में Data के रूप में Store करना है। अब चूंकि एक Employee के एक से ज्यादा बच्‍चे भी हो सकते हैं, इसलिए एक ही Employee को Represent करने वाले एक ही Row के Child Name FiledChild Birth Date Field में एक से ज्यादा मानों को Store करने की जरूरत पड सकती है, जबकि किसी भी Relational Database में किसी एक Row के एक Field में केवल एक ही मान को Store किया जा सकता है। इस स्थिति में Child का नाम व Birth Date Employee के Record में एक से ज्यादा बार Repeat हो सकते हैं, इसलिए इन दोनों Data को Employee के Relation के लिए Repeating Group of Data कहा जा सकता है। इस बात को हम एक सारणी द्वारा निम्नानुसार दर्शा सकते हैं:

EmpID Fname LName DOB ChildName ChildBirthDate
001 Rahul Sharma 10/12/1982 Rohit Sharma 15/12/2006
Mohit Sharma 20/10/2008

इस Table में हम देख सकते हैं कि Rahul नाम के एक Employee के दो बच्‍चे Rohit व Mohit हैं, लेकिन हम दोनों बच्‍चों के Data को Employee के Relation में Store नहीं कर सकते हैं, क्योंकि यदि हम एसा करने की कोशिश करते हैं, तो हमें एक ही Attribute Column में एक से ज्यादा नामों व Birthdates को Store करना होगा, जो कि एक Relational Database में सम्भव नहीं है।

किसी Relational Database में Repeating Groups को Allow ना करने का एक अच्छा कारण भी है। इस कारण को समझने के लिए हम एक उदाहरण देखते हैं, जिसमें एक Table में निम्नानुसार कुछ Employees व उनके बच्‍चों के नाम Stored हैं:

EmpID  FName  LName Children’s Names Children’s Birthdates
1001 Jane Doe Mary, Sam 1/1/92, 5/15/94
1002 John Doe Mary, Sam 1/1/92, 5/15/94
1003 Jane Smith John, Pat, Lee, Mary 10/5/94,  10/12/90, 6/6/96,  8/21/94
1004 John Smith Michael 7/4/96
1005 Jane Jones Edward, Martha 10/21/95,  10/15/89

इस Table में हम देख सकते हैं कि एक ही Single Row के Children Name FieldChildren Birthdates Field दोनों ही Fields में एक से ज्यादा मान Stored हैं। ये व्यवस्था दो बडी Problems Create करती हैः

इस Table में एसा कोई तरीका नहीं है, जिससे ये जाना जा सके कि किस Child का Birth Date क्या है। इस व्यवस्था को Use करने पर हमें हमेंशा Children के नाम व Birth Date दोनों को समान क्रम में Store करना जरूरी होता है। किसी Table में Children Name Field में जिस बच्‍चे का नाम पहले लिखा गया है, हमें उसी बच्‍चे का Birth Date पहले लिखना होता है और एसा कोई निश्चित तरीका नहीं होता है, जिससे ये Verify हो सके कि हमने जिस बच्‍चे का नाम पहले लिखा है, हम उसी बच्‍चे की Date Of Birth भी पहले ही लिख रहे हैं या नहीं।

जब हम किसी Table में Multivalued Data Store करते हैं, तब DBMS किसी Data को Search करने के लिए उस Multivalued Column को Extract करता है और उस Column पर Sequential Processing को Apply करके Required Data को प्राप्त करता है, जो कि सबसे धीमी Searching Process होती है।

इन दोनों समस्याओं का एक ही Solution है कि किसी भी Single Column में Multiple Values को Store ना किया जाए यानी Repeating Group of Data को किसी भी Relation में Avoid किया जाए। Repeating Groups की समस्या से बचने और Relation को First Normal Form में लाने के दो तरीके हैं। पहला तरीका एक सही तरीका है जबकि दूसरा तरीका एक गलत तरीका है। हम पहले गलत तरीके को देखेंगे ताकि हम ये समझ सकें कि हमें एक Database में क्या नहीं करना चाहिए।

इस गलत तरीके को हम निम्न सारणी द्वारा समझ सकते हैं, जिसमें किसी Repeating Group के Data की विभिन्न Values को Handle करने के लिए Relation में Columns की संखया को Increase कर लिया जाता हैः

EmpID  FName  LName Child1 DOB1 Child1 DOB1 Child1 DOB1
1001 Jane Doe Mary, 1/1/92 Sam 5/15/94
1002 John Doe Mary 1/1/92 Sam 5/15/94
1003 Jane Smith John 10/5/94 Pat 10/12/90 Lee 6/6/96
1004 John Smith Michael 7/4/96
1005 Jane Jones Edward 10/21/95 Martha 10/15/89

इस Example में किसी Employee के तीन Childs के नाम व Birth Dates को Store किया जा सकता है। ये Table First Normal Form के Criteria से मेल नहीं कर रहा है। हालांकि इस Table में Data के Repeating Groups नहीं हैं और हर Child की Birth Date को अलग Store किया गया है। फिर भी इस Design में कई Problems हैं, जो निम्नानुसार हैं:

  • इस Relation में हम सिर्फ तीन Child के ही Name व Birth Date को Store कर सकते हैं। इसलिए यदि हम Jane Smith के चौथे बच्‍चे का नाम व Date Of Birth Store करना चाहें, तो इस Relation में उस Child के लिए कोई जगह नहीं है। यदि हम चौथे बच्‍चे का भी Data इसी Relation में Store करना चाहें, तो या तो हमें एक और Field Pair Create करना होगा या फिर एक और Row में इस Data को Store करना होगा। यदि हम चौथे बच्‍चे के Data को एक और Row में Store करते हैं, तो फिर उस बच्‍चे को उसके Father के EmpID से Relate करने के लिए हमें EmpID के साथ कम से कम एक Child के नाम के Column को भी मिलाना होगा। यानी हमें Composite Key का प्रयोग करना होगा।
  • यदि हम इस तरीके को Use करते हैं, तो जिन Employees के एक या दो ही Child हैं, उनके Row में तीसरे Child के Data की जगह Empty रहेगी, जिससे Employee के Record द्वारा Reserved Space Waste होगा।
  • इस तरीके को Use करने पर किसी Particular Child की Searching करना काफी मुश्किल हो जाता है। इस Design में यदि DBMS से ये पूछा जाए, कि “क्या इस Relation में Lee नाम का कोई Child है या नहीं?” तो DBMS को एक Query Construct करना पडता है, जिसमें तीनों Childs के नाम Included होते हैं, क्योंकि DBMS के पास एसा कोई तरीका नहीं होता है, जिससे वह Particular “Lee” के ही Column को Identify कर सके।

Repeating Group को Handle करने का सही तरीका ये है कि Repeating Group के Data को Store करने के लिए एक और Entity यानी Table Create किया जाए, जो Repeating Group के Multiple Records या Instances को Handle कर सके। यदि हम हमारे इस उदाहरण के सन्दर्भ में देखें, तो हमें Children नाम की एक और Table को Create करना होगा, जिसमें निम्नानुसार Data Store किए जा सकते हैं: …

First Normal Form, Normalization का सबसे महत्‍वपूर्ण भाग होता है क्‍योंकि बिना Database की Tables को First Normal Form में लाए हुए, हम Tables पर Second Normal Forms के Rules Apply नहीं कर सकते। ये Article हमारी पुस्‍तक Oracle 8i/9i SQL/PLSQL in Hindi से लिया गया है और यदि आप Normalization को अच्‍छी तरह से Step by Step Practical Examples द्वारा सीखना चाहते हैं, तो ये पुस्‍तक आपके लिए ही लिखी गई है। (What is Normalization in DBMS)

Oracle 8i/9i SQL/PLSQL in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Oracle 8i/9i SQL/PLSQL in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Oracle 8i/9i SQL/PLSQL in Hindi | Page: 587 | Format: PDF

BUY NOW GET DEMO REVIEWS