Single Valued and Multivalued Attribute: चूंकि हम एक Relational Database Design कर रहे हैं, इसलिए हमारे Data Model में हर Attribute Single-Valued होना जरूरी होता है। इसका मतलब ये हुआ कि किसी Entity के किसी Instance के हर Attribute में केवल एक ही मान (Data) को Store किया जा सकता है।
उदाहरण के लिए कोई Customer Entity अपने किसी भी Instance को केवल एक Telephone Number Store करने की सुविधा देता है। यानी हम किसी भी Customer का केवल एक ही Telephone Number Customer Table में Store कर सकते हैं। लेकिन किसी Customer के पास एक से ज्यादा Telephone हो सकते हैं।
यदि एक Customer के पास एक से ज्यादा Phone हैं और वह उन सभी Numbers को Database में Include करवाना चाहता है, तो Customer Entity यानी Customer Table में किसी एक Telephone Attribute File में एक से ज्यादा Telephone Numbers को Store नहीं किया जा सकता है। इस स्थिति को Customer Entity Handle नहीं कर सकता है।
हालांकि किसी Database का Entity-Relationship Model Database को Represent करने वाले Formal या Logical Data Model से अलग या Independent होता है, फिर भी हम Data के Entity-Relationship Model को Data के Logical Model के आधार पर ही Develop करते हैं।
चूंकि हम Logical Model में किसी Attribute में Multivalued मान को Store नहीं करते हैं, इसीलिए हम Entity-Relationship Create करते समय भी किसी Single Attribute Field में एक से ज्यादा Data या मानों को Store नहीं करते हैं।
एक से ज्यादा Phone Numbers की उपस्थिति Customer के Table या Customer Entity के Phone Number Attribute को एक Multivalued Attribute के रूप में परिभाषित कर देता है। क्योंकि किसी Relational Database में किसी भी Attribute Multivalued नहीं होता है, इसलिए हमें इन Multivalued Attributes को एक नया Entity Create करके Handle करना होता है और विभिन्न Multivalued मानों को उस नए Entity में Hold करना होता है।
एक से ज्यादा Phone Number होने की स्थिति में हम Phone Number नाम का एक Entity Create कर सकते हैं। इस Entity के हर Instance में एक Attribute उस Customer Number का होगा, जिसका Phone Number Store किया जाना है और दूसरा Attribute उस Customer के Phone Numbers का होगा।
यदि किसी Customer के चार Phone Numbers हों, तो इस Entity में उस Customer के चार Instance होंगे, जिनमें Customer Number तो समान होगा लेकिन Phone Numbers अलग-अलग होंगे।
इस Concept को हम निम्नानुसार Represent कर सकते हैं, जहां पहला Entity एक Customer Entity है जिसमें चार Customer Instance हैं जबकि दूसरा Entity एक Phone Number Entity है, जिसमें हर Customer के एक से ज्यादा Phone Numbers उसके Customer Number के साथ Stored हैं।
Customer Entity
CustID | Fname | LName | City | Dist. | State |
001 | Rahul | Sharma | Falna | Pali | Rajasthan |
002 | Rohit | Verma | Bali | Pali | Rajasthan |
003 | Krishna | Gopal | Beawer | Ajmer | Rajasthan |
004 | Madhav | Singh | Bhyender | Thana | Maharastra |
Telephone Entity
CustID | PhoneNumber |
001 | 9896589360 |
001 | 02934223366 |
001 | 02934223654 |
002 | 02938222333 |
003 | 02937236598 |
003 | 6979455505 |
004 | 9357268933 |
Telephone Number Entity में Telephone Numbers को Entity Identifier के रूप में Use किया जा सकता है। इससे Database में किसी प्रकार की कोई परेशानी पैदा नहीं होती है। क्योंकि इस Entity में हम केवल Phone Numbers को ही Store कर रहे हैं और एक Phone Number अपने आप में Unique होता है। जो Phone Number किसी Customer Number 001 के पास है वही Phone Number किसी Customer Number 003 के पास नहीं हो सकता।
Multivalued Attributes के साथ समस्या ये होती है कि यदि हम किसी Entity में Multivalued Attributes को Store करना चाहें, तो हमें हर Value के लिए एक नया Field Create करना होगा। यदि हम नए Fields Create कर भी लेते हैं, तब भी ये कभी भी निश्चित नहीं किया जा सकता कि हमें कुल कितने नए Fields Create करने चाहिए। क्योंकि किसी Customer के पास कितने Phone Numbers हो सकते हैं, हम इस बात को कभी भी निश्चित नहीं कर सकते हैं।
उदाहरण के लिए यदि हम हमारे Database में किसी Customer के अधिकतम 4 Phone Numbers Store कर सकने की सुविधा प्राप्त करने के लिए निम्नानुसार Entity को Design करते हैं:
Customer Entity
CustID | Fname | LName | . . . | Phone01 | Phone02 | Phone03 | Phone04 |
001 | Rahul | Sharma | … | 223355 | 445566 | 442255 | |
002 | Rohit | Verma | … | 121245 | 235689 | 214565 | 568996 |
003 | Krishna | Gopal | … | 556688 | |||
004 | Madhav | Singh | … | 558899 | 445566 |
इस Entity Representation में हम देख सकते हैं कि केवल Customer Number 002 ही एसा Customer है, जिसके पास चार Phone हैं और केवल इसी Customer द्वारा Phone Numbers के लिए Reserve किए गए Storage Space का उपयोग किया जा रहा है। शेष Customers के पास चूंकि चार Phone नहीं हैं, इसलिए उनके इन Attributes द्वारा Reserve किए गए Space का कोई उपयोग नहीं हो रहा है।
यदि हम ये मान लें कि Customer Number 001 एक और Phone ले लेता है, तो उस पांचवे Phone Number को Store करने के लिए Entity के Database Representation को यानी Entity की Table को Modify करके एक और नया Field Customer Table में Add करना होगा, जो कि एक बहुत ही जटिल काम होता है और किसी समस्या को Solve करने के लिए हमेंशा Database के Structure को Change करना भी सम्भव नहीं होता है, क्योंकि एसा करने पर Database के साथ ConnectedFront-End Forms को भी पूरी तरह से Change करना पडता है।
यानी हम इस तरीके को तो किसी भी तरह से Apply नहीं कर सकते हैं। जबकि हम समझ सकते हैं कि ज्यादातर लोगों के पास एक या दो ही Phone होते हैं, इस स्थिति में यदि हम इस तरीके को Use करते भी हैं, तब भी ज्यादातर Customers के पास केवल एक या दो Phone ही होने की वजह से इन Attributes के लिए Reserved Space का कोई उपयोग नहीं होता और ज्यादातर Space बिना मतलब के ही Reserved रहता है।
एसा करने पर Database की Size भी बढ जाती है, जिससे Database पर Searching Operations भी काफी समय लेता है। यानी किसी एक Entity में ही उसके किसी Multi-Valued मान को Store करने के लिए हम उसी Entity को Use नहीं कर सकते हैं। यदि हम एसा करते हैं, तो हम विभिन्न प्रकार की नई समस्याओं में फंस जाते हैं।
हालांकि Theoretically ये सम्भव है कि हम एक एसा Database Create कर सकते हैं, जो किसी एक Attribute में बहुत सारे Data Store कर सकता है, लेकिन Practically इस प्रकार के Database को Implement करना काफी मुश्किल होता है।
साथ ही यदि किसी Database के एक ही Field में एक से ज्यादा Data या मानों को Store किया जाता है, तो उस Database में Searching Operation केवल Sequential Form में ही हो सकता है, जो कि सबसे Slowest Searching Process होता है।
जबकि यदि एक Field में केवल एक ही Single Value या Data को Store किया जाता है, तो हम उस Database पर Binary Searching की Process को Apply कर सकते हैं, जो कि एक बहुत ही Fast Searching Process होता है।
एक सामान्य नियम के रूप में हम जब भी कभी किसी Multivalued Attribute को Face कर रहे होते हैं, तो वह Attribute इस बात का संकेत होता है कि हमें Entity में और नए Fields Create करने पड सकते हैं। इसलिए Same Attribute के Multiple Values को Handle करने का सबसे सरल तरीका यही है कि हम एक नया Entity Create करें और Same Attribute के उन सभी Values को एक Instance की तरह उस Entity में Store करें। (Single Valued and Multivalued Attribute)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Oracle 8i/9i SQL/PLSQL in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Oracle 8i/9i SQL/PLSQL in Hindi | Page: 587 | Format: PDF