কখন / কেন এসকিউএল সার্ভারে ক্যাসকেডিং ব্যবহার করবেন?


149

এসকিউএল সার্ভারে বিদেশী কীগুলি সেট আপ করার সময়, কোন পরিস্থিতিতে আপনার মুছে ফেলা বা আপডেট করাতে এটি ক্যাসকেড করা উচিত এবং এর পিছনে যুক্তি কী?

এটি সম্ভবত অন্যান্য ডাটাবেসের ক্ষেত্রেও প্রযোজ্য।

আমি প্রতিটি দৃশ্যের সুনির্দিষ্ট উদাহরণগুলির জন্য সর্বাধিক সন্ধান করছি, যিনি সেগুলি সফলভাবে ব্যবহার করেছেন from


4
এই প্রশ্নটি এসকিউএল সার্ভারের সাথে কঠোরভাবে সম্পর্কিত বলে মনে হচ্ছে না এবং এটি তাত্ত্বিক, সাধারণ প্রশ্নের মতোই দেখাচ্ছে। আপনি sql-serverট্যাগটি সরিয়ে ফেললে এটি সম্প্রদায়ের পক্ষে আরও উপকারী হবে ।
ক্ল্যাপস

4
@ ক্লেপাস সত্যই, যদি আজ আমি এটি জিজ্ঞাসা করতাম তবে এটি বিষয়বস্তু হতে পারে। যদি উঁচু দর্শন / ভোটের জন্য না হয় তবে এটি সম্প্রদায়ের কাছে মূল্য রয়েছে বলে আমি এটি মুছে ফেলব।
জোয়েল কোহোর্ন

6
@ জোয়েলকোহুরন - স্পষ্টতই এই ধরণের প্রশ্নের মান রয়েছে। এই মানটি সময়ের সাথে সাথে ছড়িয়ে পড়ে না। আমার মনে প্রশ্ন এই যে এই জাতীয় প্রশ্নগুলি আজকে অস্বীকার করে আমরা কতটা মূল্য হারাচ্ছি?
পি। ব্রায়ান.ম্যাকি

2
@ পি। ব্রায়ান.ম্যাকি এখানে, এখানে! আমি যে কয়েকটি সেরা প্রশ্ন / উত্তর দেখেছি সেগুলি হ'ল এগুলি যে নিচে ভোট দেওয়া হয়েছে বা বিষয়বস্তু হিসাবে আঁকা হয়েছে ... তবে আপনি অনেকের সঠিক ভোট প্রশ্নে বলতে পারেন যে অনেকের ঠিক একই প্রশ্ন ছিল!
অ্যান্টনি গ্রিগস

ক্যাসকেডিং ক্রিয়াগুলি সিরিয়ালাইজযোগ্য লকগুলি নিয়ে যায়।
মিচ গম

উত্তর:


126

আমি এখন পর্যন্ত যা দেখেছি তার সংক্ষিপ্তসার:

  • কিছু লোক ক্যাসকেডিং মোটেই পছন্দ করে না।

ক্যাসকেড মোছা

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

ক্যাসকেড আপডেট

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

ক্যাসকেডিং কখন ব্যবহার করবেন

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

3
নোট করুন যে ক্যাসকেড আপডেটগুলি প্রায়শই ব্যবহৃত হয় যেখানে "তথাকথিত" প্রাকৃতিক কীগুলি প্রকৃত কার্যকর অনন্য কী হিসাবে প্রদর্শিত হয় না। আসলে আমি নিশ্চিত যে ক্যাসকেড আপডেটগুলি কেবলমাত্র দুর্বল স্বাভাবিক ডাটাবেস মডেলগুলির সাথে প্রয়োজন এবং এগুলি অগোছালো টেবিল এবং অগোছালো কোডের একটি উন্মুক্ত গেট।
ফিলিপ গ্রন্ডিয়ার 12

1
আপনি একটি গুরুত্বপূর্ণ বিষয় অনুপস্থিত, অনেক শিশুর রেকর্ড থাকলে ক্যাসকেডিং বিশাল পারফরম্যান্স সমস্যা তৈরি করতে পারে।
এইচএলজিইএম

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

3
আইডেন্টিটি বা স্বতঃবৃদ্ধি কলামে ক্যাসকেড আপডেট আছে কিনা তা কেন বিবেচিত হবে? দেখতে পাচ্ছি কেন এটা হবে না প্রয়োজনীয় কারণ আপনি ঐ (নির্বিচারে) মান পরিবর্তন করতে হবে করা উচিত নয়, কিন্তু যদি তাদের মধ্যে একজন করেনি পরিবর্তন, অন্তত উল্লেখ সততা অক্ষত হবে।
কেনি এভিট

