আমি কীভাবে একবার লিখন প্রয়োগ করব তারপরে এসকিউএল-তে কেবল ডাটাবেস সারণি পড়ব?


28

এটা কি সম্ভব?

আমার ব্যবহারের কেসটি একটি খাত্তরের টেবিল, এটির সাথে একটি প্রয়োজনীয়তা যা একবার রেকর্ড তৈরি হয়ে যায়, এটি কেবল পঠনযোগ্য হওয়া উচিত, অর্থাৎ কেউই এটি সম্পাদনা করতে বা মুছতে সক্ষম হয় না। এটি কেবল খাত্তরের টেবিলের সাথে প্রযোজ্য এবং এটির সাথে সরাসরি সম্পর্কযুক্ত টেবিলগুলি - একই স্কিমায় অন্যান্য টেবিল রয়েছে যা আপডেট করা / স্বাভাবিক হিসাবে মুছে ফেলা হবে।

আমার বোধগম্যতা হল ডেটা অখণ্ডতার উদ্দেশ্যে ডেটাবেস স্তরে এই ধরণের বাধা প্রয়োগ করা উচিত, তবে আমি এটি করার কোনও পরিষ্কার, বহুল স্বীকৃত উপায় খুঁজে পাচ্ছি না - এটি কি এমন এক ব্যবহারের ক্ষেত্রে যেখানে আমি আরও ভাল করে থাকতাম অ্যাপ্লিকেশন স্তরে?

আদর্শ এটি প্লেইন এসকিউএল করার একটি উপায়ের জন্য হবে, যাতে ডিবি প্ল্যাটফর্মটি কী ব্যবহার করে তা অজ্ঞেয়িত হতে পারে, যেহেতু এটি পরিবর্তনের বিষয় হতে পারে, তবে আমি বুঝতে পারি যে এটি চাইতে চাইতে খুব বেশি হতে পারে, তাই যদি এটি থাকে প্ল্যাটফর্ম-নির্ভর হতে, মাইএসকিউএল এর কিছু স্বাদ পছন্দ করা হয়।

ধন্যবাদ!

উত্তর:


43

আমি এটি সম্পাদনের কমপক্ষে দুটি উপায় দেখতে পাচ্ছি। প্রথম পন্থাটি হ'ল এই লেখার সময়কার টেবিলগুলিতে DELETEএবং UPDATEসুযোগ-সুবিধাগুলি না দেওয়া বা এই বিষয়টির জন্য কোনও সুযোগ-সুবিধা বাদ দেওয়া INSERTএবং SELECTএইভাবে কেবল ব্যবহারকারীদের sertোকাতে বা সেগুলি থেকে নির্বাচন করতে দেওয়া।

আর একটি বিকল্প হ'ল এই টেবিলগুলিতে সংজ্ঞা দেওয়া BEFORE UPDATEBEFORE DELETEট্রিগার করা এবং ট্রিগার SIGNALবডিটিতে একটি ব্যতিক্রম বাড়াতে বিবৃতিটি ব্যবহার করা যা যথাক্রমে আপডেটগুলি এবং মুছতে প্রতিরোধ করবে।


6
আমি উভয় বিকল্পের পরামর্শ দিচ্ছি যেহেতু আপনি আপনার উদ্দেশ্যটি পরিষ্কার করেছেন এবং এটি লঙ্ঘন করার জন্য একাধিক ইচ্ছাকৃত ব্যবস্থা গ্রহণ করতে হবে
অ্যাডাম মার্টিন

3
ট্রিগাররা আরও ভাল পছন্দ যেহেতু তারা প্রশাসনিক ব্যবহারকারীর দ্বারা নেওয়া সমস্ত লেনদেনের উপর ঝুঁকিপূর্ণ এবং আরও নির্দিষ্ট-ত্রুটি বার্তা দিতে পারে।
blrfl

10

অনুমতিগুলি সুস্পষ্ট পছন্দ বলে মনে হচ্ছে - তবে আপনি সংরক্ষণাগার ইঞ্জিনও ব্যবহার করতে পারেন । এই টেবিল ইঞ্জিনটি বিপুল পরিমাণে ডেটা রেকর্ড করার জন্য তৈরি করা হয়েছে:

