MongoDB के लिए नामकरण परंपराएं क्या हैं?


186

क्या MongoDB के लिए पसंदीदा नामकरण सम्मेलनों का एक सेट है, जैसे डेटाबेस, संग्रह, फ़ील्ड नाम?

मैं इन पंक्तियों के साथ सोच रहा था:

  • डेटाबेस: उद्देश्य से मिलकर (एकवचन में शब्द) और "db" के साथ समाप्त होता है - सभी निचले मामले: imagedb, पुनरारंभ, सदस्य, आदि।
  • संग्रह: निचले मामले में बहुवचन: चित्र, फिर से शुरू,
  • डॉक्यूमेंट फ़ील्ड: लोअरमेक्सेलकेस, जैसे मेम्बरफर्स्टनाम, फाइलनेम, आदि

जवाबों:


126
  1. Keep'em छोटा: छोटी वस्तुओं के संग्रहण का अनुकूलन , SERVER-863 । मूर्ख लेकिन सत्य।

  2. मुझे लगता है कि वही नियम जो संबंध डेटाबेस पर लागू होते हैं, उन्हें यहां लागू होना चाहिए। और इतने दशकों के बाद भी कोई समझौता नहीं हुआ है कि क्या RDBMS तालिकाओं को एकवचन या बहुवचन नाम दिया जाना चाहिए ...

  3. MongoDB जावास्क्रिप्ट बोलती है, इसलिए कैमसेल के JS नामकरण सम्मेलनों का उपयोग करें।

  4. MongoDB आधिकारिक दस्तावेज में उल्लेख किया गया है कि आप अंडरस्कोर का उपयोग कर सकते हैं, अंतर्निहित पहचानकर्ता का नाम भी है _id(लेकिन यह संकेत हो सकता है कि _idइसका उद्देश्य निजी, आंतरिक, कभी प्रदर्शित या संपादित नहीं होना है।


95
3 और 4 विरोधाभासी हैं - जेएस ऊंट पसंद करते हैं, मोंगो को अंडरस्कोर पसंद करना पसंद है ... लेकिन जब संदेह होता है, तो अंडरस्कोर करें। गैर-लैटिन वर्णमाला के आदी लोग आपको धन्यवाद देंगे।
मैट ज़ुकोव्स्की

1
एकल बनाम बहुवचन बहस के लिए यह प्रश्न देखें: stackoverflow.com/questions/338156/…
जेसन

4
मुझे यकीन नहीं है कि मैं "JS कैमलकेस पसंद करता हूँ" कहूँगा। JS की अपनी कोई प्राथमिकता नहीं है, लेकिन यह कहना शायद सही है कि ज्यादातर JS प्रोग्रामर ऊंट मामले का इस्तेमाल करते हैं।
ट्रीफेस 2

1
@treeface मुझे लगता है कि मैट इस तथ्य की बात कर रहा था कि जेएस द्वारा निर्मित तरीके सभी कैमलकेस का उपयोग करते हैं, दोनों नोड और ब्राउज़र में
ल्यूक टेलर

1
अंतर्निहित पहचानकर्ता _idएक सामान्य जावास्क्रिप्ट सम्मेलन का पालन करने के लिए अंडरस्कोर के साथ सबसे अधिक संभावना है, जो इंगित करता है कि कुंजी एक आंतरिक / निजी कुंजी है। दूसरे शब्दों में, _idकिसी संग्रह का डेटा देखने वाले को कभी भी संपादित या प्रस्तुत करने का इरादा नहीं है।
ब्यू स्मिथ स्मिथ

57

डेटाबेस

  • टेढ़े मेढ़े संयुक्त शब्द
  • नाम के अंत में डीबी संलग्न करें
  • एकवचन बनाएं (संग्रह बहुवचन हैं)

MongoDB एक अच्छा उदाहरण बताता है:

एक डेटाबेस का उपयोग करने के लिए, मूंग शेल में, निम्न उदाहरण के रूप में, <db> स्टेटमेंट का उपयोग करें:

myDB का उपयोग करें myNewDB का
उपयोग करें

सामग्री: https://docs.mongodb.com/manual/core/dat डेटाबेस- and- collections /# dat डेटाबेस

संग्रह

  • लोअरकेस नाम: केस सेंसिटिविटी से बचा जाता है, MongoDB संग्रह नाम केस सेंसिटिव हैं।

  • बहुवचन: बहुवचन के रूप में किसी चीज़ के संग्रह को लेबल करने के लिए अधिक स्पष्ट है, उदाहरण के लिए "फ़ाइल" के बजाय "फाइलें"

  • > कोई शब्द विभाजक नहीं: उन मुद्दों से बचता है जहां अलग-अलग लोग (गलत तरीके से) अलग शब्द (उपयोगकर्ता नाम <-> user_name, first_name <->
    firstname)। यह एक
    इधर-उधर के कुछ लोगों के अनुसार बहस करने के लिए है लेकिन बशर्ते कि यह तर्क उन संग्रह नामों को अलग-थलग कर दे, जिनके बारे में मुझे नहीं लगता कि यह होना चाहिए;) यदि आप खुद
    को अपने संग्रह के नाम की पठनीयता में सुधार करते हुए पाते हैं , तो अपने संग्रह को जोड़कर या
    अपने संग्रह को व्यवस्थित करते हुए नाम संभवतः बहुत लंबा है या
    उपयुक्त अवधियों का उपयोग करना चाहिए जो संग्रह
    वर्गीकरण के लिए मानक है ।

  • उच्च विवरण संग्रह के लिए डॉट संकेतन: कुछ संकेत देता है कि संग्रह कैसे संबंधित हैं। उदाहरण के लिए आप यथोचित रूप से सुनिश्चित कर सकते हैं कि आप "users.pagevisits" को हटा सकते हैं यदि आपने "उपयोगकर्ताओं" को हटा दिया है, बशर्ते कि स्कीमा तैयार करने वाले लोगों ने अच्छा काम किया हो।

