ডাটাবেস কি মন্দ ট্রিগার করে? [বন্ধ]


186

ডাটাবেস একটি খারাপ ধারণা ট্রিগার?

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

অন্যদিকে, মনে হচ্ছে আপনার যদি যুক্তিযুক্ত থাকে যা অবশ্যই FOOডেটাবেজে নতুন তৈরি হওয়ার সময় ঘটে থাকে তবে এটিকে রাখার জন্য সবচেয়ে নির্বোধের জায়গাটি এফইও টেবিলে একটি সন্নিবেশ ট্রিগার।

শুধুমাত্র ট্রিগার ব্যবহার করার সময় হ'ল সত্যিই সাধারণ জিনিসগুলির জন্য যেমন সেটিংস সেট করা ModifiedDate


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

2
উত্তর যুক্ত করার জন্য প্রশ্নটি বন্ধ হয়ে গেছে, তবে আরও দেখুন কী ডাটাবেস ক্রস টেবিলের অখণ্ডতার সীমাবদ্ধতার জন্য নিরাপদ? । (স্পোলার: না, তারা নয়)
মাইফেট

16
এই সাইটটি আমাকে অনেকটা পিষে। এই হল মহান অনেকে মত এখনো প্রশ্ন তার কারণে বন্ধ মানুষ কল্পনা অভাব প্রশ্ন যে কিছু পরক কারণ অনুসরণ করতে বাধ্য জন্য Q & A তারা আদিম বাইনারি ফর্ম্যাটে মধ্যে মাপসই করা হবে না গ্রহণ করতে।
Quibbleome

1
একটি ট্রিগার বিজনেস লজিক সমস্যাযুক্ত (খারাপ আপনি যদি করতে পারেন)। ট্রিগারটিতে ডেটাবেস লজিক সমস্যাযুক্ত নয় (অখণ্ডতা, লগিং)।
গ্রেগ গাম

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

উত্তর:


147

ট্রিগারগুলির সাথে প্রধান সমস্যাগুলি হ'ল

  • এগুলি সম্পূর্ণ গ্লোবাল - তারা সারণীর ক্রিয়াকলাপের প্রসঙ্গটি নির্বিশেষে প্রয়োগ করে;
  • তারা চুরি করা; অনিচ্ছাকৃত (এবং খুব রহস্যজনক) পরিণতিতে তারা আপনাকে আঘাত না করা পর্যন্ত তারা সেখানে থাকা ভুলে যাওয়া সহজ।

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


20
এগুলি 2 টি সুবিধা, কিছু ক্ষেত্রে।
জন্নো নোলান

18
"স্টেলথি" দুর্দান্ত শব্দ, হ্যাঁ - ভালই বলেছেন। ঠিক এ কারণেই আমি তাদের থেকে দূরে সরে যেতে চাই: প্রায়শই তারা ভুলে যায় বা উপেক্ষা করা হয়। আমার ব্যক্তিগত অভিজ্ঞতায়, পুনর্বিবেচনা ট্রিগারগুলি প্রায়শই আমার নিজের কপালে একটি স্ম্যাক সহ আসে।
খ্রিস্টান নুনসিটো

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

4
সুতরাং @ রবার্টেভেক-রোবাজ, আপনি যে সমস্ত বিকাশকারী আপনি জানেন তারা অসম্পূর্ণ?
এইচএলজিইএম

3
@ এইচজিএলএম, সম্মত হন ট্রিগারগুলি কার্যকর করার জন্য বিশেষজ্ঞ থাকতে হবে should বাস্তব জীবনের দৃশ্যপট - এমনটি নেই। বাস্তব জীবনের দৃশ্যাবলি - ভুলে যাওয়া ট্রিগার সম্পর্কিত কোনও বাগ সনাক্ত করার চেষ্টা করে দিন অতিবাহিত হয়েছিল। বাস্তব জীবনের দৃশ্যাবলি - ট্রিগার যুক্তিটিকে মারাত্মকভাবে অ্যাপ্লিকেশন লজিকের দিকে ঠেলে দেওয়া হচ্ছে যেখানে এটি সহজেই পুনঃসংশ্লিষ্ট এবং ইউনিট-পরীক্ষিত হতে পারে। এটিই সত্যিকারের জীবন যা আমি মোকাবিলা করি তা আমাকে "ট্রিগারগুলি থেকে দূরে থাক" বলে তোলে ... এটি ট্রিগারগুলির দোষ নয় কারণ এটি পাথরের দোষ নয় যে উইন্ডোগুলি ভেঙে যায়।
আরবিজেজ

