2009-12-10 14 views
55

मैं स्टैक ओवरव्लो पर कुछ प्रश्न/उत्तर पढ़ रहा हूं, जो 'सर्वश्रेष्ठ' खोजने की कोशिश कर रहा है, या मुझे डेटाबेस पर तालिकाओं का नाम देने के लिए स्वीकार करना चाहिए।टेबल नामकरण: अंडरस्कोर बनाम कैमलकेस? नामस्थान? एकवचन बनाम बहुवचन?

डेवलपर्स के अधिकांश भाषा है कि डेटाबेस (जावा, नेट, पीएचपी, आदि) की आवश्यकता के आधार पर तालिकाओं का नाम देते हैं। हालांकि मुझे लगता है कि यह सही नहीं है।

तरह से मैं टेबल नामकरण किया गया है अब की तरह कुछ कर रही है जब तक:

doctorsMain 
doctorsProfiles 
doctorsPatients 
patientsMain 
patientsProfiles 
patientsAntecedents 

बातें मेरा सवाल है कर रहे हैं:

  • स्पष्टता
  • त्वरित मॉड्यूल की पहचान तालिका से है (डॉक्टरों || रोगियों)
  • भ्रम को रोकने के लिए समझने में आसान।

मैं नामकरण सम्मेलनों के संबंध में किसी भी राय को पढ़ना चाहता हूं। धन्यवाद।

उत्तर

105

संगत होने के नाते आप किस विशेष योजना का उपयोग करते हैं उससे कहीं अधिक महत्वपूर्ण है।

+14

दूसरे शब्दों में, हाँ, अच्छी तरह से किया गया, आपने कुछ सुसंगत योजनाओं की पहचान की है। इसके साथ पर मिलता है!टिप्पणी के लिए –

+2

+1। साथ ही, वर्तमान नामकरण योजना के लिए एक तरफ ध्यान दें पास्कलकेस बेहतर है, विशेष रूप से यदि आप SQL क्वेरीज़ के लिए उपनाम का उपयोग नहीं करते हैं। इस तरह आप टेबल नामों पर टेबल कॉलम नामों और पास्कल केस पर कैमेलकेस का उपयोग कर सकते हैं। – MarioRicalde

+1

टेबल नामों के लिए पास्कल/ऊंट का मामला कुछ मुद्दों का कारण बन सकता है। प्रत्येक तालिका में फाइल सिस्टम में एक फाइल होगी, और उनमें से कुछ केस-असंवेदनशील (उदा। ओएसएक्स) हैं। – ismriv

16

मैं आम तौर पर PascalCase का उपयोग करें और संस्थाओं विलक्षण हैं:

DoctorMain 
DoctorProfile 
DoctorPatient 

यह बहुत साफ, स्वच्छ संगत, और आसान अपने आवेदन सब कुछ ध्यान में रखते हुए कक्षाओं के लिए नामकरण सम्मेलनों की नकल करता सबके लिए समझने के लिए।

+0

क्या आपका मतलब पास्कल मामला नहीं है? – ScottE

+3

हाँ ... हाँ मैं करता हूं। मैं आज सुबह थोड़ा धुंधला हूँ। संपादन करना ... धन्यवाद। –

+3

इसे "कैपिटलकेस" भी कहा जाता है। – corsiKa

2

दुर्भाग्य से इस प्रश्न का कोई "सर्वश्रेष्ठ" जवाब नहीं है। जैसा कि @ डेविड ने कहा कि नामकरण सम्मेलन की तुलना में स्थिरता कहीं अधिक महत्वपूर्ण है।

7

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

+2

11 जी और ऊपर में, यदि मामला डबल कोट्स में लपेटा गया है तो मामला संरक्षित प्रतीत होता है। इसे भविष्य के संदर्भ के लिए यहां डाल देना। मुझे निश्चित रूप से पता है कि पोस्टग्रेस भी ऐसा करता है, अन्य डीबी इंजन नहीं हो सकते हैं। –

5