3
10 গুলি? ভাল এখন আমরা জানি যে জোল একটি রিভলবার গুলি চালাচ্ছে না।
নিল এন

68

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

যা খারাপ তা হ'ল বিদেশী কীগুলির ভুল ব্যবহার, যেমন তাদের পিছন দিকে তৈরি করা, উদাহরণস্বরূপ।

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

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

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


7
এই ধরণের 'প্রাকৃতিক' প্রাথমিক কীটি ব্যবহার করা প্রথম স্থানে একটি সত্যই দরিদ্র ধারণা।
নিক জনসন

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

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

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

6
@ ক্রুয়াচান: আমার দৃষ্টিতে, নিয়মটি সহজ। যদি ডেটা মাতাপিতা ডেটা ব্যতীত অকেজো হিসাবে জোরালোভাবে সম্পর্কিত না হয়, তবে এটি কোনও ক্যাসকেড সম্পর্কের নিশ্চয়তা দেয় না। এটিই আমি আমার উত্তরের শেষ বাক্যাংশে সম্বোধনের চেষ্টা করেছি।
ভিঙ্কো ভার্সালোভিক

17

আমি কখনই ক্যাসকেডিং মোছা ব্যবহার করি না।

আমি যদি ডাটাবেস থেকে কিছু অপসারণ করতে চাই তবে আমি কী করতে চাই তা স্পষ্ট করে ডেটাবেসকে বলতে চাই।

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

আমি কোডটি (বা সঞ্চিত পদ্ধতিতে) 'ম্যাজিক' না হয়ে এটি করা থেকে যে স্পষ্টতা পেয়েছি তা আমি পছন্দ করি।

একই কারণে আমিও ট্রিগারগুলির অনুরাগী নই।

কিছু লক্ষ্য করার বিষয় হ'ল আপনি যদি কোনও 'অর্ডার' মুছেন তবে আপনি '1 টি সারি প্রভাবিত' রিপোর্ট পেয়ে যাবেন, এমনকি ক্যাসকেড মোছা 50 টি অর্ডার আইটেম সরিয়ে ফেলেছে।


34
প্রাইমারি কী থেকেও মুক্তি পাচ্ছেন না কেন? আপনি আপনার কোডে অনন্য মান নিশ্চিত করার স্পষ্টতা পাবেন।
মুসিজিনিসিস

4
@ মুসিগেনেসিস, আইদান এফকে অপসারণের পক্ষে পরামর্শ দিচ্ছিল না। এফকে এখনও ডেটা সুরক্ষিত করে তবে ক্যাসকেড চালু না করে .... অপ্রত্যাশিত যাদু ঘটে না।
শ্যানন সিভেরেন্স

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

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

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

13

আমি ক্যাসকেডিং ডিলিটগুলি নিয়ে অনেক কাজ করি।

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

এটি বলেছে, ক্যাসকেডিং মুছে ফেলা এবং বিজ্ঞপ্তি রেফারেন্সের সাথে আমার 1 টি সমস্যা রয়েছে। এটি প্রায়শই ডাটাবেসের অংশগুলিকে নিয়ে যায় যেগুলিতে কোনও ক্যাসকেডিং মোছা নেই।


1
আমি জানি এটি খুব পুরানো, তবে CASCADE মোছার সাথে বিজ্ঞপ্তি সংক্রান্ত ইস্যুটি উল্লেখ করার জন্য +1।
কোড ম্যাভেরিক

2
ক্ষমা করে দেই একটি প্রশ্ন: আপনি একটি বিজ্ঞপ্তি রেফারেন্স পেলে আসলে কী ঘটে?
টিম লাভল-স্মিথ

10

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

আমি ক্যাসকেড ডিলেটগুলি ট্রিগারগুলির মতো ততটা খারাপ হিসাবে বিবেচনা করি না কারণ তারা কেবল ডেটা মুছবে, ট্রিগারদের ভিতরে সমস্ত ধরণের বাজে জিনিস থাকতে পারে।

সাধারণভাবে আমি সম্পূর্ণরূপে প্রকৃত মুছে ফেলা এড়াতে এবং এর পরিবর্তে লজিকাল ডিলেটগুলি (অর্থাত্‍ আইডিলিটেড নামে একটি বিট কলাম থাকা সত্য হিসাবে সেট হয়ে যায়) ব্যবহার করি।


2
তুমি আমাকে আরও কিছু জানতে আগ্রহী করেছ। আপনি কেন দৃ strongly়ভাবে যৌক্তিক মোছা পছন্দ করেন? আপনি যে ডেটা নিয়ে কাজ করছেন তার কি এর সাথে কিছু করার আছে?
টিম লাভল-স্মিথ

9

