এসকিউএল ট্রিগার এবং কখন বা কখন তাদের ব্যবহার করবেন না।


43

আমি যখন এসকিউএল সম্পর্কে প্রাথমিকভাবে শিখছিলাম তখন আমাকে সর্বদা বলা হয়েছিল, কেবল যদি আপনার সত্যিই প্রয়োজন হয় তবে ট্রিগারগুলি ব্যবহার করুন এবং যদি সম্ভব হয় তবে পরিবর্তে সঞ্চিত পদ্ধতি ব্যবহার করতে চান opt

এখন দুর্ভাগ্যক্রমে সেই সময়ে (বেশ কয়েক বছর আগে ভাল) আমি মৌলিক বিষয়ে এতটা কৌতূহলী ও যত্নবান ছিলাম না, কারণ এখনকার কারণটি কখনই জিজ্ঞাসা করিনি।

এতে সম্প্রদায়ের মতামত কী? এটি কি কেবল কারও ব্যক্তিগত পছন্দ, বা তাদের পক্ষে কোনও ভাল কারণ না থাকলে ট্রিগারগুলি এড়ানো উচিত (যেমন কার্সারের মতো)।


উত্তর:


32

ডাটাবেসের ট্রিগার উইকিপিডিয়ার নিবন্ধ উপহার কি ট্রিগার হয় একটি ভাল ওভারভিউ এবং যখন তাদের বিভিন্ন ডাটাবেস ব্যবহার করতে।

নিম্নলিখিত আলোচনাটি কেবল এসকিউএল সার্ভারের উপর ভিত্তি করে।

ট্রিগারগুলি ব্যবহারের ক্ষেত্রে বৈধতা কার্যকর হয় jus উদাহরণস্বরূপ, প্রতিটি টেবিলে প্রতিটি CRUD কমান্ডের সাথে সুস্পষ্ট পদ্ধতিগত কোডের প্রয়োজন ছাড়াই অডিটিংয়ে (ডেটার ইতিহাস সংরক্ষণের) তাদের ভাল মান রয়েছে।

ট্রিগাররা ডেটা পরিবর্তনের ঠিক আগে এবং ডেটা পরিবর্তনের ঠিক পরে আপনাকে নিয়ন্ত্রণ দেয়। এটি এর জন্য অনুমতি দেয়:

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

আমাকে সর্বদা বলা হয়েছিল, কেবলমাত্র যদি আপনার প্রয়োজন হয় তবে ট্রিগারগুলি ব্যবহার করুন এবং যদি সম্ভব হয় তবে পরিবর্তে সঞ্চিত পদ্ধতি ব্যবহারের বিকল্প বেছে নিন।

এর কয়েকটি কারণ হতে পারে:

  1. পুরানো দিনগুলিতে ট্রিগারগুলি ব্যবহার করা কিছু ক্রিয়াকলাপগুলি এখন অন্য উপায়ে করা যেতে পারে যেমন কলামে মোটের আপডেট এবং স্বয়ংক্রিয় গণনা।
  2. আপনি দেখতে পাচ্ছেন না যে ট্রিগারটি উপস্থিত রয়েছে তা না জেনে একা কোড পরীক্ষা করে এটি চালিত হয়েছিল। আপনি যখন ডেটা পরিবর্তনগুলি দেখেন তখন আপনি তাদের প্রভাব দেখতে পান এবং টেবিলে (গুলি) কোনও ট্রিগার বা আরও অভিনয় রয়েছে তা না জানলে পরিবর্তন কেন ঘটেছিল তা নির্ধারণ করার জন্য এটি কখনও কখনও বিস্মিত হয়।
  3. আপনি যদি বিভিন্ন টেবিলে CHECK, RI, ট্রিগারগুলির মতো বেশ কয়েকটি ডাটাবেস নিয়ন্ত্রণ ব্যবহার করেন তবে আপনার লেনদেনের বিশদ প্রবাহ বুঝতে এবং বজায় রাখা জটিল হয়ে ওঠে। কখন কী ঘটে তা আপনাকে অবশ্যই জানতে হবে। আবার, আপনার এই জন্য ভাল ডকুমেন্টেশন প্রয়োজন হবে।

ট্রিগার এবং নন-ট্রিগার সঞ্চিত পদ্ধতিগুলির মধ্যে কিছু পার্থক্য হ'ল (অন্যদের মধ্যে):

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

8

ট্রিগারগুলি কোনও জটিল ডেটা অখণ্ডতার নিয়মগুলির জন্য প্রয়োজনীয়। এগুলি ডাটাবেস ব্যতীত অন্য কোথাও প্রয়োগ করা যাবে না বা আপনার ডেটা অখণ্ডতার সমস্যা থাকবে।

