Histতিহাসিক ডেটা কীভাবে সংরক্ষণ করবেন


162

কিছু সহকর্মী এবং আমি historicalতিহাসিক ডেটা সঞ্চয় করার সর্বোত্তম উপায় নিয়ে বিতর্কে জড়িয়ে পড়েছি। বর্তমানে কিছু সিস্টেমের জন্য, আমি historicalতিহাসিক ডেটা সঞ্চয় করার জন্য একটি পৃথক টেবিল ব্যবহার করি এবং আমি বর্তমান, সক্রিয় রেকর্ডের জন্য একটি মূল টেবিল রাখি। সুতরাং, ধরা যাক আমার কাছে টেবিল এফও আছে। আমার সিস্টেমের অধীনে, সমস্ত সক্রিয় রেকর্ডগুলি এফওতে চলে যাবে, এবং সমস্ত recordsতিহাসিক রেকর্ডগুলি এফইওহাইস্টে যাবে। এফইও-র বিভিন্ন ক্ষেত্রে ক্ষেত্রটি ব্যবহারকারী আপডেট করতে পারে, তাই আমি আপডেট হওয়া সমস্ত কিছুর একটি সঠিক অ্যাকাউন্ট রাখতে চাই want একটি স্বয়ংক্রিয়-বৃদ্ধিকারী HIST_ID ব্যতীত এফইউইহিস্ট এফইও-র ঠিক একই ক্ষেত্র ধারণ করে। প্রতিবার এফইও আপডেট করা হলে, আমি এফও_এইচএস্টের মতো সন্নিবেশ বিবৃতিটি সম্পাদন করি:insert into FOO_HIST select * from FOO where id = @id

আমার সহকর্মী বলছেন যে এটি খারাপ নকশা কারণ Iতিহাসিক কারণে আমার কোনও টেবিলের সঠিক কপি থাকা উচিত নয় এবং এটি সক্রিয় টেবিলের সাথে অন্য একটি রেকর্ড সন্নিবেশ করা উচিত যাতে এটি চিহ্নিত করা হয় যে এটি forতিহাসিক উদ্দেশ্যে রয়েছে।

Historicalতিহাসিক ডেটা স্টোরেজ মোকাবেলার জন্য কি কোনও মানদণ্ড রয়েছে? এটি আমার কাছে মনে হয় যে আমি দশ লক্ষেরও বেশি রেকর্ড (আমি দীর্ঘমেয়াদে ভাবছি) এর চেয়ে ভাল হতে পারে তা বিবেচনা করে একই সারণীতে আমার সমস্ত historicalতিহাসিক রেকর্ডের সাথে আমার সক্রিয় রেকর্ডগুলি বিশৃঙ্খলা করতে চাই না।

আপনি বা আপনার সংস্থা কীভাবে এটি পরিচালনা করবেন?

আমি এমএস এসকিউএল সার্ভার ২০০৮ ব্যবহার করছি তবে আমি উত্তরটি জেনেরিক এবং যে কোনও ডিবিএমএসের স্বেচ্ছাসেবী রাখতে চাই।

উত্তর:


80

অপারেশনাল সিস্টেমের মধ্যে সরাসরি historicalতিহাসিক ডেটা সমর্থন করা আপনার অ্যাপ্লিকেশনটিকে অন্যথায় যা হবে তার চেয়ে অনেক জটিল করে তুলবে। সাধারণত, যদি না আপনি সিস্টেমের মধ্যে রেকর্ডের historicalতিহাসিক সংস্করণগুলি হেরফের করার জন্য কঠোর প্রয়োজন না হয় তবে আমি তা করার পরামর্শ দিচ্ছি না।

আপনি যদি ঘনিষ্ঠভাবে তাকান, historicalতিহাসিক তথ্যগুলির জন্য বেশিরভাগ প্রয়োজনীয়তা দুটি বিভাগের মধ্যে একটিতে পড়ে:

  • নিরীক্ষণ লগিং: নিরীক্ষার টেবিলগুলি দিয়ে এটি ভাল করা হয়। সিস্টেম ডেটা অভিধান থেকে মেটাডেটা পড়ে অডিট লগ টেবিল তৈরির জন্য স্ক্রিপ্ট তৈরি করতে এবং ট্রিগারগুলি তৈরি করার সরঞ্জামটি মোটামুটি সহজ। এই ধরণের সরঞ্জাম বেশিরভাগ সিস্টেমে অডিট লগিং পুনঃনির্মাণের জন্য ব্যবহার করা যেতে পারে। আপনি যদি ডেটা গুদাম বাস্তবায়ন করতে চান তবে নীচে পরিবর্তিত ডেটা ক্যাপচারের জন্যও এই সাবসিস্টেমটি ব্যবহার করতে পারেন (নীচে দেখুন)।

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

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

