ডাটাবেস এন্ট্রি (ডেটা) এর সংস্করণ অনুমোদনের উপায়গুলি কী কী?
নিবন্ধগুলির পরিবর্তনগুলি ফিরিয়ে আনতে কন্টেন্ট-ম্যানেজমেন্ট-সিস্টেমের দক্ষতার কথা চিন্তা করুন।
তাদের পক্ষে কি ভাল?
ডাটাবেস এন্ট্রি (ডেটা) এর সংস্করণ অনুমোদনের উপায়গুলি কী কী?
নিবন্ধগুলির পরিবর্তনগুলি ফিরিয়ে আনতে কন্টেন্ট-ম্যানেজমেন্ট-সিস্টেমের দক্ষতার কথা চিন্তা করুন।
তাদের পক্ষে কি ভাল?
উত্তর:
মূলত দুটি পন্থা রয়েছে: একটি অডিট টেবিল, এতে পূর্ববর্তী সমস্ত মানগুলি সঞ্চিত থাকে বা সারণীর অংশ হিসাবে একটি সূচনা / শেষের তারিখ অন্তর্ভুক্ত করে এবং সমস্ত আপডেট পুরানোটিকে বন্ধ করে দেওয়ার সময় একটি নতুন রেকর্ড তৈরি করে।
আপডেট: এসকিউএল সার্ভার ২০১ এটিকে ডিজাইনের প্যাটার্ন / টেবিল প্রকার হিসাবে সমর্থন করে - https://docs.microsoft.com/en-us/sql/relational-datিয়া
একটি ধারণা হ'ল "সন্নিবেশ-কেবল ডাটাবেসগুলি" ব্যবহার করা। মূল ধারণাটি হ'ল আপনি কখনই কোনও সারিতে ডেটা মুছবেন না বা আপডেট করবেন না ।
প্রতিটি টেবিল যা ট্র্যাক করা প্রয়োজন সেখানে দুটি datetime
কলাম from
এবং থাকবে to
। তারা NULL
প্রতিটি মান দিয়ে শুরু (সময়ের শেষ সময় শুরু)। আপনার যখন সারিটি "পরিবর্তন" করতে হবে তখন আপনি একটি নতুন সারি যুক্ত করবেন এবং একই সাথে আপনি to
আগের সারিটিতে Now
এবং from
যে সারিতে আপনি যুক্ত করছেন তাতে আপডেট করুন Now
।
আরও বিস্তারিত তথ্যের জন্য এখানে দেখুন:
এই কৌশলটি AuditTrail
লিগ্যাসির ডেটা পরিচালনা করার জন্য বলা হয় এবং এর কিন্ডার স্টোরগুলি ইতিহাস পরিবর্তন করে।
দেখে মনে হচ্ছে এই প্রকৃতির প্রশ্নটি ইতিমধ্যে পোস্ট করা হয়েছে:
আমি মনে করি আপনি প্রতিটি টেবিলের জন্য ট্রিগারগুলি ব্যবহার করতে পারেন এবং _ ইতিহাসের (বা আপনি কোনও নাম দিতে পারেন) ডেটা বজায় রাখতে পারবেন এবং প্রতিটি সন্নিবেশ করাতে, আপডেট করুন, মুখ্য টেবিলের উপর মুছে ফেলা আপনার ট্রিগারকে ট্রিগার করবে এবং আপনি এই টেবিলের বিশদটি সংরক্ষণ করতে পারবেন rig ট্রিগার প্রক্রিয়া আপনি যদি এসকিউএলাইট ডাটাবেস ব্যবহার করেন তবে তা উপলব্ধ।
এই প্রক্রিয়াটি বড় প্রকল্পগুলির জন্যও কার্যকর। এই সারণীতে আপনি ব্যবহারকারীর তথ্য লগ করতে পারেন যারা পরিবর্তনের সময়-স্ট্যাম্পের সাথে পরিবর্তন করেছেন। তারপরে আপনি আপনার প্রয়োজনীয়তার সাথে মেলে এমন কোনও টাইম-স্ট্যাম্পের সাথে আপনার টেবিলটি পুনরুদ্ধার করতে পারেন।
প্রতিটি ডাটাবেসের নিজস্ব লেখার কোড এবং কোড ট্রিগার থাকে। যদি আপনি এসকিউএলাইট ব্যবহার করে থাকেন তবে সিনট্যাক্সের জন্য এসকিউএলটি.আর যান । অন্যান্য ডাটাবেসের জন্য আপনি তাদের অফিসিয়াল সাইটগুলি দেখতে পারেন।
আপনি সম্ভবত স্ক্লাইট ডিবি ইঞ্জিন সম্পর্কে সচেতন । পুরো ডিবি একক ফাইলে সংরক্ষণ করা হয়। এপিআই ভার্চুয়াল ফাইল সিস্টেমগুলিকেও সমর্থন করে তাই মূলত আপনি যে কোনও জায়গায় এবং যে কোনও বিন্যাসের সাথে স্টোরেজটি সংগঠিত করতে পারেন, কেবল নির্দিষ্ট ফাইল অফসেটগুলিতে অপারেশন পড়তে এবং লিখতে প্রতিক্রিয়া জানান। এর জন্য সম্ভাব্য অ্যাপ্লিকেশনগুলি এনক্রিপশন, সংক্ষেপণ এবং এগুলি হতে পারে। এটির সর্বোত্তম অংশটি যা ধারক স্তরটি ডাটাবেস, স্কয়ার বা স্ক্লাইট ফাইল ফর্ম্যাট সম্পর্কে কিছু জানতে না পারে, কেবলমাত্র xRead এবং xWrite কলব্যাকগুলি মান্য করে।
অন্যতম ধারণা ছিল সময়-মেশিন বৈশিষ্ট্যটি বাস্তবায়ন করা। সুতরাং যে কোনও এক্স রাইট অপারেশন প্রতিটি বিভাগকে সংরক্ষণ করে এটি "পূর্বাবস্থায়িত করা" ইতিহাসে ওভাররাইট হবে এবং ব্যবহারকারী কী অতীতে ডিবি রয়েছে তা দেখতে সম্ভবত একটি তারিখ চয়ন করতে পারে (সম্ভবত কেবলমাত্র পঠন মোড)। আমার এখনও কার্যকরী উদাহরণ নেই ( স্ক্লাইট মেল তালিকায় এটি সম্পর্কে একটি আলোচনা ছিল ), তবে সম্ভবত অন্যান্য ইঞ্জিনগুলি ভিএফএস এপিআই সরবরাহ করে যাতে অনুরূপ কিছু সম্ভব হয়। এবং একবার এটি প্রয়োগ করা হলে, এটি কোনও জটিলতার ডাটাবেস কাঠামোর সাথে সামঞ্জস্য করা উচিত।
ডাটাবেস এন্ট্রিগুলির সংস্করণ করার জন্য আমরা যে পদ্ধতিটি ব্যবহার করি তা হ'ল অডিটিং টেবিলটি ব্যবহার করা। টেবিলে লাইন বরাবর একটি স্কিমা রয়েছে:
Seq - Int ' Unique identifier for this table
Event - Char ' Insert / Update / Delete
TblName - Char ' Table that had field value changed
FldName - Char ' Field that was changed
KeyValue - Char ' delimited list of values for fields that make up the PK of table changed
UsrId - Char ' User who made the change
OldValue - Char ' Old value (converted to character)
NewValue - Char ' New value (converted to character)
AddTs - DateTime ' When the change was made
এরপরে আমরা যে সারণীগুলি ট্র্যাক করতে চাই সেগুলি সন্নিবেশ / আপডেট / মুছতে ট্রিগার করেছি।
পেশাদাররা:
কনস:
আমি এখন এটির একটি সংস্করণ করছি। প্রতিটি রেকর্ডের জন্য আমার কাছে একটি Dateোকানো তারিখ, পরিবর্তিত তারিখ এবং সক্রিয় রেকর্ডের বুলিয়ান পতাকা রয়েছে। প্রাথমিক সন্নিবেশের জন্য sertedোকানো এবং পরিবর্তিত তারিখগুলি উভয়ই এখন () এ সেট করা আছে (এই উদাহরণটি অ্যাক্সেসে রয়েছে) এবং সক্রিয় রেকর্ড পতাকাটি সেট করা আছে true
। তারপরে যদি আমি সেই রেকর্ডটি সংশোধন করি তবে ব্যবহারকারী পুরো ক্ষেত্র (গুলি) পরিবর্তন করে নতুন রেকর্ডে পুরো জিনিসটি অনুলিপি করে রাখি, আমি সন্নিবেশের তারিখটিকে মূলের সমান ছেড়ে দেব এবং পরিবর্তিত তারিখটি এখন () এ পরিবর্তন করব। আমি তারপরে মূল রেকর্ডটির সক্রিয় রেকর্ড পতাকাটি false
এবং নতুন রেকর্ডটিতে ফ্লিপ করি true
। আমার কাছে ModifiedRecordsParentID এর জন্যও একটি ক্ষেত্র রয়েছে যেখানে আমি মূল রেকর্ডের পরিচয় সংরক্ষণ করি।
তারপরে যদি আমার এমনকি জিজ্ঞাসা করার দরকার হয় তবে আমি কেবল রেকর্ডগুলি ফিরিয়ে দিতে ActiveRecord = true
পারি যেখানে এবং আমি কেবল সর্বাধিক টু ডেট তথ্য পেতে পারি।
ActiveRecord
পতাকার দরকার নেই । MAX (*) সারিটি সর্বদা বর্তমান রেকর্ড হওয়া উচিত। পূর্ববর্তী সংস্করণে পুনরুদ্ধার করা সারণীতে আবার সারণিতে আবার সন্নিবেশ করানো হয়।
select top 1 order by id descending
করবে।
এছাড়াও, আপনি যদি সময়ের সাথে সাথে ডিবিতে সমস্ত পরিবর্তন সঞ্চয় করতে চান তবে আপনি লগিং চেক আউট করতে পারেন ( /programming/3394132/ कहीं-can-i-find-the-mysql-transaction- log )