80

না, তারা আসলে একটি ভাল ধারণা। সেখানে আপনার নির্দিষ্ট ট্রিগার নিয়ে একটি সমস্যা হয়েছে, তাহলে আপনি তাদের অধিকার কাজ করছি, তবে যা সাধারণত আপনার বাস্তবায়ন নিয়ে একটি সমস্যা, মানে না নিজেদের ট্রিগার :-) ধারণা।

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

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

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


9
"প্রতিটি সারিতে একটি ফাংশন নির্বাচন করার সময় তাদের প্রক্রিয়া করুন"। একটি ট্রিগার চেয়ে এই উদ্দেশ্যে একটি ফাংশন ভিত্তিক সূচক ব্যবহার করা ভাল।
tuinstoel

10
অগত্যা নয়, ট্রিটি সম্ভবত তখনই চলবে যখন সারিটি sertedোকানো বা আপডেট করা হবে। ফাংশন-ভিত্তিক সূচক প্রতিটি নির্বাচনের জন্য চলবে। ব্যবহারের প্যাটার্নের উপর নির্ভর করে একটি সম্ভবত অন্যটির চেয়ে ভাল। তবে উভয়ই একে অপরের চেয়ে সব থেকে ভাল।
jmucchiello

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

50

সরঞ্জাম কখনও মন্দ হয় না। এই সরঞ্জামগুলির প্রয়োগ খারাপ হতে পারে।


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

37
); @vbullinger বন্দুক না মন্দ, কিন্তু তাদের ট্রিগার হয়
Darragh Enright

2
: ডি সাধারণীকরণ বিপজ্জনক (পুনরাবৃত্তভাবে)। আপনি কি জিজ্ঞাসাবাদের দ্বারা 'স্বীকারোক্তি' দেওয়ার জন্য 'নির্যাতন' সরঞ্জাম দ্বারা এসেছেন? যাইহোক দৃষ্টিকোণ জন্য +1।
আরবিজেজে

22

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

ট্রিগারগুলির গুরুত্ব (আমার মনে) এটি হ'ল ...
- যে কোনও সিস্টেম সর্বদা একটি বৈধ অবস্থায় থাকা উচিত
- এই বৈধ রাষ্ট্রটি কার্যকর করার কোডটি কেন্দ্রীভূত করা উচিত (প্রতিটি এসপিতে লিখিত নয়)

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

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

তারা কঠোর শোনায় এবং আমি অনুমান করি যে তারা are তবে এটি আমার মনের মুল সত্য ...


3
>>> ট্রিগারগুলির সাথে সমস্যাগুলি লোকজন। হ্যাঁ, যদি কেবল লোকেরা সমাবেশে কোড করতে পারে, ক্রেপি জিইআইয়ের সাথে কাজ করতে পারে, তবে খারাপভাবে ডিজাইন করা দরজাটি ধাক্কা দিতে হবে বা টানতে হবে কিনা তা সঠিকভাবে অনুমান করুন ... যে কোনও "বৈশিষ্ট্য" লোকেরা বার বার ভুল হয় তা হ'ল "মন্দ"।
ফকরুদ্দিন

1
@ ফকরুদ্দিন, যে কোনও বিকাশকারী ভুল হতে শুরু করে সে ডেটাবেস অ্যাক্সেস করতে অক্ষম।
এইচএলজিইএম

20

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


ডেটা-কেন্দ্রিক নিয়ম ডাটাবেসের মধ্যে অন্তর্গত
absin

আমার ছিলsome programmers are too ethnocentric to consider that something other than their prized application may be affecting things
কিড 10১

13

বেশিরভাগ ক্ষেত্রে, হ্যাঁ

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

এটি জটিলতার একটি স্তর তৈরি করে যা কেবল রক্ষণাবেক্ষণের কাজ যুক্ত করে।