যদি আপনার প্রয়োজনীয়তাগুলি এই দুটি বিভাগের একটির মধ্যে পড়ে তবে আপনি সম্ভবত আপনার অপারেটিং সিস্টেমে historicalতিহাসিক ডেটা সংরক্ষণ না করা থেকে ভাল। Subsতিহাসিক কার্যকারিতাটিকে অন্য উপ-সিস্টেমে পৃথক করা সম্ভবত সামগ্রিকভাবে কম প্রচেষ্টা হবে এবং লেনদেনের এবং নিরীক্ষণ / রিপোর্টিং ডাটাবেসগুলি তৈরি করবে যা তাদের উদ্দেশ্যযুক্ত উদ্দেশ্যে আরও ভাল কাজ করে।


আমি মনে করি আপনি যা বলছেন তা আমি দেখছি। সুতরাং আমি আমার FOO_Hist টেবিলটি দিয়ে যা করেছি তা হ'ল সত্যই একটি অডিট টেবিল তৈরি করা হয়েছিল। আপডেটে নিরীক্ষণ টেবিলটিতে সন্নিবেশ করানোর জন্য ট্রিগার ব্যবহার করার পরিবর্তে আমি প্রোগ্রামটিতে একটি বিবৃতি চালিয়েছি। এটা কি ঠিক?
হারুন

6
যথেষ্ট. ট্রিগারদের সাথে এই ধরণের নিরীক্ষণ লগিং করা ভাল; ট্রিগাররা নিশ্চিত করে যে কোনও পরিবর্তন (ম্যানুয়াল ডেটা ফিক্স সহ) নিরীক্ষণ লগগুলিতে রেকর্ড হয়ে গেছে। আপনি যদি নিরীক্ষণের জন্য 10-20 টিরও বেশি টেবিল পেয়ে থাকেন তবে ট্রিগার জেনারেটর সরঞ্জামটি তৈরি করা সম্ভবত সর্বোপরি দ্রুত। অডিট লগগুলির জন্য ডিস্ক ট্র্যাফিক যদি সমস্যা হয় তবে আপনি অডিট লগ টেবিলগুলিকে ডিস্কের একটি পৃথক সেটটিতে রাখতে পারেন।
কনসার্নড

হ্যাঁ, আমি এর সাথে 100% একমত ধন্যবাদ.
হারুন

40

আমি মনে করি না এটি করার কোনও নির্দিষ্ট স্ট্যান্ডার্ড উপায় আছে তবে আমি ভেবেছিলাম আমি একটি সম্ভাব্য পদ্ধতিতে ফেলে দেব। আমি ওরাকল এবং আমাদের ইন-হাউস ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্কে কাজ করি যা অ্যাপ্লিকেশন ডেটা সংরক্ষণের জন্য এক্সএমএল ব্যবহার করে।

আমরা মাস্টার নামক কিছু ব্যবহার করি - বিস্তারিত মডেল যা এর মধ্যে সবচেয়ে সহজ থাকে:

উদাহরণস্বরূপ মাস্টার সারণীWidgets প্রায়শই কেবল একটি আইডি থাকে called প্রায়শই এমন ডেটা থাকবে যা সময়ের সাথে পরিবর্তন হবে না / .তিহাসিক নয়।

বিশদ / ইতিহাস সারণী উদাহরণস্বরূপ Widget_Detailsঅন্তত:

  • আইডি - প্রাথমিক কী। বিস্তারিত / .তিহাসিক আইডি
  • MASTER_ID - উদাহরণস্বরূপ 'WIDGET_ID' নামে পরিচিত এই ক্ষেত্রে এটি মাস্টার রেকর্ডের এফকে
  • START_DATETIME - টাইমস্ট্যাম্প সেই ডাটাবেস সারিটির সূচনা করে
  • END_DATETIME - টাইমস্ট্যাম্পটি সেই ডাটাবেস সারিটির সমাপ্তি নির্দেশ করে
  • STATUS_CONTROL - সারিটির একক চর কলাম নির্দেশিত স্থিতি। 'সি' বর্তমান সূচিত করে, NULL বা 'A' historicalতিহাসিক / সংরক্ষণাগারভুক্ত হবে। আমরা কেবল এটি ব্যবহার করি কারণ আমরা END_DATETIME NULL থাকার কারণে সূচী করতে পারি না
  • CREATED_BY_WUA_ID - সারি তৈরি হওয়ার কারণে অ্যাকাউন্টটির আইডি সংরক্ষণ করে
  • এক্সএমএলডাটা - আসল ডেটা সঞ্চয় করে

