क्या MySQL के लिए एक नामकरण सम्मेलन है?


163

यहां बताया गया है कि मैं यह कैसे करता हूं:

  1. तालिका नाम लोअर केस, अलग शब्दों को उपयोग करता है अंडरस्कोर हैं, और कर रहे हैं विलक्षण (जैसे foo, foo_barआदि
  2. मैं आमतौर पर (हमेशा नहीं) एक ऑटो वेतन वृद्धि पीके है। : मैं इन नियमों का पालन tablename_id(जैसे foo_id, foo_bar_id, आदि)।
  3. जब किसी तालिका में एक स्तंभ होता है जो एक विदेशी कुंजी होती है, तो मैं बस उस तालिका के स्तंभ नाम की प्रतिलिपि बनाता हूं जो भी तालिका से आया है। उदाहरण के लिए, foo_barमान लें कि तालिका में FK foo_id(जहां foo_idPK है foo) है।
  4. संदर्भात्मक अखंडता को लागू करने के लिए एफके को परिभाषित करते समय, मैं निम्नलिखित का उपयोग करता हूं: tablename_fk_columnname(उदाहरण 3 को आगे बढ़ाते हुए, यह होगा foo_bar_foo_id)। चूंकि यह एक तालिका नाम / स्तंभ नाम संयोजन है, इसलिए इसे डेटाबेस के भीतर अद्वितीय होने की गारंटी है।
  5. मैं स्तंभों को इस तरह से आदेश देता हूं: पीके, एफके, फिर बाकी कॉलम वर्णानुक्रम में

क्या ऐसा करने का एक बेहतर, अधिक मानक तरीका है?


6
क्या ऑटो इंक्रीमेंट पीके के लिए केवल "आईडी" का उपयोग करना गलत है? क्यों? स्तंभ के नाम का अर्थ केवल तालिका के संदर्भ में है। इसलिए मेरे पास हर टेबल में एक "id" है, और FK के लिए कई id_ <table_name> हो सकते हैं।
Zbyszek

3
@Zbyszek मुझे लगता है कि इसके खिलाफ सबसे सरल कारण सिर्फ स्थिरता / सरलता है। होने के बजाय id_tableB=> ओह कोई अलग-अलग नाम वाला कॉलम नहीं id , id_tableB=> की संगति id_tableBसिर्फ भद्दी लगती है ... या जैसा कि ओपी करता है: foo_id=> foo_idबल्कि foo_id=>id
डॉन चेडल

जवाबों:


106

मैं कहूंगा कि सबसे पहले और सबसे महत्वपूर्ण: सुसंगत होना।

मुझे लगता है कि आप लगभग उन सम्मेलनों के साथ हैं जिन्हें आपने अपने प्रश्न में उल्लिखित किया है। टिप्पणियों की एक जोड़ी हालांकि:

अंक 1 और 2 अच्छे हैं मुझे लगता है।

बिंदु 3 - दुख की बात है कि यह हमेशा संभव नहीं है। इस बारे में सोचें कि आप एकल तालिका के साथ कैसे सामना करेंगे foo_barजिसमें स्तंभ हैं foo_idऔर another_foo_idदोनों fooतालिका foo_idस्तंभ का संदर्भ देते हैं । आप इस पर विचार कर सकते हैं कि इससे कैसे निपटा जाए। हालांकि यह एक कोने का मामला है!

प्वाइंट 4 - प्वाइंट 3 के समान। आप एक से अधिक संदर्भ स्तंभ होने के लिए पूरा करने के लिए विदेशी कुंजी नाम के अंत में एक संख्या शुरू करना चाह सकते हैं।

अंक 5 - मैं इससे बचूंगा। यह आपको थोड़ा प्रदान करता है और जब आप किसी तालिका में बाद की तारीख से कॉलम जोड़ना या निकालना चाहते हैं तो सिरदर्द बन जाएगा।

कुछ अन्य बिंदु हैं:

इंडेक्स नेमिंग कन्वेंशन

आप अनुक्रमित के लिए एक नामकरण सम्मेलन शुरू करना चाह सकते हैं - यह किसी भी डेटाबेस मेटाडेटा कार्य के लिए एक बड़ी मदद होगी जिसे आप बाहर ले जाना चाहते हैं। उदाहरण के लिए, आप बस एक इंडेक्स foo_bar_idx1या foo_idx1पूरी तरह से आपके ऊपर कॉल कर सकते हैं, लेकिन विचार करने लायक।

एकवचन बनाम बहुवचन स्तंभ नाम

यह एक अच्छा विचार हो सकता है कि आपके कॉलम नामों के साथ-साथ आपके टेबल नाम (ओं) में बहुवचन बनाम एकल के कांटेदार मुद्दे को संबोधित किया जाए। यह विषय अक्सर DB समुदाय में बड़ी बहस का कारण बनता है। मैं तालिका नामों और स्तंभों दोनों के लिए एकवचन रूपों के साथ रहना चाहूंगा। वहाँ। मैंने कहा है।

यहाँ मुख्य बात है निरंतरता!


बिंदु 5 से बेहतर क्या होगा? यह सिरदर्द क्यों बन सकता है?
रस्सु

7
अनुवर्ती कार्रवाई करने के लिए, मुझे यह क्रिया
Enissay

1
मुझे अपनी तालिकाओं के नामकरण के लिए एक अच्छी "योजना" खोजने में परेशानी हो रही है जो दो नामों (डॉक्यूमेंटचर्च, डॉक्यूमेंटवर्जन, डॉक्यूमेंट टाइप आदि) से युक्त मॉडल की वस्तुओं को रखती है। DocumentType के लिए उदाहरण के लिए मैं इसे नाम दे सकता हूं documenttypeया document_type। मैं बाद वाले को पसंद करूंगा, लेकिन ज्यादातर समय मेरे पास बहुत से रिश्ते हैं और मुझे एक टेबल की जरूरत है document_document_type। किसी भी सुझाव यह कैसे संभालना है?
lexith

@ rsb2097 पुन: बिंदु 5 - एक कॉलम (अंत तक) जोड़ने के बाद आदेश अमान्य हो सकता है। आपको किसी भी बाधा को नहीं जोड़ना चाहिए जो स्तंभों को फिर से आदेश देने की आवश्यकता है क्योंकि यह एक अनावश्यक ओवरहेड है।
विल शेपर्ड

21

संगति किसी भी नामकरण मानक की कुंजी है। जब तक यह तार्किक और सुसंगत है, तब तक आप 99% हैं।

मानक अपने आप में बहुत अधिक व्यक्तिगत पसंद है - इसलिए यदि आप अपने मानक को पसंद करते हैं, तो इसके साथ दौड़ें।

आपके प्रश्न का स्पष्ट रूप से उत्तर देने के लिए - नहीं, MySQL के पास एक पसंदीदा नामकरण सम्मेलन / मानक नहीं है, इसलिए अपना स्वयं का रोल करना ठीक है (और आपका तार्किक लगता है)।


8

MySQL में उनके अधिक या कम सख्त नियमों का संक्षिप्त विवरण है:

https://dev.mysql.com/doc/internals/en/coding-style.html

साइमन होलीवेल द्वारा MySQL के लिए सबसे आम कोडिंगस्टाइल:

http://www.sqlstyle.guide/

यह प्रश्न भी देखें: क्या SQL के लिए कोई प्रकाशित कोडिंग शैली दिशानिर्देश हैं?


4

शुक्र है, PHP डेवलपर्स कुछ ऊँचे विकास समुदायों की तरह "कैमल केस बिगोट्स" नहीं हैं।

आपका सम्मेलन ठीक लगता है।

बस जब तक वे एक) सरल, और बी) सुसंगत हैं - मुझे कोई समस्या नहीं दिखती है :)

