Primary Key and Foreign Key – Database Basics

Primary Key and Foreign Key – Database Basics – Database हमेंशा किसी भी Dynamic Web Application का Central Part होता है। एक Database वास्तव में विभिन्न प्रकार के Data यानी Information के छोटे-छोटे टुकडों का एक Collection होता है। PHP की एक सबसे बडी विशेषता ये है कि ये 20 से ज्यादा प्रकार के Database Software के साथ Integrate हो सकता है, लेकिन PHP के साथ सामान्यतः सबसे ज्यादा Use किया जाने वाला Database MySql ही है, क्योंकि ये PHP के साथ Best तरीके से Match होता है।

जब हम Dynamic Web Application Development की बात करते हैं, तो हमें हमारी जरूरत के अनुसार अपने Database को Design करना होता है, जो कि एक जटिल प्रक्रिया है क्योंकि हर Web Application की अपनी अलग प्रकार की जरूरत होती है और हर प्रकार की जरूरत को पूरा करने के लिए एक अलग प्रकार का Unique Database Design करना पडता है।

इसलिए यदि आपको Database Designing का बिल्कुल भी ज्ञान नहीं है, तो फिर आपको “Oracle in Hindi” पुस्‍तक के “Database Designing Process in Hindi” Part को पढना चाहिए, जिसमें सही तरीके से एक अच्छा Database कैसे Design किया जाता है और एक अच्छा Database Design न करने की स्थिति में किन परेशानियों का सामना करना पडता है, इस विषय में अच्छी जानकारी दी गई है।

चूंकि Database Designing एक अलग ही विषय है, इसलिए इस पुस्तक में हम Database Designing के विषय में बात नहीं कर सकते। परिणामस्वरूप हम इस पुस्तक में ये मानकर चल रहे हैं, कि आपको Database Designing का ज्ञान है।

MySql भी अपने आप में पूरा एक अलग Subject है, जिस पर एक अलग पुस्तक लिखी जा सकती है, इसलिए हम यही मानकर चल रहे हैं कि आपको SQL के विषय में पर्याप्त जानकारी है। यदि आप SQL के बारे में कुछ भी नहीं जानते, तो फिर आपको “Oracle – SQL/PLSQL in Hindi” पुस्तक को पढना चाहिए।

हालांकि ये पुस्तक मूल रूप से Oracle के लिए लिखी गई है, लेकिन चूंकि सभी DBMS Software SQL Standard को Follow करते हैं और सभी DBMS Software में SQL यानी Structure Query Language एक समान ही होती है, इसलिए यदि आपको SQL का ज्ञान नहीं है, तो ये पुस्तक आपके लिए SQL सीखने हेतु काफी उपयोगी साबित होगी।

चूंकि हमारी ये पुस्तक पूरी तरह से PHP Centric है और हम इस पुस्तक में Database Designing ProcessMySql को Detail से Cover नहीं कर सकते, क्योंकि इन्हें Detail से Cover करने का मतलब है कम से कम 600 Pages और लिखना, फिर भी PHP के साथ MySql को ठीक तरीके से Use करते हुए Dynamic Web Site Create करने के लिए जरूरी कुछ Fundamentals को हम इस पुस्तक में Cover करने की कोशिश कर रहे हैं, ताकि आप अपनी सुविधानुसार बाद में Database Designing व MySql को अच्छी तरह से सीखते हुए PHP के साथ उपयोग में ले सकें।

MySql एक Relational Database Management System यानी RDBMS Software है। इसमें सभी Data Tables के रूप में Store होते हैं। Table एक MS-Excel Spreadsheet के समान होता है, जो कि RowsColumns का बना होता है। इस Table में हर Row एक Record को Represent करता है, जबकि हर Column हर Record की Information के छोटे से हिस्से को Represent करता है तथा हर Record के हर हिस्से को एक Field के रूप में Identify किया जाता है। Table के इस Concept को हम निम्न चित्रानुसार समझ सकते हैं:

Primary Key and Foreign Key - Database Basics - Hindi

हर Table एक Specific Type की Information का एक Collection होता है। उदाहरण के लिए एक Student नाम की Table में हम किसी School के विभिनन Students की Information को Store कर सकते हैं। जबकि Employee नाम की Table में हम किसी Company के विभिन्न Employees की Information को Store कर सकते हैं।

यानी विभिन्न प्रकार के Applications में विभिन्न प्रकार के Data को Store करने के लिए हम हमारी जरूरत के अनुसार Data को विभिन्न Categories में Divide कर सकते हैं और हर Category के Data को एक Table के रूप में Represent कर सकते हैं।

Table के हर Column का एक Unique नाम होता है, जो इस बात को Indicate करता है कि उस Column में Table के किस Data को Store किया जाना है जबकि Field हर Record के किसी एक Data को Represent करता है।