सामग्री: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

संग्रह के लिए, मैं इन सुझाए गए पैटर्न का पालन कर रहा हूं, जब तक कि मुझे आधिकारिक MongoDB दस्तावेज़ नहीं मिलते।


25

भले ही इस बारे में कोई सम्मेलन निर्दिष्ट नहीं किया गया है, मैनुअल संदर्भ लगातार एक-से-एक संबंधों के लिए मानगो प्रलेखन में संदर्भित संग्रह के नाम पर रखे गए हैं। नाम हमेशा संरचना का अनुसरण करता है <document>_id

उदाहरण के लिए, एक dogsसंग्रह में, एक दस्तावेज़ में इस तरह नामित बाहरी दस्तावेजों के मैनुअल संदर्भ होंगे:

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

यह _idप्रत्येक दस्तावेज के लिए पहचानकर्ता के नामकरण के मानगो सम्मेलन का अनुसरण करता है ।


1
मैंने अपने उत्तर में कैमलकेस का उल्लेख नहीं किया है, इसलिए मैं owner_id
1818 का

7

संग्रह के लिए नामकरण सम्मेलन

एक संग्रह के नाम पर कुछ सावधानियां बरतने के लिए:

  1. खाली स्ट्रिंग ("") वाला संग्रह वैध संग्रह नाम नहीं है।
  2. एक संग्रह नाम में शून्य वर्ण नहीं होना चाहिए क्योंकि यह संग्रह नाम के अंत को परिभाषित करता है।
  3. संग्रह का नाम उपसर्ग "सिस्टम" से शुरू नहीं होना चाहिए। क्योंकि यह आंतरिक संग्रह के लिए आरक्षित है।
  4. अच्छा होगा कि संग्रह नाम में चरित्र "$" न हो क्योंकि डेटाबेस के लिए उपलब्ध विभिन्न ड्राइवर संग्रह नाम में "$" का समर्थन नहीं करते हैं।

    डेटाबेस नाम बनाते समय ध्यान रखने योग्य बातें हैं:

  5. खाली स्ट्रिंग ("") वाला डेटाबेस एक मान्य डेटाबेस नाम नहीं है।
  6. डेटाबेस का नाम 64 बाइट्स से अधिक नहीं हो सकता।
  7. गैर-केस-संवेदी फ़ाइल सिस्टम पर भी डेटाबेस का नाम केस-संवेदी होता है। इस प्रकार निम्न मामले में नाम रखना अच्छा है।
  8. डेटाबेस नाम में इन वर्णों में से कोई भी शामिल नहीं हो सकता "/, \,।,", *, <,>,:,;,;,, $, "। इसमें एक भी स्थान या अशक्त वर्ण नहीं हो सकता।

अधिक जानकारी के लिए। कृपया नीचे दिए गए लिंक की जाँच करें: http://www.tutespace.com/2016/03/schema-design-and-naming-convent-in.html


3

मुझे लगता है कि यह सब व्यक्तिगत पसंद है। मेरी प्राथमिकताएँ SQL सर्वर के साथ, .NET में NHibernate का उपयोग करने से आती हैं, इसलिए वे शायद दूसरों के उपयोग से भिन्न हैं।

  • डेटाबेस: उपयोग किया जा रहा अनुप्रयोग .. ex: Stackoverflow
  • संग्रह: नाम में विलक्षण, क्या यह एक संग्रह होने जा रहा है, पूर्व: प्रश्न
  • दस्तावेज़ फ़ील्ड, उदा: सदस्य फ़र्स्टनाम

ईमानदारी से, यह बहुत ज्यादा मायने नहीं रखता है, जब तक कि यह परियोजना के अनुरूप है। बस काम करने के लिए और विवरण पसीना मत करो: पी


1
मुझे लगता है कि जो परिणाम हो सकता है वह दस्तावेज़ फ़ील्ड है, क्योंकि वे प्रत्येक दस्तावेज़ के अंदर संग्रहीत किए जाएंगे। जैसा कि टॉमाज़ ने बताया, उन्हें कम रखने से अंतरिक्ष / बैंडविड्थ को बचाना चाहिए। मुझे लगता है कि यह बहुत महत्वपूर्ण है कि आप किसी ऐसी चीज का उपयोग करें, जिससे इसे समझना आसान हो, हालांकि।
रेक्स मॉर्गन

2

जब तक हमें SERVER-863 नहीं मिलता है, तब तक फील्ड के नामों को यथासंभव कम रखना उचित है, खासकर जहां आपके पास बहुत सारे रिकॉर्ड हैं।

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

कृपया वोट करें


इस उत्तर के संभावित भविष्य के पाठकों को अपडेट करने के लिए, MongoDB इन दिनों संपीड़न करता है, इसलिए लंबे क्षेत्र के नाम वास्तव में अब कोई मुद्दा नहीं हैं।
हब्रो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.