संक्षेप में - अभी आप जो भी करने की कोशिश कर रहे हैं उसके लिए कोई अच्छा साफ एसटीआई एपीआई नहीं है।
मैं वास्तव में एक साल के बारे में पहले कि एक में देखा और एक निष्कर्ष पर पहुंचा है कि यह कई कारणों से एक अच्छा विचार नहीं है:
- आप PostgreSQL विशिष्ट सुविधाओं का उपयोग करना चाहते हैं - आप मूल रूप से अपने आप को शादी करने कर रहे हैं उस डीबी के लिए। मुझे गलत मत समझो PostgreSQL एक महान डीबी है और मैंने इसे कई अवसरों पर उपयोग किया है, लेकिन आप उस डीबी और ऐप डिज़ाइन से फंस जाएंगे।
- अधिकतर यदि आप डीबी विशिष्ट विशेषताओं का उपयोग करना शुरू करते हैं तो आप या तो उन्हें मैन्युअल रूप से कार्यान्वित कर सकते हैं (डीबी पर कुछ प्रकार के आदेश चला रहे हैं या जीयूआई का उपयोग कर रहे हैं) या किसी भी तरह की स्क्रिप्ट लिख रहे हैं जिसे आप जब भी दौड़ रहे हों तो आपको आमंत्रित करना होगा डीबी: माइग्रेट करें (यदि आप उचित परीक्षण करना चाहते हैं तो आपको इसे करना होगा)। थोड़ी देर बाद यह बोझिल और परेशान हो जाता है।
- आप पाते हैं कि आप अधिक से साथ और अधिक नाराज हैं, तो आप को उद्धृत करने के "दुखद विस्तृत टेबल और" प्रकार "कॉलम" तो:
- आपका तालिका डिजाइन की पुन: कल्पना और
- आपका मॉडल पुन: किया जा करने की जरूरत है एसटीआई
- के लिए एक अच्छे उम्मीदवार नहीं हो सकते हैं आपको बस इसके साथ रहना होगा।
अधिकांश आईटी समस्याओं वास्तव में यह करने के लिए नीचे आ: प्रयास बनाम लाभ उठाएं।
आपके मामले में आप अपने आप को इस सवाल पूछना चाहिए:
- में आप कितना समय कुछ सेकंड के द्वारा एक बेहतर एसटीआई संरचना लागू करने पर खर्च करने के लिए करता है, तो यह केवल आपके कच्चे SQL क्वेरी तेज़ हो जाएगी चाहते हैं ? शायद एक और अधिक स्पष्ट एसक्यूएल क्वेरी लिखना बेहतर है? अधिकांश एप्लिकेशन उस आकार में नहीं बढ़ते हैं जहां यह वास्तव में एक मुद्दा बन जाता है। लेकिन यह आपके मामले में शायद अलग हो सकता है।
पुनश्च:
इसके अलावा
अपने अनुप्रयोग में एसटीआई की संरचना पर एक त्वरित टिप: यदि आप पाते हैं कि आप मॉडल है कि एक ProductCategory, CommentCategory, PhoneCategory, ClientCategory है कि सभी के वारिस की तरह एसटीआई का उपयोग का एक बहुत है, तो Cateogory से - मैं उन्हें मॉडल निर्देशिका के अंदर फ़ोल्डरों में व्यवस्थित करने के लिए जाते हैं। तब application.rb में सिर्फ एक पंक्ति जोड़ें: config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/**}')]
"तो हम सभी जानते हैं कि रेल 'एसटीआई (एकल तालिका विरासत) icky है क्योंकि यह एक अव्यवस्थित डेटा मॉडल और उप-डेटाबेस डेटाबेस की ओर जाता है।" --- मैं इस आधार को स्वीकार नहीं करता हूं। –
ठीक है शायद यह सामान्यीकरण का थोड़ा सा है .. लेकिन यह केवल एक अच्छा विचार है जब आपके बच्चे के मॉडल में बहुत सारी संपत्तियां नहीं होती हैं जो अन्य बच्चों पर लागू नहीं होती हैं .. अन्यथा आप बड़े पैमाने पर व्यापक टेबल के साथ समाप्त होते हैं शून्य कॉलम रेल परिप्रेक्ष्य से ठीक हो सकता है लेकिन डेटाबेस पर कच्चे एसक्यूएल चलाते समय थोड़ी बदसूरत हो सकती है, शायद पोस्टग्रेएसक्यूएल की विरासत कोई तेज़ नहीं है लेकिन कम से कम यह मुझसे दूर है! : पी –
क्योंकि पोस्टग्रेर्स की विरासत इतनी सहजता से फिट बैठती है, मुझे नहीं लगता कि सिर्फ 'टाइप' कॉलम होना पर्याप्त होगा? जो मैंने विरासत के साथ देखा है, 'SELECT *' सभी संबंधित कॉलम वापस कर देगा (और मुझे लगता है कि सभी असंबद्ध कॉलम भी हैं:/... लेकिन आपकी डीबी संरचना क्लीनर होगी। – stuartc