কখন একটি ডেটাবেস টেবিল টাইমস্ট্যাম্প ব্যবহার করা উচিত?


18

প্রথম একটি নোট, আমি ভেবেছিলাম সম্ভবত এই প্রশ্নটি ডেটাবেস এক্সচেঞ্জের অন্তর্গত, তবে আমি মনে করি এটি সম্পূর্ণরূপে কোনও প্রোগ্রামিং সমাধানের সাথে ডেটাবেসগুলির চেয়ে বেশি সম্পর্কিত। লোকেরা যদি সেরাটি মনে করে তবে ডাটাবেস এক্সচেঞ্জে চলে যাবে move

আমি ভাবছিলাম কখন একটি ডাটাবেস টেবিলটিতে একটি তৈরি এবং আপডেট হওয়া টাইমস্ট্যাম্প যুক্ত করা উচিত?

প্রথম সুস্পষ্ট উত্তরটি হ'ল যে কোনও ব্যবসায়ের যুক্তি যদি কখন আপডেট হয় (যেমন লেনদেনের সমাপ্তির তারিখ ইত্যাদি) জেনে রাখা দরকার তবে তা অবশ্যই প্রবেশ করতে হবে।

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

এই ব্যবহারের ক্ষেত্রে, প্রতিটি টেবিলকে একটি আপডেট দেওয়া এবং টাইমস্ট্যাম্প তৈরি করা বুদ্ধিমান হবে (সম্ভবত সবচেয়ে তুচ্ছ এনাম টেবিলগুলি যা অ্যাপ্লিকেশনটির কোনও অংশ দ্বারা আপডেট করা হবে না)।

প্রতিটি টেবিলকে একটি টাইমস্ট্যাম্প দেওয়া অবশ্যই একটি ডাটাবেস দ্রুত বগ করার দুর্দান্ত উপায় (যদিও ভুল হতে পারে)।

সুতরাং কখন একটি ডেটাবেস টেবিল ব্যবহার এবং টাইমস্ট্যাম্প আপডেট করা উচিত?


2
আমি মনে করি আপনি ইতিমধ্যে প্রশ্নের উত্তর নিজেই দিয়েছেন। কেবলমাত্র একটি উত্তর দিতে পারে "এটি দৃশ্যের উপর নির্ভর করে"।
ফিলিপ

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

2
আপনি বলছেন যে প্রতিটি টেবিলকে একটি টাইমস্ট্যাম্প দেওয়া নিশ্চয়ই দ্রুত একটি ডাটাবেস বগ করার একটি দুর্দান্ত উপায় , তবে কেন আপনি তা বলবেন না। প্রায় প্রতিটি ডিবিএমএসে একটি টাইমস্ট্যাম্প একটি খুব সামান্য মান - সাধারণত 8 বাইট বা তারও কম। আপনি সূচকগুলি যুক্ত না করলে এটি তুচ্ছ।
রস প্যাটারসন

টাইমস্ট্যাম্পগুলি আপডেট করা হচ্ছে কারণ আমার কাছে একটা পরিবর্তন আসছে। এর অর্থ হ'ল আপনার কাছে রেকর্ডে সাম্প্রতিকতম পরিবর্তনের সময় হবে, আপনি ব্যবসায় যা চান তা হ'ল সমস্ত পরিবর্তনের ইতিহাস থাকা have
পিটার বি

@ পিটারবি কিছু টেবিলের জন্য ইতিহাস রাখার অবশ্যই মূল্য রয়েছে তবে আমি কখনও এমন একটি কেস পাইনি যেখানে আপনি প্রতিটি টেবিলের জন্য এটি করতে চান - ওয়াইএমএমভি।
রবি ডি

উত্তর:


5

একটি আরও ভাল এবং আরও বিস্তৃত ডাটাবেস পরিচালনার জন্য এবং সবচেয়ে বুদ্ধিমান অনুশীলনের জন্য এটি করা।

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

এছাড়াও, যখনই আপনাকে পরিসংখ্যানগত উদ্দেশ্যে আপনার ডাটাবেসে তৈরি করা ক্রিয়াকলাপগুলি ট্র্যাক করতে হবে ।

আরেকটি, এটি প্রায়শই ঘটে যা সম্ভবত আপাতত আপনার ডাটাবেস ক্রিয়াকলাপের উপর নজর রাখার দরকার নেই, তবে ভবিষ্যতে আপনার সম্ভাবনা বেশি থাকে। এটি আজ আপনার সময় প্রয়োজন হবে, তবে ভবিষ্যতে আপনাকে আরও ক্রয় করে


15

এমন একজন হিসাবে যিনি দু'দেশে পোচার (বিকাশকারী) এবং গেমকিপার (ডিবিএ) ছিলেন, আমি অবাক হয়েছি অনেকে এখনও এর মূল্য দেখতে পাচ্ছেন না এবং এটিকে ফুলে ফেঁপে দেখছেন।

সহজভাবে করা:

যে কোনও টেবিলের জন্য যেখানে রেকর্ডগুলি যুক্ত করা হয় (তবে কখনই আপডেট হয় না) যেমন লগইন ইত্যাদি আমি DATE_CREATED কলাম যুক্ত করার বিষয়টি বিবেচনা করব।

যে কোনও টেবিলের জন্য যেখানে রেকর্ডগুলি যুক্ত করা এবং আপডেট করা হয়, আমি একটি DATE_CREATED এবং একটি DATE_UPDATED কলাম যুক্ত করার বিষয়টি বিবেচনা করব।

