2008-11-10 10 views
33

डुप्लिकेट की: When/Why to use Cascading in SQL Server?क्या मुझे कैस्केड डेलीट नियम का उपयोग करना चाहिए?

मैं हमेशा भी हटा CASCADE उपयोग करने के लिए डर किया गया है, लेकिन जैसा कि मैंने और अधिक आत्मविश्वास मिलता है (आलसी: डी), मैं सोच रहा हूँ कि यह कैसे बुरा हो सकता है, क्या इसका उपयोग करने का सबसे अच्छा अभ्यास है या क्या मुझे इससे बचना चाहिए और अपनी विदेशी चाबियाँ आदि को पुराने तरीके से साफ करना चाहिए (संग्रहित प्रक्रियाओं के साथ)?

उत्तर

72

हटाना कैस्केड पर ठीक है, लेकिन केवल जब निर्भर पंक्तियों वास्तव में कर रहे हैं पंक्ति के एक तार्किक विस्तार हटाया जा रहा है। उदाहरण के लिए, संबंधित ORDER_LINES को हटाने के लिए ऑर्डर हटाएं ठीक है क्योंकि स्पष्ट रूप से आप इस आदेश को हटाना चाहते हैं, जिसमें हेडर और कुछ पंक्तियां शामिल हैं। दूसरी तरफ, ग्राहक को संबंधित ऑर्डर को हटा नहीं देना चाहिए क्योंकि ऑर्डर अपने अधिकार में महत्वपूर्ण हैं, वे केवल ग्राहक के गुण नहीं हैं।

एक तरीका यह बारे में सोचना है: अगर मैं DELETE एक्स जारी है और यह भी वाई हटाता है, मैं खुश या दुखी हो जाएगा? और अगर मैं डिलीट एक्स जारी करता हूं और मुझे बताया गया है कि "एक्स को हटा नहीं सकता क्योंकि वाई मौजूद है" क्या मैं सुरक्षा से खुश हूं, या असुविधा पर परेशान हूं?

+0

बस उत्सुक, अगर ग्राहक क्या सद्भावना आदेश प्रविष्टि करना मौजूद नहीं है? – codersofthedark

+0

ग्राहक ** ** मौजूद होगा, क्योंकि अगर हम कैस्केड को ऑर्डर करने की अनुमति नहीं दे रहे हैं तो ग्राहक की डिलीवरी विफल हो जाएगी। –

+1

@codersofthedark एक वास्तविक दुनिया परिदृश्य है कि एक व्यवस्थापक गलती से एक उपयोगकर्ता को नष्ट करना होता है, तो यह आदेश हटा नहीं करना चाहिए, या पूरे लेखा विभाग एक टॉस के लिए जाना होगा है। – dotslash

10

मैं वास्तव में क्या हटा दी जाती है पर नियंत्रण (स्पष्ट रूप से इसे की घोषणा के द्वारा) होने पसंद करते हैं, तो मैं आम तौर पर संग्रहित प्रक्रियाओं के माध्यम से नष्ट करने के लिए चुनते हैं, और व्यापक हटाता उपयोग करने के लिए नहीं।

संबंधित मुद्दे