यह थोड़ी देर के लिए मुझे परेशान कर दिया गया है, और मैं एक समाधान है कि लगता है सही पर पहुंचने नहीं कर सकते हैं ...पोस्टग्रेएसक्यूएल पहचानकर्ताओं में अंडरस्कोर या ऊंटकेस, जब प्रोग्रामिंग भाषा ऊंटकेस का उपयोग करती है?
एक OO भाषा को देखते हुए जिसमें वस्तु संपत्तियों के लिए हमेशा की तरह नामकरण परंपरा camelCased है, और एक उदाहरण इस तरह की वस्तु:
{
id: 667,
firstName: "Vladimir",
lastName: "Horowitz",
canPlayPiano: true
}
मुझे इस संरचना को PostgreSQL तालिका में कैसे मॉडल करना चाहिए?
तीन मुख्य विकल्प हैं:
- गैर उद्धृत CamelCase स्तंभ नाम
- उद्धृत CamelCase स्तंभ नाम
- गैर उद्धृत (लोअरकेस) अंडरस्कोर
साथ नाम वे प्रत्येक अपने कमियां हैं:
अनगिनत पहचानकर्ता स्वचालित रूप से लोअरकेस में गुना हो जाते हैं। इसका मतलब है कि आप
canPlayPiano
कॉलम के साथ एक टेबल बना सकते हैं, लेकिन मिश्रित मामला डेटाबेस तक कभी नहीं पहुंचता है। जब आप तालिका का निरीक्षण करते हैं, तो कॉलम हमेशाcanplaypiano
के रूप में दिखाई देगा - psql, pgadmin में, परिणाम समझाएं, त्रुटि संदेश, सबकुछ।उद्धरित पहचानकर्ता उनके मामले रखने के लिए, लेकिन एक बार आप उन्हें इस तरह बनाते हैं, आप हमेशा उन्हें उद्धृत करने के लिए होगा। IOW, यदि आप
"canPlayPiano"
कॉलम वाली तालिका बनाते हैं, तोSELECT canPlayPiano ...
विफल हो जाएगा। यह सभी एसक्यूएल कथनों के लिए बहुत अनावश्यक शोर जोड़ता है।अंडरस्कोर के साथ लोअरकेस नाम अस्पष्ट हैं, लेकिन वे एप्लिकेशन भाषा का उपयोग करने वाले नामों के लिए अच्छी तरह से मानचित्र नहीं बनाते हैं। आपको भंडारण (
can_play_piano
) और कोड (canPlayPiano
) के लिए अलग-अलग नामों का उपयोग करना याद रखना होगा। यह कुछ प्रकार के कोड स्वचालन को भी रोकता है, जहां गुणों और डीबी कॉलमों को नामित करने की आवश्यकता होती है।
तो मैं एक चट्टान और एक कठिन जगह (और एक बड़ा पत्थर; तीन विकल्प हैं) के बीच पकड़ा गया है। जो भी मैं करता हूं, कुछ हिस्सा अजीब महसूस करने जा रहा है। पिछले 10 सालों से, मैं विकल्प 3 का उपयोग कर रहा हूं, लेकिन मैं आशा करता हूं कि एक बेहतर समाधान होगा।
मैं आपकी सलाह के लिए आभारी हूं।
पीएस: मुझे पता है कि केस फोल्डिंग और कोट्स की आवश्यकता क्यों आ रही है - एसक्यूएल मानक, या मानक के PostgreSQL के अनुकूलन। मुझे पता है कि यह कैसे काम करता है; मैं पीजी कैसे पहचानकर्ताओं को संभालने के बारे में स्पष्टीकरण की तुलना में सर्वोत्तम प्रथाओं के बारे में सलाह में अधिक रुचि रखता हूं।
यहां तक कि अगर आप सभी लोअर केस के साथ जाना है, मैं सुझाव है कि आप है कि अपने डेटाबेस अमूर्त परत हमेशा उत्पन्न प्रश्नों में उद्धरण के साथ सभी पहचानकर्ता लपेट दें। आप हमेशा नई भविष्यवाणी में नए कीवर्ड का उपयोग नहीं करेंगे, इसलिए आप उद्धृत करके विवादित नामों से सुरक्षा प्राप्त कर सकते हैं। – kgrittn
कोई "सर्वोत्तम अभ्यास" नहीं है। आधे दुनिया अंडरस्कोर पसंद करते हैं, दूसरा आधा इसे घृणा करता है। आधा दुनिया प्रारंभिक कैप्स पसंद करती है, दूसरा आधा इसे घृणा करता है। आधा दुनिया मामला असंवेदनशील पसंद करता है, दूसरा आधा इसे घृणा करता है। कभी भी हिस्सों में से कोई भी जोड़ एक समझौते पर नहीं आएगा, क्योंकि ये मामले पूरी तरह से व्यक्तिपरक हैं। अपने आप को एक पक्ष बनाओ और वास्तव में क्या मायने रखता है इसके बारे में चिंता करना शुरू करें: कोड लिखना जो ऐसा करना चाहता है। –
क्या आप अपने द्वारा उपयोग किए गए वर्कअराउंड को साझा कर सकते हैं? मैं एक ही स्थिति से गुज़र रहा हूं, मेरे पास ऊंटों में ऑब्जेक्ट गुण हैं जिन्हें मुझे अंडरस्कोर पैटर्न में टेबल कॉलम के साथ मैप करने की आवश्यकता है। मैंने कुछ घंटे बिताए, लेकिन मुझे अभी तक कोई अच्छा समाधान नहीं मिला। –