मैं लोग हैं, जो कहते हैं कि यह भाषा की परंपराओं का उपयोग कर रहे (रूबी के लिए उदाहरण के लिए सी के लिए PascalCase # और snake_case) पर निर्भर करता है के साथ सहमत हैं।

कभी भी ऊंट कैस, हालांकि।

+2

एडा: Pascal_Case_With_Underscores – uetoyo

+1

यह तब समझ में नहीं आता है जब आप एक ही तालिका को दो अलग-अलग भाषाओं में एक्सेस करना चाहते हैं जिनके पास अलग-अलग नामकरण सम्मेलन हैं। – DanFromGermany

1

वहाँ शब्द अलग करने के लिए कैसे पर विस्तृत परिवर्तनशीलता आप लेने के लिए जो कुछ भी आप बेहतर तरह होगा नहीं है, इसलिए; लेकिन साथ ही, ऐसा लगता है कि आम सहमति के करीब है कि तालिका का नाम एकवचन होना चाहिए। एसक्यूएल की

9

मामले असंवेदनशील प्रकृति Underscores_Scheme का समर्थन करता है। आधुनिक सॉफ्टवेयर हालांकि किसी भी प्रकार की नामकरण योजना का समर्थन करता है। हालांकि कभी कभी कुछ बुरा कीड़े, त्रुटियों या मानव कारक UPPERCASINGEVERYTHING करने के लिए नेतृत्व कर सकते हैं ताकि उन, जो Pascal_Case और Underscore_Case योजना दोनों का चयन है कि अच्छी जगह में अपने सभी नसों के साथ रहते हैं।

8

ऊपर से ज्यादातर का एक एकत्रीकरण:

  • डेटाबेस में मामले पर भरोसा नहीं करते
  • नाम के मामले या विभाजक भाग पर विचार नहीं है - बस शब्द
  • करना जो भी विभाजक या केस आपकी भाषा के लिए मानक है

फिर आप वातावरण के बीच आसानी से अनुवाद (यहां तक ​​कि स्वचालित रूप से) अनुवाद कर सकते हैं।

लेकिन मैं एक और विचार जोड़ेंगे: आप अन्य कारकों है जब आप अपने डेटाबेस में एक मेज पर अपने अनुप्रयोग में एक वर्ग से स्थानांतरित देखते हैं कि मिल सकता है: डेटाबेस वस्तु विचारों, ट्रिगर संग्रहीत procs, अनुक्रमित, बाधाओं है , आदि - जिन्हें नामों की भी आवश्यकता है। तो उदाहरण के लिए, आप अपने आप को केवल उन दृश्यों के माध्यम से टेबल तक पहुंच सकते हैं जो आमतौर पर केवल "सरल * foo से चुनते हैं"। इन्हें टेबल नाम के रूप में पहचाना जा सकता है, केवल '_v' के प्रत्यय के साथ या आप उन्हें एक अलग स्कीमा में डाल सकते हैं। इस तरह के एक साधारण अमूर्त परत के लिए उद्देश्य यह है कि जब एक पर्यावरण में परिवर्तन को दूसरे को प्रभावित करने से बचने के लिए आवश्यक हो तो इसे विस्तारित किया जा सकता है। यह उपर्युक्त नामकरण सुझावों को तोड़ नहीं देगा - केवल कुछ और चीजों के लिए खाते हैं।

2

कई अन्य राय पढ़ने के बाद मुझे लगता है कि भाषा के नामकरण सम्मेलनों का उपयोग करना बहुत महत्वपूर्ण है, अगर आप (और होंगे) आवेदन के एकमात्र डेवलपर हैं तो सम्मेलन नामकरण की तुलना में स्थिरता अधिक महत्वपूर्ण है। यदि आप पठनीयता चाहते हैं (जो कि बहुत महत्वपूर्ण है) तो आप प्रत्येक भाषा के लिए नामकरण सम्मेलनों का बेहतर उपयोग करते हैं। उदाहरण के लिए MySQL में, मैं CamelCase का उपयोग करने का सुझाव नहीं देता क्योंकि सभी प्लेटफ़ॉर्म केस संवेदनशील नहीं हैं। तो यहाँ अंडरस्कोर बेहतर हो जाता है।

+0

बिल्कुल सहमत हैं !!! खासकर माईएसक्ल के साथ जब आप इसे विंडोज़ पर चलाते हैं तो सब कुछ 'ऊंटकेस' से 'कैमेलकेस' तक बन जाता है। तो सांप का मामला बहुत बेहतर है। इसके अलावा 'आधुनिक सॉफ्टवेयर हालांकि किसी भी प्रकार की नामकरण योजना का समर्थन करता है' आपके पास कोई गारंटी नहीं है कि yop अंतिम संस्करण नरम के लिए कोड लिखेंगे। विशेष रूप से डेटाबेस के लिए - जब आप प्रतिगमन लागत के बारे में सोचते हैं तो संस्करण अद्यतन छोटा नहीं होता है। – Cherry

2

चूंकि प्रश्न किसी विशेष प्लेटफॉर्म या डीबी इंजन के लिए विशिष्ट नहीं है, इसलिए मुझे अधिकतम पोर्टेबिलिटी के लिए कहना होगा, आपको हमेशा लोअरकेस टेबल नामों का उपयोग करना चाहिए।

/[a-z _] [a-z0-9 _] */वास्तव में उन नामों का एकमात्र पैटर्न है जो विभिन्न प्लेटफार्मों के बीच निर्बाध रूप से अनुवाद करता है। लोअरकेस अल्फा-न्यूमेरिक + अंडरस्कोर हमेशा लगातार काम करेगा।

कहीं उल्लेख किया है, संबंध (टेबल) नाम विलक्षण होना चाहिए: http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html

+0

मैं सहमत हूं - पास्कल या ऊंट केसिंग की तुलना में अंडरस्कोर में कम से कम समस्याएं हैं। खासकर जब आप नामांकन मॉडल, डीटीओ और फ्रंटएंड के अंत में यात्रा करते हैं। – Saulius

0

ये मेरी पाँच सेंट हैं। मैं निष्कर्ष निकाला कि यदि एक परियोजना के लिए विभिन्न विक्रेताओं के डीबी का उपयोग किया जाता है तो दो सर्वोत्तम तरीके हैं:

  1. अंडरस्कोर का उपयोग करें।
  2. उद्धरण के साथ ऊंट के मामले का उपयोग करें।

कारण यह है कि कुछ डेटाबेस सभी वर्णों को अपरकेस और कुछ को लोअरकेस में परिवर्तित कर देगा। इसलिए, यदि आपके पास myTable है तो यह MYTABLE या mytable बन जाएगा जब आप डीबी के साथ काम करेंगे।

संबंधित मुद्दे