ট্রিগার ব্যবহারের পরিবর্তে, একটি সঞ্চিত পদ্ধতি / রুটিন, সাধারণত একই কাজটি করা যায় তবে একটি পরিষ্কার এবং রক্ষণাবেক্ষণ পদ্ধতিতে - একটি সঞ্চিত রুটিনকে কল করার অর্থ বিকাশকারী তার উত্স কোডটি দেখতে পারে এবং ঠিক কী ঘটছে তা দেখতে পারে।


12
এটি একটি ট্রিগার সুবিধা হ'ল বিচ্ছিন্নতা! সঞ্চিত প্রক্সগুলিতে ডেটাতে প্রতিটি পরিবর্তনের জন্য অনুরোধ করা যায় না। জিইআইআই ছাড়াও অনেকগুলি উপায়ে ডেটা পরিবর্তন করা যায়।
এইচএলজিইএম

2
এইচএলজিইএম, এটি আপনার অ্যাক্সেস নিয়ন্ত্রণের উপর নির্ভর করে। আপনি কোনও সঞ্চিত প্রক্রিয়া বাদে সরাসরি টেবিলগুলিতে কোনও পরিবর্তনকে অস্বীকার করতে পারেন।
আরবিজেজ

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

2
যদি রেকর্ডগুলি সর্বদা একসাথে তৈরি করা / ধ্বংস করা উচিত তবে একটি চেক সীমাবদ্ধতা তৈরি করুন যা সেগুলি নিশ্চিত করে। যে কোনও নিয়ম ভঙ্গ করে সে কোনও গোপন আচরণের পরিবর্তে একটি ত্রুটি পেয়ে যায় যা তাদের জ্ঞান বা সম্মতি ছাড়াই যাদুতে জিনিসগুলিকে সঠিক করে তোলে।
MarkR

9

ট্রিগারগুলি অত্যন্ত শক্তিশালী এবং দরকারী, এমন অনেক পরিস্থিতিতে আছে যেখানে ট্রিগারই কোনও সমস্যার সেরা সমাধান।

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

দিনের শেষে, যদি আপনি না জানেন যে এটি কী করছে everything ট্রিগারগুলি হ'ল সিদ্ধান্ত নেওয়া কারণ এমন বিকাশকারী রয়েছে যা তাদের বোঝে না যে যুক্তিযুক্ত যে গাড়িগুলি খারাপ কারণ কিছু লোক গাড়ি চালাতে পারে না ...


7

ট্রিগারগুলির ব্যবহার রয়েছে - লগিং / নিরীক্ষণ এবং "শেষ পরিবর্তিত" তারিখ বজায় রাখা দুটি খুব ভাল ব্যবহার যা পূর্ববর্তী উত্তরে উল্লেখ করা হয়েছে।

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

"ন্যূনতম অবাকের নীতি" বিষয়টিও ইতিমধ্যে উল্লেখ করা হয়েছে।


3
এটি সঠিক যে এটি এক জায়গায় থাকা উচিত, ডাটাবেস। লজিক যা ডেটার অখণ্ডতা প্রভাবিত করে তা অবশ্যই ডেটাবেজে থাকা উচিত এবং কোনও অ্যাপ্লিকেশনে কখনই এটি ডাটাবেসে ডেটা প্রভাবিত করার সময় কল হতে পারে বা নাও হতে পারে।
এইচএলজিইএম

1
@ এইচএলজিইএম: এটি নির্ভর করে যে ডাটাবেসটিতে সম্ভবত তথ্যের অ্যাক্সেস থাকতে পারে যা এটি ডেটা বৈধ কিনা তা জানাতে দেয়। এটি সবসময় এমন হয় না যে এটি পারে; যখন বৈধকরণকারীটি অন্য কোনও প্রতিষ্ঠানে থাকে (যেমন, ক্রেডিট কার্ড বা ব্যাংক অ্যাকাউন্টের বিশদের জন্য) তখন ডিবি এটি সঠিক কিনা তা জানতে পারে না - ধরে নিচ্ছেন এটি ব্যাংকের ডিবি নয়! - এবং এটি প্রয়োগের জন্য আবেদনের উপর নির্ভর করতে হবে। আপনি যা চান না তা হ'ল ডেটাবেসটি তৃতীয় পক্ষের পরিষেবাগুলিতে এলোমেলো সংযোগ তৈরি করা যেমন সার্ভার স্থাপনার বিষয়টি আসে তখন এটি খারাপ is
ডোনাল ফেলো

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

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

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