সুতরাং মূলত, কোনও সত্তা মাস্টারটিতে 1 সারি এবং বিশদটিতে 1 সারি থাকা শুরু করে। একটি নুল সমাপ্তির তারিখ এবং 'সি' এর STATUS_CONTROL বিশদ রয়েছে। যখন কোনও আপডেট হয়, বর্তমান সারিটি বর্তমান সময়ের END_DATETIME এ আপডেট হয় এবং স্থিতি_কন্ট্রোলটি NULL এ সেট করা হয় (বা পছন্দ হলে 'এ')। এক্সেসডিটাল কন্ট্রোল 'সি' সহ, একই মাস্টারের সাথে লিংক বিশিষ্ট সারণিতে একটি নতুন সারি তৈরি করা হয়েছে, এক্সএমএলডিএটি কলামে সঞ্চিত নতুন ডেটা আপডেট করা ব্যক্তির আইডি এবং নতুন ডেটা।

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

স্টোরেজ সস্তা, আমরা সাধারণত ডেটা মুছে ফেলি না এবং নিরীক্ষণের ট্রেইল রাখতে পছন্দ করি না। এটি আমাদের যে কোনও সময় আমাদের ডেটা কেমন দেখায় তা দেখতে দেয়। স্ট্যাটাস_কন্ট্রোল = 'সি' ইনডেক্স করে বা ভিউ ব্যবহার করে বিশৃঙ্খলা ঠিক কোনও সমস্যা নয়। স্পষ্টতই আপনার প্রশ্নের অ্যাকাউন্টগুলিতে নেওয়া উচিত আপনার সর্বদা একটি রেকর্ডের বর্তমান (NULL শেষ_ তারিখ এবং স্ট্যাটাস_কন্ট্রোল = 'সি') সংস্করণটি ব্যবহার করা উচিত।


হাই ক্রিস, আপনি যদি তা করেন, আইডি (প্রাথমিক কী) অবশ্যই ঠিক পরিবর্তন করা উচিত? অন্য টেবিলের সাথে যদি এটি অন্য কোনও ব্যবহার করে তবে কীভাবে সম্পর্কিত?
প্রোজো

@ মাস্টার টেবিলে থাকা আইডি হ'ল পিকে এবং ধারণাটি আপনি যে ধারণার সাথে লেনদেন করছেন তার ধারণার জন্য "পিকে"। মাস্টারটির জন্য historicalতিহাসিক সংস্করণ সনাক্ত করার জন্য বিশদ টেবিলের আইডি হ'ল পিকে (যা বিশদটির আরও একটি কলাম)। সম্পর্ক গঠনের সময় আপনি প্রায়শই আপনার ধারণার আসল পিকে (যেমন আপনার মাস্টার টেবিলের আইডি বা আপনার বিশদটিতে MASTER_ID কলাম) উল্লেখ করতে পারেন এবং আপনি বর্তমান সংস্করণ পাচ্ছেন কিনা তা নিশ্চিত করতে STATUS_CONTROL = 'C' ব্যবহার করুন। বিকল্পভাবে আপনি কিছু নির্দিষ্ট সময়ে নির্দিষ্ট সময়ে সম্পর্কিত আইডিটি উল্লেখ করতে পারেন।
ক্রিস ক্যামেরন-মিলস

+1 আমি বেশ কয়েকটি বড় প্রকল্পে দুর্দান্ত সাফল্যের সাথে এই প্যাটার্নটি প্রয়োগ করেছি।
তিনটি মান যুক্তি

আমরা একই অ্যাপ্রোচ ব্যবহার করছি ut তবে এখন আমি ভাবছি যে কেবলমাত্র START_DATETIME সংরক্ষণ করা এবং সঞ্চয় না করা ভাল
END_ END_ATATIME