पुनश्च: व्यक्तिगत रूप से, मुझे लगता है कि 5) ओवरकिल है ...


2
बड़े लोगों से दूर, ऊंट का मामला वास्तव में डीबी समुदाय के कई लोगों द्वारा भड़काया जाता है क्योंकि आरडीबीएमएस में से कुछ 'इस मामले के प्रति असंवेदनशील हैं जहां वे मामलों को छीन लेंगे (या ऊपरी मामले में सब कुछ बदल देंगे) इसलिए चीजें वास्तव में बहुत जल्दी बदसूरत हो जाती हैं।
माल-वान

@ मवन: क्या आप निर्दिष्ट कर सकते हैं कि कौन से आरडीबीएमएस '? और मैं खुद एक ऊंट-केस जॉकी हूं। कैप्स मेरे स्कीमा में केवल एक ही उद्देश्य पूरा करती हैं, शब्द सीमाओं को इंगित करने के लिए तालिकाओं में और (फ़ील्ड के मामले में) इंगित करने के लिए, ताकि _ विशेष रूप से एक अन्य प्रकार (तालिका का नाम = अन्य नाम और उस तालिका में फ़ील्ड = आईडी) को इंगित करने के लिए हो सकता है )। इसके अलावा, अगर अन्य आरडीबीएमएस असंवेदनशील है, तो वास्तव में क्या मायने रखता है? मैं कभी भी एक ही टेबल के ऊपरी और निचले संस्करण को आगे नहीं बढ़ाता! ओह, और मैं केस-असंवेदनशील RDBMS पसंद नहीं करूंगा - मैं लगातार कोड
लिखूंगा

7
मुझे CamelCase को नापसंद करने वाले MySQL उपयोगकर्ताओं की विडंबना और हमारे द्वारा उपयोग किए जाने वाले उत्पाद का नाम पसंद है: MySQL, CamelCase में लिखा गया है
DBX12