6

ট্রিগারগুলি সঠিকভাবে ব্যবহার করার সময় একটি ভাল সরঞ্জাম। অডিট পরিবর্তনগুলি, বিশিষ্ট সংক্ষিপ্তকরণের টেবিল ইত্যাদির মতো জিনিসগুলির জন্য Exp

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

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


6

একটি উচ্চ স্তরে ট্রিগার 1 এর জন্য দুটি ব্যবহারের কেস রয়েছে

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

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

২) ডেটা অখণ্ডতার নিয়মগুলি প্রয়োগ করার জন্য, আমরা যেগুলি ঘোষকভাবে মোকাবিলা করতে পারি সেগুলি ব্যতীত (চেক, প্রাথমিক কী, স্বতন্ত্র কী এবং বিদেশী কী ব্যবহার করে)। এই ব্যবহারের ক্ষেত্রে সমস্ত ট্রিগারগুলি হল INSERT / UPDATE / DELETE দ্বারা করা পরিবর্তন অনুমোদিত কিনা তা যাচাই করা হবে কিনা তা যাচাই করতে QUERY (SELECT) ডেটা। ঠিক যেমন ঘোষণামূলক বাধাগুলি আমাদের জন্য করে। কেবলমাত্র এই ক্ষেত্রে আমরা (বিকাশকারীরা) প্রয়োগের প্রোগ্রাম করেছি।

পরবর্তী ব্যবহারের ক্ষেত্রে ট্রিগারগুলি ব্যবহার করা ক্ষতিকারক নয়।

আমি এতে ব্লগ করছি: http://harmfultriggers.blogspot.com এ


রেফারেন্সিয়াল অখণ্ডতার জন্য ট্রিগার ব্যবহার করার সময় এটি সম্মতিযুক্ত ইস্যুগুলি হ্যান্ডেল করার চেয়ে কঠিন er
ডাব্লুডাব্লু

2
একমত। তবে অন্য কোনও উপায় ব্যবহার করার সময় কি এটি সহজ?
টুন কোপ্পেলারস

আমি যুক্তি দেব যে কেবলমাত্র যদি আপনার অযোগ্য বিকাশকারী থাকে তবে এটি ক্ষতিকারক।
এইচএলজিইএম

LOL যদিও প্রচুর অযোগ্য বিকাশকারী রয়েছে।
হ্যাশটেবল

5

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

তবে আমি ব্যক্তিগতভাবে মার্কআর সাথে সম্পূর্ণরূপে একমত - আপনি (প্রায়) সর্বদা ট্রিগরের সমতুল্য কোড কোড লিখতে পারেন যা আরও স্বচ্ছ এবং এর ফলে বজায় রাখা সহজ হবে।


অ্যাপ্লিকেশন কোডটির মাধ্যমে একটি ডাটাবেস প্রবাহিত করার জন্য সমস্ত কাজ বাদে নয়।
এইচএলজিইএম

5

মন্দ নয়। এগুলি আসলে পছন্দসই জিনিসগুলিকে সরল করে

1. রেকর্ড বা এমনকি ডাটাবেস স্কিমে পরিবর্তন লগিং / নিরীক্ষণ

অল্টার টেবিলে আপনার ট্রিগার থাকতে পারে যা আপনার উত্পাদন পরিবেশে পরিবর্তনগুলি ফিরিয়ে আনবে। এটি কোনও দুর্ঘটনাযুক্ত টেবিল পরিবর্তনগুলি রোধ করা উচিত।


2. একাধিক ডাটাবেস জুড়ে রেফারেনশিয়াল স্বতন্ত্রতা (প্রাথমিক / বিদেশী মূল সম্পর্কগুলি ইত্যাদি) জোরদার করা


আপনি কি ডিডিএলের বিবৃতি ফিরিয়ে দিতে পারবেন?
অ্যান্ড্রু সোয়ান

সাধারণত না। এটি বন্ধ করার একমাত্র উপায় হ'ল ব্যবহারকারীদের লগইনগুলি থেকে সেই অনুমতিটি সরিয়ে দেওয়া।
jmucchiello

কিছু ডাটাবেস ইঞ্জিনে আপনি (উদাহরণস্বরূপ PostgreSQL) করতে পারেন।
নিকোলস

