39

यह थोड़ी देर के लिए मुझे परेशान कर दिया गया है, और मैं एक समाधान है कि लगता है सही पर पहुंचने नहीं कर सकते हैं ...पोस्टग्रेएसक्यूएल पहचानकर्ताओं में अंडरस्कोर या ऊंटकेस, जब प्रोग्रामिंग भाषा ऊंटकेस का उपयोग करती है?

एक OO भाषा को देखते हुए जिसमें वस्तु संपत्तियों के लिए हमेशा की तरह नामकरण परंपरा camelCased है, और एक उदाहरण इस तरह की वस्तु:

{ 
    id: 667, 
    firstName: "Vladimir", 
    lastName: "Horowitz", 
    canPlayPiano: true 
} 

मुझे इस संरचना को PostgreSQL तालिका में कैसे मॉडल करना चाहिए?

तीन मुख्य विकल्प हैं:

  1. गैर उद्धृत CamelCase स्तंभ नाम
  2. उद्धृत CamelCase स्तंभ नाम
  3. गैर उद्धृत (लोअरकेस) अंडरस्कोर

साथ नाम वे प्रत्येक अपने कमियां हैं:

  1. अनगिनत पहचानकर्ता स्वचालित रूप से लोअरकेस में गुना हो जाते हैं। इसका मतलब है कि आप canPlayPiano कॉलम के साथ एक टेबल बना सकते हैं, लेकिन मिश्रित मामला डेटाबेस तक कभी नहीं पहुंचता है। जब आप तालिका का निरीक्षण करते हैं, तो कॉलम हमेशा canplaypiano के रूप में दिखाई देगा - psql, pgadmin में, परिणाम समझाएं, त्रुटि संदेश, सबकुछ।

  2. उद्धरित पहचानकर्ता उनके मामले रखने के लिए, लेकिन एक बार आप उन्हें इस तरह बनाते हैं, आप हमेशा उन्हें उद्धृत करने के लिए होगा। IOW, यदि आप "canPlayPiano" कॉलम वाली तालिका बनाते हैं, तो SELECT canPlayPiano ... विफल हो जाएगा। यह सभी एसक्यूएल कथनों के लिए बहुत अनावश्यक शोर जोड़ता है।

  3. अंडरस्कोर के साथ लोअरकेस नाम अस्पष्ट हैं, लेकिन वे एप्लिकेशन भाषा का उपयोग करने वाले नामों के लिए अच्छी तरह से मानचित्र नहीं बनाते हैं। आपको भंडारण (can_play_piano) और कोड (canPlayPiano) के लिए अलग-अलग नामों का उपयोग करना याद रखना होगा। यह कुछ प्रकार के कोड स्वचालन को भी रोकता है, जहां गुणों और डीबी कॉलमों को नामित करने की आवश्यकता होती है।

तो मैं एक चट्टान और एक कठिन जगह (और एक बड़ा पत्थर; तीन विकल्प हैं) के बीच पकड़ा गया है। जो भी मैं करता हूं, कुछ हिस्सा अजीब महसूस करने जा रहा है। पिछले 10 सालों से, मैं विकल्प 3 का उपयोग कर रहा हूं, लेकिन मैं आशा करता हूं कि एक बेहतर समाधान होगा।

मैं आपकी सलाह के लिए आभारी हूं।

पीएस: मुझे पता है कि केस फोल्डिंग और कोट्स की आवश्यकता क्यों आ रही है - एसक्यूएल मानक, या मानक के PostgreSQL के अनुकूलन। मुझे पता है कि यह कैसे काम करता है; मैं पीजी कैसे पहचानकर्ताओं को संभालने के बारे में स्पष्टीकरण की तुलना में सर्वोत्तम प्रथाओं के बारे में सलाह में अधिक रुचि रखता हूं।

+0

