2011-11-12 24 views
5

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

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

जो मैं प्रोग्राम करने की कोशिश कर रहा हूं वह ऐसा कुछ है जो उपयोगकर्ता परिभाषित फ़ील्ड के साथ तालिका को अनुमति देता है। तो इस तरह से सोचो। वेब यूआई में एक खाली टेबल होगी, उपयोगकर्ता टेबल का नाम देगा, और कॉलम (फ़ील्ड) जोड़ देगा, और उसके बाद, पंक्तियां जोड़ें, और उसके बाद इसे सेव करें। मैं इसे कैसे कार्यान्वित करूं? मैं विवरण मांग नहीं रहा हूं, बस इसका एक सिंहावलोकन। जैसा कि मैंने कहा, मैंने अभी तक पढ़े गए सभी ट्यूटोरियल उन क्षेत्रों के साथ प्री-डिफ़ाइंड टेबल से निपटते हैं जहां ActiveRecord subclass को पूर्वनिर्धारित किया गया है।

तो संक्षेप में, मैं पूछ रहा हूं, रनटाइम पर डीबी में टेबल कैसे बनाएं, और तालिकाओं में फ़ील्ड जोड़ें।

आशा है कि मैं स्पष्ट था, अगर नहीं, तो कृपया मुझे बताएं और मैं थोड़ा और विस्तार करने की कोशिश करूंगा। धन्यवाद।

+3

यदि आप सर्वर साइड वेब प्रोग्रामिंग के साथ शुरू कर रहे हैं, तो हैलो वर्ल्ड से शुरू करने के बारे में कैसे? :) यह आपके प्रश्न से लगता है कि आप मेटा प्रोग्रामिंग के पूरे समूह के साथ एक वेब नियंत्रित डेटाबेस बनाना चाहते हैं। मेरा सुझाव है कि इसके प्रति क्रमिक कदम उठाएं। मैं कुछ हद तक कल्पना कर सकता हूं कि आप क्या चाहते हैं, बस इसे "सर्वर साइड प्रोग्रामिंग स्पीकर शुरू करने" में समझाएं। मेरा मतलब यह सबसे अच्छे तरीके से है। हां? –

+1

आकस्मिक उपयोगकर्ताओं को अपना डेटाबेस डिजाइनर देना एक जोखिम भरा, जोखिम भरा व्यवसाय है। –

+1

आप जो करने की कोशिश कर रहे हैं वह वास्तव में बहुत ही उन्नत है और मूल रूप से तब भी एक बुरा विचार है (लेकिन वास्तव में नए लोगों के लिए काफी आम है!)। सिस्टम के उपयोगकर्ता डेटा संग्रहित करना चाहिए। उन्हें टेबल बनाने के बाद सिर्फ एक बुरा दृष्टिकोण और एक बुरा विचार है जब तक कि आपके पास बड़ी मात्रा में डीबीएमएस अनुभव न हो। स्कीमा निर्माता (आप इस मामले में) केवल लचीली डेटा संरचनाएं बनाना चाहते हैं जो आपको जो भी चाहिए उसे स्टोर करेंगे। बस उपयोगकर्ता दृष्टिकोण टेबल बनाने भूल जाओ। आखिरकार वे इंडेक्स भी बनायेंगे? क्या वे अद्वितीय समझते हैं? क्या वे शामिल हो जाते हैं? समग्र कुंजी? yuch। –

उत्तर

2

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

उदाहरण के लिए, यदि आप अपने 100 उपयोगकर्ताओं के टेबल पर एक निश्चित मूल्य खोजना चाहते हैं, तो आपको 100 अलग-अलग प्रश्नों को चलाने होंगे। साइट को बनाए गए अधिक उपयोगकर्ता टेबल को तेजी से धीमा कर दिया जाएगा।

करने के लिए यह इसे से जुड़े क्षेत्रों, और पंक्तियों से संबंधित डेटा (जो किसी भी तरह से इनकोडिंग जाएगा) स्टोर करने के लिए होता है इस

class Table < ActiveRecord::Base 
    has_many :fields 
    has_many :rows 
end 

हर मेज की तरह एक टेबल मॉडल के लिए हो सकता है एक saner रास्ता।

हालांकि, जैसा कि @ आदित्य सही बताता है, यह वास्तव में शुरुआती सामान नहीं है!

+1

यह "आंतरिक मंच" विरोधी पैटर्न है। आप मौजूदा डेटाबेस प्लेटफॉर्म का उपयोग करके "आंतरिक" डेटाबेस बना रहे हैं, जो खराब प्रदर्शन करेगा और समझने में कठोर होगा, फिर वास्तविक टेबल बनाना और संशोधित करना। निश्चित रूप से कुछ सुरक्षा सावधानी बरतने के साथ, एप्लिकेशन के अलग-अलग डेटाबेस या स्कीमा की स्कीमा को गतिशील रूप से बदलने के लिए बेहतर होगा। मैं मानता हूं कि यह निश्चित रूप से शुरुआती सामान नहीं है। – fregas

1

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

class User < ActiveRecord::Base 
    has_many :tables 
    end 

कुछ हो सकता था और उसके बाद प्रत्येक मेज एक क्षेत्र एक धारावाहिक सरणी स्टोर करने के लिए हो सकता है। या आप एलेक्स के सुझाव के साथ जा सकते हैं - सबसे अच्छा विकल्प वास्तव में इस बात पर निर्भर करता है कि आप डेटा के साथ क्या करने जा रहे हैं, कितनी बार यह बदलता है, चाहे आपको इसे खोजना है और ...

1

आप डेटाबेस बना सकते हैं जैसा कि ट्यूटोरियल्स में दिखाया गया है जो टेबल और उनके कॉलम का नाम संग्रहीत करते हैं, जिन्हें आपका उपयोगकर्ता चाहिए।फिर आप कार्यकर्ता (जिसे रेडिस और रेस्क्यू का उपयोग करके बनाया जा सकता है, here रेस्क्यू और रेडिस पर सरल टट है) और उन कार्यकर्ताओं को डीबी में नई तालिका के लिए आपके लिए माइग्रेशन चलाएं (चर के साथ माइग्रेशन लिखें और उन्हें बदलने के लिए पैराम का उपयोग करें) जैसे ही डेटाबेस में नई प्रविष्टि बनाई जाती है। मुझे बताओ कि क्या आपके पास इस पर सवाल हैं।

+1

वह बस शुरू कर रहा है। "जिसे रेडिस एंड रेस्क्यू का उपयोग करके बनाया जा सकता है" अखरोट है। –

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