Table के हर Record को Uniquely Identify करने के लिए हर Record के साथ एक Primary Key को Associate किया जाता है। सामान्यतः Primary Key के रूप में एक Meaningless Numerical या Alphanumerical Number का प्रयोग किया जाता है।

Table का हर Row एक Record को Represent करता है और हर समान प्रकार के Filed के Data का एक Collection होता है, जो कि आपस में Logically Related होते हैं। यानी किसी Record के सभी Columns के Data उसी Record की Information के टुकडे होते हैं, इसलिए सभी Columns के Data किसी एक Record को Represent करते हैं।

Column व Field में मूल अन्तर यही होता है कि Column किसी Table के सभी Records द्वारा समान रूप से Share किए जाने वाले Attributes को Represent करता है, जबकि Filed हर Record के किसी एक Individual Data को Represent करता है। हालांकि Columns व Fields शब्दों को सामान्यतः Interchangeable तरीके से Use किया जाता है।

यानी Field को Column व Column को Field के नाम से भी उशारित किया जाता है, लेकिन फिर भी इस बात का ध्यान रखना ठीक रहता है कि Column किसी Table के सभी Records द्वारा समान रूप से Share किए जाने वाले Attribute को Represent करता है, जबकि Field किसी एक Record के किसी एक Data को Represent करता है।

Primary Key

Primary Key एक एसा Column होता है, जो किसी Table के किसी Record या Row को Unique तरीके से Identify करने का काम करता है। हर Table में केवल एक Primary Key ही हो सकता है। हम हमारे Database Manipulation के ज्यादातर कामों को Primary Key के आधार पर ही Perform करते हैं, क्योंकि Primary Key को Use करने पर Database को Access व Manipulate करना आसान होता है व Database की Performance भी अच्छी बनी रहती है क्योंकि MySql स्वयं ही Primary Key के आधार पर Table के Records की Indexing करता रहता है।

Primary Key का हमेंशा कोई Numerical मान होना जरूरी नहीं होता, लेकिन Primary Key का Unique होना जरूरी होता है। साथ ही Primary Key को हमें हमेंशा Meaningless रखना चाहिए, क्योंकि Meaningful Primary Key को Use करने पर हमें Database से संबंधित विभिन्न प्रकार की Anomalies का सामना करना पडता है।

जब हम किसी Column को Primary Key Assign कर देते हैं, तो फिर उस Column के किसी Field के Data को Repeat, Change या Delete नहीं कर सकते।

Primary Key वास्तव में Web Application में Internally Data को आपस में Internally Linked रखने के लिए Use होती है, इसलिए सामान्यतः Primary Key की Values को कभी भी Frontend में Render नहीं किया जाता।

Foreign Keys

चूंकि MySql एक RDBMS है, इसलिए इसमें हम अलग-अलग Category के Data को Represent करने के लिए अलग-अलग Tables Create करते हैं और उन Tables को आपस में एक दूसरे के साथ Internally Link करते हैं ताकि हम हमारी जरूरत के अनुसार विभिन्न प्रकार की SQL Queries द्वारा एक से ज्यादा Tables से Data को Retrieve कर सकें। इस जरूरत को पूरा करने के लिए MySql में हमें RDBMS के Relational Keys Concept को Use करना होता है।

Primary Keys व Foreign Keys के Concepts को Use करके हम हमारे Web Application से संबंधित Data को आसानी से Store व Manage करने में सक्षम हो पाते हैं। क्योंकि विभिन्न Category के Data को अलग-अलग Tables में Store करने की वजह से समान प्रकार के Data को एक से ज्यादा बार Repeat करने की जरूरत नहीं होती। परिणामस्वरूप कम Space में ज्यादा Data को Store किया जाना सम्भव हो जाता है। साथ ही विभिन्न प्रकार के Data को विभिन्न Tables में Store करने के वजह से Data DuplicationInconsistency की समस्या भी पैदा नहीं होती।

जब हम दो Tables के बीच आपस में Relationship Create करना चाहते हैं, ताकि हम उन दो या दो से ज्यादा Related Tables से अपनी जरूरत के अनुसार Data को Retrieve कर सकें, तो आपस में Relate होने वाली दो Tables के बीच मूल रूप से तीन तरह की Relationships बन सकती हैं, जिन्हें One to One, One to ManyMany to Many की Relationships के नाम से जाना जाता है।

RDBMS में मूल रूप से One to Many की Relationships को ही Use किया जाता है। क्योंकि One to One की Relationship की जरूरत को एक ही Table Create करके पूरा किया जा सकता है, जबकि Many to Many की Relationship को एक से ज्यादा One to Many की Relationship में Convert करके Resolve कर लिया जाता है।