আমার অভিজ্ঞতার মধ্যে কয়েকটা ভিন্নতা। যদি আপনার সত্তাটি "সমাপ্ত" হয়, যেমন সংরক্ষণাগারবদ্ধ বা মুছে ফেলা হয় তবে কার্যকরভাবে আপনার 'সি' স্থিতি নিয়ন্ত্রণের সাথে কোনও বিশদ রেকর্ড থাকতে পারে না, অর্থাত্ কোনও বর্তমান সারি নেই, যদিও তা কখনই ঘটেছিল তা আপনি জানেন না। বিকল্পভাবে, আপনি চূড়ান্ত সারিতে একটি end_datetime সেট করতে পারেন এবং একটি 'সমাপ্ত' 'সি' সারির উপস্থিতি ইঙ্গিতটি এখন মুছে ফেলা / সংরক্ষণাগারভুক্ত হতে পারে। অবশেষে, আপনি অন্য কলাম STATUS এর মাধ্যমে এটি উপস্থাপন করতে পারেন যা আপনার সম্ভবত ইতিমধ্যে থাকতে পারে।
ক্রিস ক্যামেরন-মিলস

15

আমি মনে করি আপনার কাছে যোগাযোগ সঠিক। Tableতিহাসিক টেবিলটি সূচি ছাড়াই মূল টেবিলের একটি অনুলিপি হওয়া উচিত, আপনার সারণীতেও আপডেট টাইমস্ট্যাম্প রয়েছে কিনা তা নিশ্চিত করুন।

যদি আপনি অন্যান্য পদ্ধতির খুব শীঘ্রই চেষ্টা করেন তবে আপনি সমস্যার মুখোমুখি হবেন:

  • ওপরে রক্ষণাবেক্ষণ
  • নির্বাচিত আরও পতাকা
  • প্রশ্ন মন্দা
  • সারণী, সূচকের বৃদ্ধি

7

ইন SQL সার্ভার 2016 এবং উপরোক্ত সেখানে নামক একটি নতুন বৈশিষ্ট্য টেম্পোরাল টেবিল লক্ষ্য সঙ্গে এই চ্যালেঞ্জটি সমাধান যে বিকাশকারীর কাছ থেকে সংক্ষিপ্ত প্রচেষ্টার । টেম্পোরাল টেবিলের ধারণাটি চেঞ্জ ডেটা ক্যাপচারের (সিডিসি) অনুরূপ, এই পার্থক্যের সাথে যে টেম্পোরাল টেবিলটি আপনাকে সিডিসি ব্যবহার করতে থাকলে ম্যানুয়ালি করতে হবে এমন বেশিরভাগ জিনিসকে বাতিল করে দিয়েছে।


2

ডেটা ক্যাপচার পরিবর্তন করুন: https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-2017

এটি এসকিউএল সার্ভার ২০০৮ আর 2 এ সমর্থিত, এটি এসকিউএল সার্ভার ২০০৮-এ সমর্থিত হতে পারে।


নোট করুন যে পরিবর্তন ডেটা ক্যাপচার কেবলমাত্র ইতিহাসের ইতিহাসের সংক্ষিপ্ত সঞ্চয় করার জন্য for দেখুন SQL সার্ভার টেম্পোরাল টেবিল বনাম পরিবর্তন ডেটা ক্যাপচার বনাম ট্র্যাকিং পরিবর্তন
এডওয়ার্ড ব্রে


1

আমি কেবল একটি বিকল্প যুক্ত করতে চেয়েছিলাম যা আমি ব্যবহার শুরু করেছি কারণ আমি আজুর এসকিউএল ব্যবহার করি এবং একাধিক টেবিল জিনিসটি আমার পক্ষে উপায় ছিল খুব জটিল। আমি আমার টেবিলে একটি সন্নিবেশ / আপডেট / মুছুন ট্রিগার যুক্ত করেছি এবং তারপরে "JSON অটো" জন্য বৈশিষ্ট্যটি ব্যবহার করে পরিবর্তনের আগে / পরে জসনে রূপান্তর করেছি।

 SET @beforeJson = (SELECT * FROM DELETED FOR JSON AUTO)
SET @afterJson = (SELECT * FROM INSERTED FOR JSON AUTO)