একটি উদাহরণ যখন আপনার সত্তার মধ্যে নির্ভরতা থাকে ... যেমন: দস্তাবেজ -> ডকুমেন্টআইটেমস (আপনি যখন নথি মুছবেন তখন ডকুমেন্ট আইটেমগুলির অস্তিত্বের কারণ নেই)


5

ক্যাসকেড মুছা ব্যবহার করুন যেখানে আপনি উল্লেখ করতে পারেন যে এফকে দিয়ে রেকর্ডটি মুছে ফেলা হয়েছে যদি এর রেফারিং পিকে রেকর্ডারটি সরিয়ে ফেলা হয়। অন্য কথায়, যেখানে উল্লেখটি রেকর্ড ছাড়াই রেকর্ডটি অর্থহীন।

নাল ব্যতিক্রমের পরিবর্তে মৃত রেফারেন্সগুলি ডিফল্টরূপে সরানো হয়েছে তা নিশ্চিত করতে ক্যাসকেড মুছে ফেলা দরকারী বলে মনে করি।


5

অন ​​ক্যাসকেড মুছে দিন:

যখন আপনি চান শিশু সারণিতে সারি মুছে ফেলা হবে যদি সংশ্লিষ্ট সারি মুছে ফেলা হয় পিতা বা মাতা টেবিলে।

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

অন ​​ক্যাসকেড আপডেট করুন:

যখন আপনি প্রাথমিক কী পরিবর্তন করতে চান বিদেশী কী আপডেট করা হবে


5

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

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

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

এটাই কি উন্নয়ন নয়?


আমি ভাবি নি যে এটি সবকিছু মুছে ফেলবে ... আপনার অর্থ বৈশিষ্ট্যটি আসলে যা বলে তা যা করে? ...
জোয়েল কোহর্ন

3

ক্যাসকেড মোছার (কোডে এটি না করে) রাখার একটি কারণ হ'ল কার্য সম্পাদন।

কেস 1: একটি ক্যাসকেড মোছা সহ

 DELETE FROM table WHERE SomeDate < 7 years ago;

কেস 2: একটি ক্যাসকেড মোছা ছাড়াই

 FOR EACH R IN (SELECT FROM table WHERE SomeDate < 7 years ago) LOOP
   DELETE FROM ChildTable WHERE tableId = R.tableId;
   DELETE FROM table WHERE tableId = R.tableid;
   /* More child tables here */
 NEXT

দ্বিতীয়ত, আপনি যখন ক্যাসকেড মোছার সাথে অতিরিক্ত শিশু টেবিলটিতে যুক্ত করেন, তখন কেস 1 এর কোডটি কাজ করে চলেছে।

আমি কেবল একটি ক্যাসকেডে রাখতাম যেখানে সম্পর্কের শব্দার্থিকতা "অংশ" হয়। অন্যথায় কিছু বোকা আপনার যখন করবে তখন আপনার অর্ধেক ডাটাবেস মুছে ফেলবে:

DELETE FROM CURRENCY WHERE CurrencyCode = 'USD'

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

2

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

হয় ক্যাসকেডিংয়ের মাধ্যমে বা ট্রিগার ব্যবহারের মাধ্যমে। কোনও বাগ ত্রুটি নেওয়ার চেষ্টা করার সময় বা পারফরম্যান্স সমস্যা নির্ণয় করার সময় তারা কিছুক্ষণ রেখায় আপনাকে পাছায় কামড়ায়।

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


2

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

কেবলমাত্র আমি যেখানে ব্যবহার করব তা যদি টেবিল টেবিলের ডেটাটি অত্যন্ত নিয়ন্ত্রণ করা হয় (যেমন, সীমাবদ্ধ অনুমতি) এবং যাচাই করা হয়েছে কেবলমাত্র একটি নিয়ন্ত্রিত প্রক্রিয়া (যেমন একটি সফ্টওয়্যার আপডেটের) মাধ্যমে আপডেট বা মুছে ফেলা হয়।


1

এস এর একটি মুছে ফেলা বা আপডেট যা কিছু টিপল আর এর মধ্যে পাওয়া একটি বিদেশী-কী মানটিকে সরিয়ে দেয় তিনটি পদ্ধতির একটিতে পরিচালনা করা যেতে পারে:

  1. প্রত্যাখ্যান
  2. প্রসারণ
  3. অকার্যকরতা।

প্রচারকে ক্যাসকেডিং হিসাবে উল্লেখ করা হয়।

দুটি মামলা রয়েছে:

S যদি এস এর একটি টিপল মুছে ফেলা হয়, তবে যে টি আর টিপলগুলি উল্লেখ করা হয়েছে তা মুছুন।