1
@ DBX12 पांडित्यपूर्ण होने के लिए, पास्कलसीस है, ऊंट नहीं, लेकिन आपकी बात अभी भी कायम है।
मैरेडेचेस

@MarredCheese इसके बारे में कभी नहीं सोचा, लेकिन आप सही हैं। कैमलकेस में शुरू में कोई कूबड़ नहीं होना चाहिए।
DBX12

1

सरल उत्तर: नहीं

ठीक है, कम से कम नामकरण सम्मेलन जैसे कि ओरेकल या समुदाय द्वारा प्रोत्साहित किया जाता है, नहीं, हालांकि, मूल रूप से आपको पहचानकर्ताओं के नियमों और सीमाओं का पालन करने के लिए जागरूक होना होगा, जैसे कि MySQL प्रलेखन में संकेत दिया गया है: https://dev.mysql.com /doc/refman/8.0/en/identifiers.html

आपके द्वारा अनुसरण किए जाने वाले नामकरण सम्मेलन के बारे में, मुझे लगता है कि यह ठीक है, बस संख्या 5 थोड़ी अनावश्यक है, मुझे लगता है कि डेटाबेस के प्रबंधन के लिए अधिकांश दृश्य उपकरण कॉलम नामों को छांटने के लिए एक विकल्प प्रदान करते हैं (मैं DBeaver का उपयोग करता हूं, और यह इसके पास है), इसलिए अगर purpouse में आपकी टेबल का अच्छा विजुअल प्रेजेंटेशन है तो आप इस विकल्प का उपयोग कर सकते हैं जिसका मैं उल्लेख करता हूं।

व्यक्तिगत अनुभव से, मैं इसे पुनः प्राप्त करूंगा:

  • निचले मामले का उपयोग करें । जब आप अपने डेटाबेस को एक सर्वर से दूसरे सर्वर पर स्थानांतरित करते हैं तो यह लगभग अंतर सुनिश्चित करता है। कभी-कभी lower_case_table_namesसही तरीके से कॉन्फ़िगर नहीं किया जाता है और आपका सर्वर केवल आपके कैमलकेस या पास्कलसीस मानक (केस सेंसिटिविटी प्रॉब्लम) को पहचानने में त्रुटियों को फेंकना शुरू कर देता है।
  • संक्षिप्त नाम । सरल और स्पष्ट। सबसे आसान और तेज़ आपकी तालिका या स्तंभों की पहचान करता है, बेहतर है। मेरा विश्वास करो, जब आप कम समय में बहुत सारे अलग-अलग प्रश्न बनाते हैं, तो सभी को लिखना (और पढ़ना) सरल होता है।
  • उपसर्गों से बचें । जब तक आप विभिन्न अनुप्रयोगों के तालिकाओं के लिए एक ही डेटाबेस का उपयोग नहीं कर रहे हैं, तब तक उपसर्गों का उपयोग न करें। यह केवल आपके प्रश्नों में अधिक वाचालता जोड़ता है। ऐसी स्थितियां हैं जब यह उपयोगी हो सकता है, उदाहरण के लिए, जब आप प्राथमिक कुंजी और विदेशी कुंजियों को इंडेंट करना चाहते हैं, तो आमतौर पर तालिका नामों को आईडी कॉलम के लिए उपसर्ग के रूप में उपयोग किया जाता है।
  • शब्दों को अलग करने के लिए अंडरस्कोर का उपयोग करें । यदि आप अभी भी तालिका, स्तंभ, आदि के नामकरण के लिए एक से अधिक शब्दों का उपयोग करना चाहते हैं, तो अलग-अलग पासवर्ड के लिए अंडरस्कोर का उपयोग करें , यह सुगमता के लिए मदद करता है (आपकी आंखें और आपका तनावपूर्ण मस्तिष्क आपको धन्यवाद देने जा रहा है)।
  • निरतंरता बनाए रखें । एक बार जब आपका अपना मानक हो, तो उसका पालन करें। वह व्यक्ति नहीं है जो नियम बनाता है और पहला है जो उन्हें तोड़ रहा है, यह शर्मनाक है।

और "बहुवचन बनाम एकवचन" नामकरण के बारे में क्या? खैर, यह व्यक्तिगत प्राथमिकताओं की सबसे अधिक स्थिति है। मेरे मामले में मैं तालिकाओं के लिए बहुवचन नामों का उपयोग करने की कोशिश करता हूं क्योंकि मुझे लगता है कि तत्वों के संग्रह के रूप में एक तालिका या पैकेज में तत्व शामिल हैं, इसलिए एक बहुवचन नाम मेरे लिए समझ में आता है; और स्तंभों के लिए एकवचन नाम क्योंकि मैं स्तंभों को उन विशेषताओं के रूप में देखता हूं जो उन तालिका तत्वों के लिए एकवचन का वर्णन करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.