मैं SQL में केवल डेटाबेस तालिका पढ़ने-लिखने के बाद कैसे लागू करता हूँ?


28

क्या यह भी संभव है?

मेरा उपयोग मामला एक लेज़र टेबल है, इस आवश्यकता के साथ कि एक बार रिकॉर्ड बनाने के बाद, इसे केवल-पढ़ा जाना चाहिए, अर्थात कोई भी इसे संपादित या हटाने में सक्षम नहीं होना चाहिए। यह केवल बहीखाता तालिका पर लागू होता है और इसके प्रत्यक्ष संबंध के साथ तालिकाओं - एक ही स्कीमा में अन्य तालिकाओं हैं जिन्हें अद्यतन / सामान्य रूप से हटा दिया जाएगा।

मेरी समझ यह है कि डेटा अखंडता प्रयोजनों के लिए इस प्रकार की बाधाओं को डेटाबेस परत पर लागू किया जाना चाहिए, लेकिन मुझे ऐसा करने का एक साफ, व्यापक रूप से स्वीकृत तरीका नहीं मिल सकता है - क्या यह एक ऐसा उपयोग मामला है जहां मैं सिर्फ इसे करना बेहतर होगा आवेदन परत में?

आदर्श इसे सादे एसक्यूएल में करने के तरीके के लिए होगा, इसलिए डीबी प्लेटफॉर्म का उपयोग करने के लिए अज्ञेय के रूप में, क्योंकि यह परिवर्तन के अधीन हो सकता है, लेकिन मुझे लगता है कि यह पूछने के लिए बहुत अधिक हो सकता है, इसलिए यदि यह है प्लेटफ़ॉर्म-डिपेंडेंट होने के लिए, MySQL का कुछ स्वाद पसंद किया जाता है।

धन्यवाद!

जवाबों:


43

मैं इसे पूरा करने के कम से कम दो तरीके देखता हूं। पहला दृष्टिकोण इन राइट-वन टेबल पर अनुदान DELETEऔर UPDATEविशेषाधिकार नहीं है , या, इस मामले के लिए, इसके अलावा किसी भी विशेषाधिकार INSERTऔर SELECT, इस प्रकार केवल उपयोगकर्ताओं को उनमें से चयन करने या चयन करने की अनुमति है।

एक अन्य विकल्प इन तालिकाओं को परिभाषित करना BEFORE UPDATEऔर BEFORE DELETEट्रिगर करना है और SIGNALट्रिगर बॉडी में एक अपवाद को बढ़ाने के लिए स्टेटमेंट का उपयोग करना है, जो क्रमशः अपडेट और डिलीट को रोक देगा।


6
जब से आप अपना इरादा स्पष्ट करते हैं और मुझे इसका उल्लंघन करने के लिए कई जानबूझकर कार्रवाई करनी
एडम मार्टिन

3
ट्रिगर बेहतर विकल्प हैं क्योंकि वे सभी लेनदेन पर आग लगाते हैं, जिसमें प्रशासनिक उपयोगकर्ताओं द्वारा किए गए शामिल हैं, और अधिक विशिष्ट त्रुटि संदेश दे सकते हैं।
ब्लरफ्लू

10

अनुमतियाँ स्पष्ट विकल्प लगती हैं - हालाँकि आप ARCHIVE संग्रहण इंजन का उपयोग भी कर सकते हैं । यह टेबल इंजन बड़ी मात्रा में डेटा रिकॉर्ड करने के लिए डिज़ाइन किया गया है जो कि परिवर्तित नहीं होगा:

ARCHIVE इंजन INSERT, REPLACE और SELECT को सपोर्ट करता है, लेकिन DELETE या UPDATE को नहीं। यह ऑपरेशनों, आदेश स्तंभों और मूल रूप से सभी लेकिन स्थानिक डेटा प्रकारों (धारा 11.5.1, "स्थानिक डेटा प्रकार देखें") का समर्थन करता है। ARCHIVE इंजन पंक्ति-स्तरीय लॉकिंग का उपयोग करता है।

अनुमतियों का अंतर यह है कि विस्तारित विशेषाधिकारों वाला कोई व्यक्ति अभी भी अधिकांश अन्य तालिका प्रकारों पर डेटा परिवर्तित करने में सक्षम होगा, जबकि ARCHIVE किसी को भी डेटा को बदलने की अनुमति नहीं देता है जो पहले से ही तालिका में है।


1
से यहाँ , ऐसा लगता है कि REPLACEएक तरह से है UPDATE! "REPLACE बिलकुल INSERT की तरह काम करता है, सिवाय इसके कि अगर तालिका में एक पुरानी पंक्ति में PRIMARY KEY या UNIQUE इंडेक्स के लिए एक नई पंक्ति के समान मूल्य है, तो नई पंक्ति सम्मिलित होने से पहले पुरानी पंक्ति हटा दी जाती है। 13.2.5 देखें। , "INSERT सिंटेक्स"।
Vérace

7

" प्वाइंट इन टाइम आर्किटेक्चर " या " टेम्पोरल डेटाबेस आर्किटेक्चर " देखें

डेटाबेस डिज़ाइन: ए पॉइंट इन टाइम आर्किटेक्चर

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

अस्थायी डेटाबेस

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

दोनों का मूल विचार यह है कि आपको या तो डेटा को हटाने के बिना जोड़ने की आवश्यकता है - या डेटा को इस तरह से स्टोर करें कि आप डेटा को खींच सकें जैसा कि वर्तमान में मौजूद है ... या पिछले डेटाटाइम पर मौजूद था।

संबंधित प्रश्न यहाँ: कैसे-बनाने के लिए एक बिंदु-समय में वास्तुकला , mysql ,

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.