@ অ্যান্ড্রু - এসকিউএল সার্ভারে আপনি এটি করতে পারেন। এসকিউএল সার্ভার ২০০++ তে ডিডিএল ট্রিগারও রয়েছে যা ইভেন্টগুলিতে আগুন জ্বালিয়ে দেয় ALTER TABLE
মার্টিন স্মিথ

4

নাহ, তারা মন্দ নয় - তারা কেবল ভুল বোঝাবুঝি করেছে :- ডি

ট্রিগারগুলির একটি বৈধ ব্যবহার রয়েছে, তবে প্রায়শই প্রায়শই রেট্রো-হ্যাক হিসাবে যা পরিণামে পরিস্থিতি আরও খারাপ করে তোলে।

আপনি যদি কোনও অ্যাপ্লিকেশনটির অংশ হিসাবে একটি ডিবি বিকাশ করে থাকেন তবে যুক্তিটি সর্বদা কোড বা স্প্রোকগুলিতে কল করা উচিত। ট্রিগারগুলি কেবল পরে ডিবাগ-ব্যথার দিকে পরিচালিত করবে।

আপনি যদি বুঝতে থাকেন যে কীভাবে লকিং, ডেডলকিং এবং কীভাবে ডিস্কে ডিবি ফাইল অ্যাক্সেস করে সঠিক পদ্ধতিতে ট্রিগারগুলি ব্যবহার করে (উদাহরণস্বরূপ নিরীক্ষণ বা সরাসরি ডিবি অ্যাক্সেস সংরক্ষণাগার) সত্যিই মূল্যবান হতে পারে।


4

এগুলি দুষ্ট যে বলা একটি প্রসারণ হয় তবে তারা জালের কারণ হতে পারে। যখন একটি ট্রিগার গুলি চালানো অন্যান্য ট্রিগারগুলিকে গুলি চালায় তখন তা সত্যিই জটিল হয়ে ওঠে। আসুন যাক তারা ঝামেলাযুক্ত: http://www.oracle.com/technology/oramag/oracle/08-sep/o58asktom.html

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


4

তারা অবশ্যই মন্দ নয়। ডেটাবেস স্কিমার রিফ্যাক্টর করার সময়, কলামটির নামকরণ করার সময়, বা একটি কলামকে দুটি কলামে বিভক্ত করে বা তদ্বিপরীত (উদাহরণস্বরূপ: নাম / উপাধি কেস) এবং রূপান্তরকে সহায়তা করার সময় আমি খুঁজে পেয়েছি precious

এগুলি নিরীক্ষণের জন্য খুব দরকারী।


4

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

এখন পর্যন্ত যে কোনও উত্তরে উল্লেখ করা হয়নি এমন একটি দিক হ'ল সুরক্ষা। কারণ, ডিফল্টরূপে, ট্রিগারগুলি ব্যবহারকারীর প্রসঙ্গে নির্বাহ করা হয় যে বিবৃতি কার্যকর করে যা ট্রিগারটিকে গুলি চালায় যার ফলে সমস্ত ট্রিগার পর্যালোচনা না করা হলে এটি সুরক্ষা হুমকির কারণ হতে পারে।

" পরিচালন ট্রিগার সুরক্ষা " শিরোনামের অধীনে বিএল-এ দেওয়া উদাহরণটি এমন একজন ব্যবহারকারী যা GRANT CONTROL SERVER TO JohnDoe ;তাদের নিজস্ব অনুমতি বাড়ানোর জন্য কোড যুক্ত একটি ট্রিগার তৈরি করে ।


3

পার্শ্ব প্রতিক্রিয়া থাকলে, এটি ডিজাইনের দ্বারা সমস্যা। কিছু ডেটাবেস সিস্টেমে, একটি স্বতঃআগ্রহ ক্ষেত্র স্থাপন করার দরকার নেই যেমন একটি প্রাথমিক কী আইডি ক্ষেত্র।


3

আমি মনে করি তারা খারাপ হতে পারে তবে কেবল উন্নয়নের মতো অন্য কিছুর মতোই মন্দ।

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

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

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


1

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

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


1

ট্রিগারগুলির ধারণাটি খারাপ নয়, ট্রিগারগুলির বাসা বাঁধাই মন্দ।

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