আমি ডিজাইনের অংশ হিসাবে ডিফল্টরূপে প্রতিটি টেবিলে DATE_CREATED এবং DATE_UPDATED অন্তর্ভুক্ত এমন অনেক জায়গায় কাজ করেছি।

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


6

প্রশ্নটি যেভাবে শব্দযুক্ত, আপনি জিনিসের একটি তালিকা চাইছেন। আমি সরাসরি আপনার প্রশ্নের উত্তর না দিয়ে ঝুঁকির মধ্যে যাচ্ছি, তবে যখন বিকল্প বিকল্পটি ব্যবহার করা উচিত তখন তার উত্তর দিয়ে যাচ্ছি।

আমি পরিস্থিতিতেগুলির বিষয়ে ভাবতে পারি যেখানে ফল্ট সন্ধানে সহায়তা করার জন্য সারিগুলি পরিবর্তিত হওয়ার তারিখের সময়টি জানতে পারা সত্যিই দরকারী হবে

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

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


+1 এটি একটি সাধারণ প্রযুক্তি যা ইতিহাসের টেবিলে রেকর্ডটি ছুঁড়ে ফেলার জন্য টেবিল ট্রিগারগুলির মাধ্যমে কাজে লাগানো যেতে পারে যা ডেল্ট'ড করা যেতে পারে। কিছু আরডিবিএমএস (উদাহরণস্বরূপ ওরাকল এর ফ্ল্যাশব্যাক বৈশিষ্ট্য) সময় প্রশ্নের ক্ষেত্রে পয়েন্ট ব্যবহারের ক্ষেত্রেও সমর্থন করে যেখানে অতীতের কোনও সময়ে তথ্যের অবস্থা পরিদর্শন করা যেতে পারে।
রবি ডি

একটি সহজ সমাধান কি কোনও ক্যোয়ারী সংরক্ষণ করা যা কোনও লগতে আপডেট এবং টেবিল থাকে?
গাজ_এজজ

এটি অন্য একটি উপায় যদিও এটি উচ্চ ভলিউম / আপডেটের ফ্রিকোয়েন্সি সহ টেবিলগুলির পক্ষে অনর্থক হয়ে উঠতে পারে। এটিকে একটি বাহ্যিক টেবিল বানানো কিছু সমস্যার সমাধান করতে পারে যদিও ...
রবি ডি

1

নিম্নলিখিত ডাটাবেসগুলির সত্য হলে একটি ডাটাবেস সারণীতে সৃষ্টি এবং পরিবর্তন টেম্পলেট অন্তর্ভুক্ত করা উচিত:

  1. টেবিলটি কিছু ব্যবহারকারীর সরবরাহিত ক্রিয়াকলাপের প্রাথমিক রেকর্ড উপস্থাপন করে । যদি ব্যবহারকারী এক্স করেন, এবং আপনার এক Table_Xএবং একটি উভয় রয়েছে Table_Yযা একের মধ্যে একাধিক শিশু Table_X, Table_Yএটি প্রাথমিক রেকর্ড নয় এবং তাই অতিরিক্ত ক্ষেত্রের প্রয়োজন নেই।
  2. আপনার জন্য একটি স্থায়ী অস্থায়ী বা আবর্তক প্রয়োজন আছে যখন সিস্টেম ট্র্যাকিং । আপনার যদি Table_Yএমনটি খতিয়ে দেখার প্রয়োজন হয় যে আপডেট হওয়া মাত্র কেবল আপডেট Table_Xহয় তবে অতিরিক্ত ট্র্যাকিং ক্ষেত্রগুলি সহায়তা করতে পারে।

উল্লেখ্য যে এগুলির দুটিই একচেটিয়া নয়; আপনি এগিয়ে যেতে পারেন এবং এগুলি ডিফল্টরূপে যেকোন জায়গায় যুক্ত করতে পারেন এবং পারফরম্যান্স টিউনিংয়ের প্রয়োজন হলে কেবল বাদ দিতে পারেন।


0

নিজস্ব মতামত:

আমি একটি modifiedকলামে মান দেখতে পাচ্ছি না ।

created, একেবারে, প্রতিটি ডাটাবেস সারণিতে যুক্ত করা উচিত যদি না এটি না করার ব্যতিক্রমী যৌক্তিকতা থাকে। এটি আছে সেখানে অনেক মূল্য আছে।

যাইহোক, updatedএকটি অপব্যয় মনে হচ্ছে। কেন কেবল পুরো ছড়িয়ে না গিয়ে দুটি ডাটাবেস টেবিল তৈরি করুন, একটি যা নথির আইডি নির্দিষ্ট করে এবং অন্যটি নথির সংস্করণ। খুব সরল ক্ষেত্রে

create table document (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

create table version (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    document_id INT NOT NULL REFERENCES document(id),
    content TEXT NOT NULL,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

তারপর সর্বশেষ নির্বাচন versionএর documentআপনি চান। এইভাবে, আপনি কেবলমাত্র প্রতিটি পরিবর্তনের তারিখ সংরক্ষণ করেন না - কেবল সর্বশেষটি নয় - আপনি নথির প্রতিটি সংস্করণও রাখেন । এর বিরুদ্ধে কেবলমাত্র যুক্তিটি হ'ল হার্ড ড্রাইভের জায়গা, তবে অবশ্যই আপনি যখন হার্ড ড্রাইভের জায়গাটি ব্যবহার করছেন তা নিয়ে বিরক্ত হয়ে যখন আপনি পৌঁছবেন - বেশিরভাগ ক্ষেত্রে আপনি ডেটা সংস্করণে আরও বিরক্ত হবেন

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