यहां तक ​​कि अगर आप सभी लोअर केस के साथ जाना है, मैं सुझाव है कि आप है कि अपने डेटाबेस अमूर्त परत हमेशा उत्पन्न प्रश्नों में उद्धरण के साथ सभी पहचानकर्ता लपेट दें। आप हमेशा नई भविष्यवाणी में नए कीवर्ड का उपयोग नहीं करेंगे, इसलिए आप उद्धृत करके विवादित नामों से सुरक्षा प्राप्त कर सकते हैं। – kgrittn

+2

कोई "सर्वोत्तम अभ्यास" नहीं है। आधे दुनिया अंडरस्कोर पसंद करते हैं, दूसरा आधा इसे घृणा करता है। आधा दुनिया प्रारंभिक कैप्स पसंद करती है, दूसरा आधा इसे घृणा करता है। आधा दुनिया मामला असंवेदनशील पसंद करता है, दूसरा आधा इसे घृणा करता है। कभी भी हिस्सों में से कोई भी जोड़ एक समझौते पर नहीं आएगा, क्योंकि ये मामले पूरी तरह से व्यक्तिपरक हैं। अपने आप को एक पक्ष बनाओ और वास्तव में क्या मायने रखता है इसके बारे में चिंता करना शुरू करें: कोड लिखना जो ऐसा करना चाहता है। –

+0

क्या आप अपने द्वारा उपयोग किए गए वर्कअराउंड को साझा कर सकते हैं? मैं एक ही स्थिति से गुज़र रहा हूं, मेरे पास ऊंटों में ऑब्जेक्ट गुण हैं जिन्हें मुझे अंडरस्कोर पैटर्न में टेबल कॉलम के साथ मैप करने की आवश्यकता है। मैंने कुछ घंटे बिताए, लेकिन मुझे अभी तक कोई अच्छा समाधान नहीं मिला। –

उत्तर

21

यह देखते हुए कि PostgreSQL अंडरस्कोर के साथ केस-असंवेदनशील पहचानकर्ताओं का उपयोग करता है, क्या आप अपने आवेदन में अपने सभी पहचानकर्ताओं को ऐसा करने के लिए बदलना चाहिए? स्पष्ट रूप से नहीं। तो आपको लगता है कि रिवर्स एक उचित विकल्प क्यों है?

पोस्टग्रेएसक्यूएल में सम्मेलन मानकों के अनुपालन और अपने उपयोगकर्ताओं के दीर्घकालिक अनुभव के मिश्रण के माध्यम से आया है। इसके साथ बने रहें।

यदि कॉलम-नाम और पहचानकर्ताओं के बीच अनुवाद करना कठिन हो जाता है, तो कंप्यूटर इसे करें - वे इस तरह की चीजों पर अच्छे हैं। मैं लगभग 9 मिलियन डेटाबेस अमूर्त पुस्तकालयों का अनुमान लगा रहा हूं, वहां ऐसा कर सकते हैं। यदि आपके पास गतिशील भाषा है तो यह आपको कैमेलकेस में पहचानकर्ताओं को कॉलम-नामों को स्वैप करने के लिए कोड की दो पंक्तियां ले जाएगा।

+2

मुझे अभी एहसास हुआ कि मैंने इस सवाल को उत्तर के रूप में कभी नहीं चिह्नित किया है ... एक ओआरएम अनुवाद समारोह का परिचय पहली बार बहुत ही सुरुचिपूर्ण महसूस नहीं किया था, लेकिन हिंडसाइट (3-4 साल बाद) में यह सही विकल्प था और मैंने कभी खेद नहीं किया । आपके सहयोग के लिए धन्यवाद। – Zilk

+0

खुशी हुई यह मदद की। –

16

PostgreSQL में अपने कॉलम underscores साथ हैं, तो आप उपनाम रख सकते हैं लेकिन doule-उद्धरण साथ।

उदाहरण:

SELECT my_column as "myColumn" from table; 
संबंधित मुद्दे