S যদি এস-তে একটি টুপল আপডেট করা হয়, তবে এটিতে যে টি টিপলগুলি উল্লেখ করা হয়েছে সেগুলিতে মানটি আপডেট করুন।


0

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

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

এটি এনামের মতো তালিকার টেবিলগুলির জন্য একটি খারাপ জিনিস: কেউ এন্ট্রি 13 টি মুছে ফেলেন - টেবিল "রঙ" থেকে হলুদ এবং ডাটাবেসের সমস্ত হলুদ আইটেম মুছে ফেলা হয়। এছাড়াও, এগুলি কখনও কখনও মুছে ফেলা-সমস্ত-সন্নিবেশ-সমস্ত উপায়ে আপডেট করা হয়, যার ফলে রেফারেন্সিয়াল অখণ্ডতা সম্পূর্ণ বাদ পড়ে। অবশ্যই এটি ভুল, তবে কীভাবে আপনি একটি জটিল সফ্টওয়্যার পরিবর্তন করবেন যা বহু বছর ধরে চলছে, সত্য রেফারেন্টাল অখণ্ডতার পরিচয় দিয়ে অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া হওয়ার ঝুঁকি রয়েছে?

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


0

কোনও শারীরিক ডাটাবেসে লজিক্যাল সুপার-টাইপ এবং উপ-টাইপ সত্তাগুলি প্রয়োগ করার সময় ক্যাসকেড মোছা অত্যন্ত কার্যকর।

যখন পৃথক সুপার-টাইপ এবং সাব-টাইপ টেবিলগুলি শারীরিকভাবে সুপার-টাইপ / উপ-প্রকারগুলি প্রয়োগ করতে ব্যবহৃত হয় (সমস্ত উপ-ধরণের বৈশিষ্ট্যগুলিকে একটি একক শারীরিক সুপার-টাইপ টেবিলে রোল করার বিপরীতে), সেখানে এক-এক এই টেবিলগুলি এবং ইস্যুটির মধ্যে একটি সম্পর্ক তখন কীভাবে এই টেবিলগুলির মধ্যে প্রাথমিক কীগুলি 100% সিঙ্কে রাখে।

ক্যাসকেড মুছে ফেলা একটি খুব দরকারী সরঞ্জাম হতে পারে:

1) নিশ্চিত করুন যে একটি সুপার-টাইপ রেকর্ডটি মোছার সাথে সম্পর্কিত একক সাব-টাইপ রেকর্ডটিও মুছে ফেলা হয়।

২) নিশ্চিত করুন যে কোনও উপ-রেকর্ডের যে কোনও মোছাও সুপার-টাইপ রেকর্ডটিকে মুছে ফেলে। এটি সাব-টাইপ টেবিলটিতে "পরিবর্তে" মুছে ফেলুন ট্রিগার প্রয়োগ করে অর্জন করা হয় যা চলেছে এবং সংশ্লিষ্ট সুপার-টাইপ রেকর্ডটিকে মুছে দেয়, যার ফলে ক্যাসকেড উপ-টাইপ রেকর্ডটিকে মুছে দেয়।

এই পদ্ধতিতে ক্যাসকেড ডিলেটগুলি ব্যবহার করে তা নিশ্চিত করে যে আপনি প্রথমে সুপার-টাইপ রেকর্ডটি মুছে ফেলুন বা উপ-প্রকার রেকর্ডটি প্রথমে মুছে ফেলা হোক না কেন, কোনও অনাথ সুপার-টাইপ বা উপ-ধরণের রেকর্ড উপস্থিত নেই।


ভালো উদাহরণ. জেপিএতে, এটি উত্তরাধিকারসূত্র যোগদানের সারণিতে যোগদান করেছে। 1 এর জন্য): সাধারণত, আপনি একটি অধ্যবসায় স্তর কাঠামো ব্যবহার করছেন (এক্লিপস লিঙ্ক, হাইবারনেট, ...), যা যুক্ত হওয়া সত্তার জন্য মুছে ফেলা অনুক্রমটিকে প্রথমে যুক্ত অংশটি মুছতে, তারপরে সুপার অংশটি প্রয়োগ করে। তবে আপনার যদি আমদানি বা সংরক্ষণাগার কাজের মতো আরও বুনিয়াদি সফ্টওয়্যার থাকে তবে কেবলমাত্র সুপার অংশে একটি মুছুন জারি করে সত্তা মুছতে সক্ষম হওয়াই সুবিধাজনক। 2) সম্পর্কিত: সম্মত হন তবে সেই ক্ষেত্রে ক্লায়েন্টের ইতিমধ্যে সচেতন হওয়া উচিত যে তিনি সত্তার যোগদান / উপ অংশে কাজ করছেন।
লিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.