আপনি ডাটাবেসে সমস্ত পরিবর্তন (যা অ্যাপ্লিকেশন থেকে নিরীক্ষণের সমস্যা) ক্যাপচার করতে না চান তা না হলে নিরীক্ষণের জন্য এগুলি সেরা স্থান।

ট্রিগারগুলি পারফরম্যান্সের সমস্যার কারণ হতে পারে যদি সাবধানে লেখা না হয় এবং পর্যাপ্ত বিকাশকারীরা সেগুলি ভালভাবে লেখার জন্য যথেষ্ট জ্ঞানবান না হয়। এটি যেখানে তাদের খারাপ রেপ পায় তারই অংশ।

ট্রিগারগুলি ডেটার অখণ্ডতা বজায় রাখার অন্যান্য মাধ্যমের তুলনায় প্রায়শই ধীর হয় তাই আপনি যদি চেক সীমাবদ্ধতা ব্যবহার করতে পারেন তবে ট্রিগারের পরিবর্তে এটি ব্যবহার করুন।

খারাপ ট্রিগারগুলি লিখতে সহজ যেগুলি ইমেলগুলি প্রেরণের চেষ্টা করার মতো মূ .় কাজ করে। ইমেল সার্ভারটি ডাউন হয়ে গেলে আপনি কি সত্যিই ডিবিতে রেকর্ড পরিবর্তন করতে অক্ষম হতে চান?

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


3

ডাটাবেস ট্রিগার ব্যবহার

  1. কলামের মানগুলি স্বয়ংক্রিয়ভাবে চালনা করতে।
  2. জটিল অখণ্ডতার সীমাবদ্ধতা প্রয়োগ করতে।
  3. জটিল ব্যবসায়ের বিধি কার্যকর করতে।
  4. জটিল সুরক্ষা অনুমোদন কাস্টমাইজ করতে।
  5. প্রতিলিপি টেবিল বজায় রাখতে।
  6. ডেটা পরিবর্তনের নিরীক্ষণ করতে।

2

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

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


1

ট্রিগারগুলি ডাটাবেসে সীমাবদ্ধতা প্রয়োগ করতে ব্যবহার করা যেতে পারে যা ডাটাবেস স্কিমা তৈরি এবং কোনও ডিএমএল বিবৃতি চলাকালীন কার্যকর করা যায় না।


0

আসুন আপনাকে আসল সময়ে কোনও তৃতীয় পক্ষের সিস্টেমে ডেটা ধাক্কা দিতে হবে তা বলুন। আপনার টেবিলটিতে 950 গিগাবাইট ডেটা রয়েছে, তাই কেবলমাত্র তৃতীয় পক্ষের অ্যাপ্লিকেশনটিতে পুরো টেবিলটিকে ধাক্কা দেওয়া খুব বড়।

পরিবর্তে আপনি একটি সারিতে পরিবর্তনগুলি জমা করেন। কিছু বাহ্যিক প্রোগ্রাম পরে পর্যায়ক্রমে সারিবদ্ধ ডেটার ছোট ছোট ব্যাচগুলি ধাক্কা দেয়।

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

পরিবর্তে আপনি সারিটি আপডেট রাখতে টেবিলে একটি ট্রিগার রাখতে পারেন। কিছু মিস না করার গ্যারান্টিযুক্ত একটি কেন্দ্রীয় অবস্থান। পারফরম্যান্স জরিমানা? সত্যিকারের কারণ নয় যে সারিটি জনপ্রিয় করার হিটটি ট্রিগার দ্বারা, বা বাহ্যিক তা এড়ানো যায় না।

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


তবে অবশ্যই অনেকগুলি জিনিস রয়েছে যা ট্রিগার দিয়ে প্রয়োগ করা উচিত নয়।
লর্ড টাইডাস

-6

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

আমি এই পর্যবেক্ষণটিও সরবরাহ করব যে কোনও সঞ্চিত প্রক্রিয়া / ফাংশনটি যা অন্বেচ্ছাক্রমে জটিল হতে পারে এবং একাধিক ট্রিগার বা অন্যান্য সঞ্চিত প্রক্রিয়া দ্বারা পুনরায় ব্যবহারযোগ্য হতে পারে তা চালিয়ে ট্রিগারটি সহজ রাখা যায়। এজন্য প্যাকেজ এবং গ্রন্থাগার রয়েছে।

গোঁড়ামি সত্যিই পঙ্গু।


1
"ইমেল" শব্দের উল্লেখ আছে এমন প্রশ্নের আমি কোথাও দেখতে পাচ্ছি না। আপনি সম্ভবত অন্য একটি উত্তর সাড়া দেওয়ার চেষ্টা করছেন? স্ট্যাক এক্সচেঞ্জ কোনও ফোরাম নয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.