2011-10-26 4 views
109

यहाँ कैसे मैं यह कर दिया गया है:क्या MySQL के लिए नामकरण सम्मेलन है?

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

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

+3

ऑटो वृद्धि पीके जुस के लिए उपयोग करना गलत है टी "आईडी"? क्यूं कर? कॉलम का नाम केवल तालिका के संदर्भ में है। इसलिए मेरे पास प्रत्येक तालिका में एक "आईडी" है, और इसमें FK के लिए कई id_ हो सकते हैं। – Zbyszek

+1

@Zbyszek मुझे लगता है कि इसके खिलाफ सबसे सरल कारण केवल स्थिरता/सादगी के लिए है। 'Id_tableB' => * ओह नहीं * ** अलग-अलग नामित कॉलम **' id' होने की बजाय, 'id_tableB' =>' id_tableB' की स्थिरता केवल neater दिखती है ... या ओपी के रूप में यह करता है: 'foo_id' => 'foo_id' की बजाय' foo_id' => 'id' – mmcrae

उत्तर

77

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

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

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

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

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

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

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

सूचकांक नामकरण सम्मेलनों

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

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

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

यहां मुख्य बात निश्चित रूप से स्थिरता है! साइमन Holywell से MySQL के लिए

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

सबसे आम codingstyle:

http://www.sqlstyle.guide/

भी देखें इस सवाल:

+0

में लिखा गया है इससे बेहतर क्या होगा प्वाइंट 5? यह सिरदर्द क्यों बन सकता है? – rsb2097

+4

अनुवर्ती करने के लिए, मैंने यह प्रश्न उन लोगों के लिए उपयोगी पाया जो बाद में यहां आएंगे: https://launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/#naming-conventions – Enissay

+0

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

5

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

आपके सम्मेलन ठीक हैं।

बस इतने लंबे समय के रूप में वे एक) सरल कर रहे हैं, और ख) संगत - मैं किसी भी समस्याओं :)

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

+1

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

+0

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

+2

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

14

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

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

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