এটি পরিবর্তনের আগে / পরে রেকর্ডের জন্য একটি JSON প্রতিনিধিত্ব করে returns তারপরে পরিবর্তনগুলি কখন ঘটেছিল তার টাইমস্ট্যাম্প সহ আমি ইতিহাস মানের টেবিলে এই মানগুলি সংরক্ষণ করি (আমি উদ্বেগের বর্তমান রেকর্ডের জন্য আইডিও সঞ্চয় করি)। সিরিয়ালাইজেশন প্রক্রিয়াটি ব্যবহার করে, আমি স্কিমায় পরিবর্তনগুলির ক্ষেত্রে কীভাবে ডেটা ব্যাকফিল হয় তা নিয়ন্ত্রণ করতে পারি।

আমি এখানে এই লিঙ্ক থেকে এই সম্পর্কে শিখেছি


0

আপনি কি টেবিলের পার্টিশন করতে পারবেন?

"এসকিউএল সার্ভার ২০০৮ ব্যবহার করে পার্টিশনযুক্ত টেবিল এবং সূচক কৌশলগুলি যখন একটি ডাটাবেস টেবিল আকারে কয়েকশ গিগাবাইট বা তার বেশি বৃদ্ধি পায়, তখন নতুন ডেটা লোড করা, পুরানো ডেটা মুছে ফেলা এবং সূচি বজায় রাখা আরও কঠিন হয়ে উঠতে পারে the টেবিলের নিছক আকার এ জাতীয় ক্রিয়াকলাপগুলিকে আরও বেশি সময় নিতে পারে Even এমনকি যে ডেটাটি লোড বা অপসারণ করতে হবে তা খুব বড় আকারের হতে পারে, যা টেবিলে INSERT এবং মুছে ফেলতে অপারেশনটিকে অকারণীয় করে তোলে The


হ্যাঁ, আমি টেবিলগুলি পার্টিশন করতে পারি, তবে historicalতিহাসিক ডেটাগুলির সাথে লেনদেন করার সময় এটি কি আদর্শ? সক্রিয় তথ্য হিসাবে dataতিহাসিক তথ্য একই টেবিলে অন্তর্ভুক্ত করা উচিত? এই যে প্রশ্নগুলি আমি আলোচনা করতে চেয়েছিলেন। এটাও না নির্বিচারে যেমন SQL সার্ভার সংক্রান্ত 2008. হয়
হারুন

0

আসল প্রশ্নটি কি প্রতিবেদনের জন্য আপনার একসাথে historicalতিহাসিক ডেটা এবং সক্রিয় ডেটা ব্যবহার করা দরকার? যদি তা হয় তবে তাদের এক টেবিলের মধ্যে রাখুন, পার্টিশন করুন এবং সক্রিয় প্রশ্নের মধ্যে সক্রিয় রেকর্ডগুলির জন্য একটি ভিউ তৈরি করুন। আপনার যদি কেবলমাত্র মাঝে মাঝে সেগুলি দেখার দরকার হয় (লিগাল ইস্যুগুলি বা এরকম কিছু গবেষণা করার জন্য) তবে সেগুলি একটি আলাদা টেবিলে রাখুন।


2
JOINএকটি যুগল historicalতিহাসিক প্রতিবেদনে দুটি টেবিলের পক্ষে কি আরও বেশি কঠিন বা singleতিহাসিক উদ্বেগ সম্পর্কে সচেতন হওয়ার জন্য প্রতিটি একক সারণি সন্নিবেশ / আপডেট / মুছতে পরিবর্তন করা আরও বেশি কঠিন? প্রকৃতপক্ষে, একটি অডিট লগ ইতিহাসের সারণীতে এমনকি বর্তমান তথ্য অন্তর্ভুক্ত করবে, সুতরাং একটি প্রতিবেদনে বর্তমান সারণীটিরও প্রয়োজন হবে না।

0

আর একটি বিকল্প হ'ল [দৈনিক | প্রতি ঘণ্টায় | যাই হোক না কেন] ভিত্তিতে অপারেশনাল ডেটা সংরক্ষণাগার। বেশিরভাগ ডাটাবেস ইঞ্জিন একটি সংরক্ষণাগারে ডেটা উত্তোলনের পক্ষে সমর্থন করে