जब दो Tables के बीच One to One की Relationship होती है, तो दोनों Tables को आपस में Link करने के लिए हमें केवल दोनों ही Tables में समान Column को Primary Key के रूप में Use करना होता है। जब दो Tables में एक ही नाम के Column को Primary Key बनाया जाता है, तो वे दोनों Tables आपस में One to One की Relationship को Establish करने में सक्षम हो जाते हैं।

इसी तरह से जब हमें दो ऐसी Tables को आपस में Relate करना होता है, जो कि आपस में Many to Many की Relationship को Represent करते हैं, तो उन दोनों Tables के Primary Keys को समान नाम के Columns के साथ एक नई Table में Define कर लिया जाता है। परिणामस्वरूप बनने वाली नई Table से दोनों ही Tables की One to Many की Relationship बन जाती है।

किसी भी RDBMS में हमेंशा दो तरह की Tables बन सकती हैं। पहले प्रकार की Table के Data कभी-कभार ही Change होते हैं। इस प्रकार के Data वाली Table को Master Table या Parent Table कहा जाता हैं। Master Table ऐसी Table होती है, जिसके Data Permanent होते हैं और किसी भी अन्य Table पर Depend नहीं होते। उदाहरण के लिए ClientProduct की Table के Data कभी Change नहीं होते।

जबकि दूसरी प्रकार की Tables में वे Data होते हैं, जो समय-समय पर Change होते रहते हैं। इस प्रकार की Table को सामान्यतः Detail Table या Child Table कहा जाता है। Detail Table हमेंशा किसी न किसी Master Table पर Depend होते हैं।

यानी Detail Table में उसी स्थिति में कोई Record Insert किया जा सकता है, जबकि उस Detail Table के Record से Associated कोई न कोई Master Table Record पहले से उपलब्ध हो।

उदाहरण के लिए Invoice की Table एक Detail Table होती है, क्योंकि Invoice की Table में किसी न किसी Customer व कम से कम एक Product की Information होना जरूरी होता है तभी Invoice बन सकता है। क्योंकि यदि Invoice की Table में Client की Information न हो, तो Invoice किसके नाम का बनेगा और यदि Invoice की Table में एक भी Product की Information न हो, तो Invoice बनाने का कोई मतलब ही नहीं है।

इसलिए Invoice की Table पूरी तरह से ClientProduct की Table के Record पर Depend है। जबकि Client व Product की Table का कोई Record किसी भी अन्य Table के किसी भी Record पर Depend नहीं होता है। परिणामस्वरूप Client या Product की Table में किसी Record को Directly Insert किया जा सकता है।

जब हमें दो Tables के बीच One to Many की Relationship को Establish करना होता है, तब Master Table के Primary Key Field की Value को Detail Table के Foreign Key File में Value के रूप में Store करना होता है। मात्र ऐसा करने से दोनों Tables के बीच One to Many की Relationship Establish हो जाती है। इसे हम निम्न चित्र द्वारा समझ सकते हैं:

Primary Key and Foreign Key - Database Basics - Hindi

किसी भी Table में Primary Key का Repetition नहीं हो सकता, लेकिन Child Table में Master Table की Primary Key Value एक Foreign Key के रूप में बार-बार Repeat हो सकती है और इस Foreign Key Repetition के कारण ही MasterDetail Table के बीच One to Many की Relationship Establish हो पाती है। यानी Master Table का एक Record, Detail Table के एक से ज्यादा Records के साथ Link हो पाता है।

यहां हमने बहुत ही कम शब्दों में Database के Fundamental को Clear करने की कोशिश की है। जैसाकि हमने पहले भी कहा कि यदि आप Database Designing Process से बिल्कुल ही अनभिज्ञ हैं, तो आपके लिए “Database Designing Process in Hindi”“Oracle – SQL/PLSQL in Hindi” पुस्तक पढना काफी उपयोगी रहेगा।

इन दोनों पुस्तकों से न केवल आप सही तरीके से Database Design करना समझ व सीख सकेंगे, बल्कि आप SQL Language जो कि किसी भी DBMS व RDBMS Software की मूल Language है, को भी अच्छी तरह से सीख सकेंगे।

क्योंकि Database Designing व SQL संबंधित विभिन्न Concepts जैसे कि Database Designing, Database Normalization and Denormalization, Relationship Management, Anomalies Resolution, Transaction Management, Stored Procedure, Views, Triggers, Indexing, Database Performance Tuning, Database Backup and Restore आदि Database Related जरूरी Concepts को ठीक से समझे बिना आप PHP के साथ Database को ठीक तरीके से उपयोग में लेना नहीं सीख सकते।

MVC Tutorial for Beginners
How to Use phpMyAdmin MySQL

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

PHP in Hindi | Page: 647 | Format: PDF

BUY NOW GET DEMO REVIEWS