আর্কাইভ ইঞ্জিন ইনসার্ট, রিপ্লেস এবং নির্বাচন নির্বাচন করে তবে ডিলিট বা আপডেট নয়। এটি অর্ডার বাই অপারেশনগুলি, ব্লগ কলামগুলি এবং মূলত স্থানিক ডেটা ধরণের (বিভাগ 11.5.1, "স্থানিক ডেটা প্রকারগুলি" দেখুন) সমর্থন করে। আর্কাইভ ইঞ্জিনটি সারি-স্তরের লকিং ব্যবহার করে।

অনুমতিগুলির মধ্যে পার্থক্য হ'ল প্রসারিত সুবিধাগুলি সহ কেউ অন্য বেশিরভাগ সারণির ধরণের ডেটা পরিবর্তন করতে সক্ষম হবেন, যখন আর্কাইভ ইতিমধ্যে সারণীতে থাকা ডেটা পরিবর্তন করতে কাউকে অনুমতি দেয় না।


1
থেকে এখানে , দেখে মনে হচ্ছে REPLACEকেমন হয় UPDATE! "রিপ্লেস ঠিক ঠিক INSERT এর মতোই কাজ করে, ব্যতীত যদি টেবিলের কোনও পুরানো সারিতে প্রাথমিক কী বা একটি অনন্য সূচকের জন্য নতুন সারিটির সমান মান থাকে তবে নতুন সারিটি সন্নিবেশ করার আগে পুরানো সারিটি মুছে ফেলা হয়। বিভাগ 13.2.5 দেখুন , "INSERT সিনট্যাক্স"।
ভ্রেস

7

" পয়েন্ট ইন টাইম আর্কিটেকচার " বা "দেখুন" টেম্পোরাল ডেটাবেস আর্কিটেকচার " এ দেখুন

ডাটাবেস ডিজাইন: টাইম আর্কিটেকচারে একটি পয়েন্ট

বেশিরভাগ রিলেশনাল ডাটাবেস বাস্তবায়নে। কমান্ড আপডেট এবং মুছুন তাদের সমস্যার আগে উপস্থিত ডেটা ধ্বংস করে। যাইহোক, কিছু সিস্টেমের জন্য কোনও তথ্য কখনও ডেটাবেসে শারীরিকভাবে মুছে ফেলা বা আপডেট করা হয় না। এই নিবন্ধে আর্থার ফুলার পয়েন্ট-ইন-টাইম আর্কিটেকচারের আকারে এই প্রয়োজনীয়তার একটি সমাধান উপস্থাপন করেছেন: একটি ডাটাবেস ডিজাইন যা কোনও ব্যবহারকারীকে ডাটাবেসের একটি চিত্র পুনরায় তৈরি করতে দেয় কারণ এটি পূর্ববর্তী কোনও বিন্দুতে বিনষ্ট না করেই উপস্থিত ছিল বর্তমান চিত্র

অস্থায়ী ডাটাবেস

উইকিপিডিয়া থেকে, বিনামূল্যে এনসাইক্লোপিডিয়া
টেম্পোরাল ডাটাবেস সময়ের উদাহরণগুলির সাথে সম্পর্কিত ডেটা সঞ্চয় করে। এটি অস্থায়ী ডেটা ধরণের এবং অতীত, বর্তমান এবং ভবিষ্যতের সময় সম্পর্কিত তথ্য সংরক্ষণ করে।

উভয়ের মূল ধারণাটি হ'ল হয় হয় আপনাকে মুছে ফেলা ছাড়াই ডেটা যুক্ত করতে হবে - বা ডেটা এমনভাবে সংরক্ষণ করা উচিত যে আপনি ডাটাটি বর্তমানে বিদ্যমান হিসাবে টানতে পারেন ... অথবা পূর্ববর্তী তারিখের অস্তিত্ব ছিল।

সম্পর্কিত প্রশ্ন এখানে: মাইএসকিএল-এ-পয়েন্ট-ইন-পয়েন্ট-ইন-আর্কিটেকচার-এ ,

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.