মূলত, ধারণাটি হল একটি নির্ধারিত উইন্ডোজ বা সিআরএন কাজ তৈরি করা

  1. অপারেশনাল ডাটাবেসে বর্তমান সারণীগুলি নির্ধারণ করে
  2. প্রতিটি টেবিল থেকে সমস্ত ডেটা সিএসভি বা এক্সএমএল ফাইলে নির্বাচন করে
  3. সহজেই সংরক্ষণাগারভুক্ত করার জন্য ফাইলের জেনারেশনের টাইমস্ট্যাম্পের সাথে রফতানি করা তথ্য একটি জিপ ফাইলে সংকুচিত করে।

অনেক এসকিউএল ডাটাবেস ইঞ্জিন একটি সরঞ্জাম নিয়ে আসে যা এই উদ্দেশ্যে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, লিনাক্সে মাইএসকিউএল ব্যবহার করার সময়, নিম্নলিখিত কমান্ডটি নিষিদ্ধকরণের সময় নির্ধারণের জন্য সিআরএন জব ব্যবহার করা যেতে পারে:

mysqldump --all-databases --xml --lock-tables=false -ppassword | gzip -c | cat > /media/bak/servername-$(date +%Y-%m-%d)-mysql.xml.gz

2
এটি historicalতিহাসিক তথ্যের জন্য মোটেই উপযুক্ত নয় কারণ যদি কেউ কোনও মান পরিবর্তন করে এবং সংরক্ষণাগার চক্রের মধ্যে এটি পরিবর্তন করে তবে আপডেটগুলি হারিয়ে যায়। সময়ের সাথে সাথে একটি সত্তায় পরিবর্তনগুলি দেখার বা আংশিকভাবে কোনও সত্তা পুনরুদ্ধার করার সহজ উপায়ও নেই।
Sgoettschkes

0

আমি এই পুরাতন পোস্টটি জানি তবে কেবল কয়েকটি পয়েন্ট যুক্ত করতে চেয়েছি। এই ধরনের সমস্যার স্ট্যান্ডার্ড হ'ল যা পরিস্থিতির জন্য সবচেয়ে ভাল কাজ করে। এই জাতীয় সঞ্চয়স্থানের প্রয়োজনীয়তা এবং understandingতিহাসিক / নিরীক্ষণ / ট্র্যাকিং ট্র্যাকিংয়ের ডেটা ব্যবহারের সম্ভাব্য ব্যবহার বোঝা।

নিরীক্ষণ (সুরক্ষার উদ্দেশ্য) : আপনার সমস্ত শ্রুতিমুক্ত টেবিলের জন্য একটি সাধারণ টেবিল ব্যবহার করুন। মানের আগে এবং মান ক্ষেত্রের পরে কলামের নাম সঞ্চয় করতে কাঠামো নির্ধারণ করুন।

সংরক্ষণাগার / orতিহাসিক: পূর্ববর্তী ঠিকানা, ফোন নম্বর ইত্যাদি ট্র্যাক করার মতো ক্ষেত্রে পৃথক টেবিল তৈরি করা FOO_HIST আপনি যদি আপনার সক্রিয় লেনদেনের টেবিল স্কিমা ভবিষ্যতে উল্লেখযোগ্যভাবে পরিবর্তন না করেন তবে (যদি আপনার ইতিহাসের টেবিলে একই কাঠামো থাকতে হয়)। আপনি যদি টেবিলের নরমালাইজেশন, ডেটাটাইপ পরিবর্তন / কলামগুলি অপসারণের প্রত্যাশা করেন, আপনার historicalতিহাসিক ডেটা এক্সএমএল ফর্ম্যাটে সংরক্ষণ করুন। নিম্নলিখিত কলামগুলির সাথে একটি সারণী নির্ধারণ করুন (আইডি, তারিখ, স্কিমা সংস্করণ, এক্সএমএলডাটা)। এটি সহজেই স্কিমা পরিবর্তনগুলি পরিচালনা করবে। তবে আপনাকে এক্সএমএল মোকাবেলা করতে হবে এবং এটি ডেটা পুনরুদ্ধারের জন্য জটিলতার একটি স্তর প্রবর্তন করতে পারে।



0

আপনি টেবিলের উপর একটি উপাদানযুক্ত / সূচিযুক্ত ভিউ তৈরি করতে পারেন। আপনার প্রয়োজনের ভিত্তিতে আপনি দর্শনগুলির সম্পূর্ণ বা আংশিক আপডেট করতে পারেন। দর্শন এবং লগ তৈরি করতে দয়া করে এটি দেখুন। কীভাবে এসকিউএল সার্ভারে প্রকৃত দৃশ্য তৈরি করবেন?

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