डेटाबेस की कमी क्या हैं? [बन्द है]


92

डेटाबेस बाधा की स्पष्ट परिभाषा क्या है? एक डेटाबेस के लिए बाधाएं क्यों महत्वपूर्ण हैं? बाधाओं के प्रकार क्या हैं?


12
इस सवाल का एक स्पष्ट जवाब है। यह "बहुत व्यापक नहीं है।" इसकी बड़ी संख्या और अपवित्रता से पता चलता है कि यह कितने लोगों के लिए उपयोगी है। मैंने शब्दांकन को साफ किया है और इसे फिर से खोलने के लिए नामित किया है।
ला-कोमाडरेजा

@BasilBourque यह प्रश्न प्रोग्रामर्स के लिए बहुत खराब फिट है - इसे जल्दी से वोट किया जाएगा और वहां पर बंद कर दिया जाएगा, मेटा देखें। metgram.programmers.stackexchange.com/questions/6483/… अनुशंसित पढ़ने: Programmers.SE पर क्या जाता है? स्टैक ओवरफ्लो के लिए एक गाइड
gnat

1
@gnat जबकि वह पेज मुझे अभी भी फजी है, जो प्रोग्रामर स्टैक एक्सचेंज के लिए ऑन-टॉपिक नहीं है या नहीं है, मैं पोस्ट लेखक के न्यूनतम सीमा के साथ समझ सकता हूं और सहमत हो सकता हूं, पहले एक सीधे-प्रासंगिक विकिपीडिया लेख पढ़ा है जो प्रदान करता है स्टाॅक एक्सचेंज पर एक ही तरह का कंडेन्स्ड या सारांश अवलोकन का अनुरोध किया जा रहा है।
तुलसी बॉर्क

2
शीर्षक व्यापक है, और उप-प्रश्न एक ही बार में कई प्रश्न पूछ रहे हैं -_- टॉमटॉम, पी -், greg-449, बम्मी और निती कैसे चाहते हैं? कृपया समझाएँ। वैसे भी क्या आप सभी बाधाओं के बारे में पूछ सकते हैं ...?
18

हालाँकि मैं बहुत अधिक बोर्ड और राय-आधारित होने के सवालों के प्रति संवेदना को समझता हूँ, मैं पहले विकिपीडिया लेख को पढ़ने की आवश्यकता से सहमत नहीं हूँ। यह "एक ही तरह का संघनित या सारांश अवलोकन" प्रदान नहीं करता है। स्वीकृत उत्तर ऊपर दिए गए विकिपीडिया लिंक की तुलना में बहुत अधिक संघनित और ऑन-पॉइंट उत्तर प्रदान करता है।
क्रिस

जवाबों:


117

बाधाएँ एक डेटाबेस स्कीमा परिभाषा का हिस्सा हैं।

एक बाधा आम तौर पर एक मेज के साथ जुड़ा हुआ है और एक साथ बनाई गई है CREATE CONSTRAINTया CREATE ASSERTIONSQL विवरण।

वे कुछ गुणों को परिभाषित करते हैं जो डेटाबेस में डेटा का अनुपालन करना चाहिए। वे एक कॉलम, एक पूरी तालिका, एक से अधिक तालिका या संपूर्ण स्कीमा पर लागू कर सकते हैं। एक विश्वसनीय डेटाबेस सिस्टम यह सुनिश्चित करता है कि बाधाएं हर समय पकड़ती हैं (संभवतः एक लेन-देन के अंदर, तथाकथित स्थगित बाधाओं को छोड़कर)।

आम प्रकार की अड़चनें हैं:

  • शून्य नहीं है - एक कॉलम में प्रत्येक मान NULL नहीं होना चाहिए
  • निर्दिष्ट कॉलम में प्रत्येक पंक्ति के लिए अद्वितीय - मान (साइज़) होना चाहिए
  • निर्दिष्ट कॉलम में प्राथमिक कुंजी - मूल्य (एस) एक तालिका में प्रत्येक पंक्ति के लिए अद्वितीय होना चाहिए और NULL नहीं होना चाहिए ; सामान्य रूप से डेटाबेस में प्रत्येक तालिका में एक प्राथमिक कुंजी होनी चाहिए - इसका उपयोग व्यक्तिगत रिकॉर्ड की पहचान करने के लिए किया जाता है
  • निर्दिष्ट कॉलम में विदेशी कुंजी - मूल्य (s) को किसी अन्य तालिका में मौजूदा रिकॉर्ड का संदर्भ देना चाहिए (इसके माध्यम से प्राथमिक कुंजी या कुछ अन्य विशिष्ट बाधाएं हैं )
  • जांच - एक अभिव्यक्ति निर्दिष्ट है, जिसे संतुष्ट होने के लिए सही मूल्यांकन करना चाहिए

3
पीके को शामिल करने के लिए +1, शून्य नहीं, अशक्त
gbn

+1, फिर भी आप FOREIGN कुंजी परिदृश्यों पर विस्तार कर सकते हैं और कुछ लिंक प्रदान कर सकते हैं।
अनरेसन

2
चेक बाधाओं को असत्य का मूल्यांकन नहीं करना चाहिए। वे सच होने की जरूरत नहीं है। अज्ञात भी ठीक है।
मार्टिन स्मिथ

2
एक प्रकार की बाधा भी एक सामान्य प्रकार नहीं होगी?
मार्टिन

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

36

यह समझने के लिए कि हमें बाधाओं की आवश्यकता क्यों है, आपको पहले डेटा अखंडता के मूल्य को समझना होगा।

डेटा इंटिग्रिटी डेटा की वैधता को संदर्भित करता है। क्या आपका डेटा मान्य है? क्या आपका डेटा यह दर्शाता है कि आपने उन्हें क्या डिज़ाइन किया है?

मैं आपसे क्या अजीब सवाल पूछ सकता हूं, लेकिन दुख की बात है कि सभी अक्सर, डेटाबेस कचरा डेटा से भरे होते हैं, अन्य तालिकाओं में पंक्तियों के लिए अमान्य संदर्भ, जो लंबे चले गए हैं ... और मान जो कि व्यापार तर्क के लिए कुछ भी मतलब नहीं है आपके समाधान के किसी भी लंबे समय तक।

यह सब कचरा अकेले आपके प्रदर्शन को कम करने के लिए प्रवण नहीं है, बल्कि आपके आवेदन तर्क के तहत एक समय-बम भी है जो अंततः डेटा को फिर से लिख देगा जो इसे समझने के लिए डिज़ाइन नहीं किया गया है।

बाधाएँ आपके द्वारा डिज़ाइन किए गए समय पर बनाए गए नियम हैं जो आपके डेटा को दूषित होने से बचाते हैं। यह एक डेटाबेस समाधान के अपने दिल के बच्चे के लंबे समय तक जीवित रहने के लिए आवश्यक है। बाधाओं के बिना आपका समाधान निश्चित रूप से समय और भारी उपयोग के साथ क्षय होगा।

आपको यह स्वीकार करना होगा कि आपके डेटाबेस का डिज़ाइन तैयार करना केवल आपके समाधान का जन्म है। इसके बाद इसे (उम्मीद के मुताबिक) लंबे समय तक रहना चाहिए, और इसके अंत-उपयोगकर्ताओं (यानी क्लाइंट एप्लिकेशन) द्वारा सभी प्रकार के (अजीब) व्यवहार को सहना होगा। लेकिन विकास में यह डिजाइन-चरण आपके समाधान की लंबे समय की सफलता के लिए महत्वपूर्ण है! इसका सम्मान करें, और इसे समय और ध्यान देने की आवश्यकता है।

एक बुद्धिमान व्यक्ति ने एक बार कहा था: "डेटा को खुद की रक्षा करनी चाहिए!" । और यही अड़चन है। यह नियम है कि अपने डेटाबेस में डेटा को यथासंभव मान्य रखें।

ऐसा करने के कई तरीके हैं, लेकिन मूल रूप से वे उबलते हैं:

  • विदेशी कुंजी बाधाएं शायद सबसे अधिक उपयोग की जाने वाली बाधा हैं, और यह सुनिश्चित करती है कि अन्य तालिकाओं के संदर्भों को केवल तभी अनुमति दी जाती है जब वास्तव में संदर्भ के लिए लक्ष्य पंक्ति मौजूद हो। यह एक मृत लिंक बनाने वाली संदर्भित पंक्ति को हटाकर इस तरह के रिश्ते को तोड़ना असंभव बनाता है।
  • चेक की कमी यह सुनिश्चित कर सकती है कि कुछ कॉलम में केवल विशिष्ट मानों की अनुमति है। आप एक अवरोध स्तंभ में केवल 'येलो' या 'ब्लू' शब्द की अनुमति देकर एक बाधा पैदा कर सकते हैं। अन्य सभी मान त्रुटि उत्पन्न करेंगे। जांच बाधाओं के उपयोग के लिए विचार प्राप्त करें एडवेंचरवर्क्स sys.check_constraintsनमूना डेटाबेस में दृश्य की जांच करें
  • एसक्यूएल सर्वर में नियम केवल पुन: प्रयोज्य चेक बाधाएं हैं (आपको एक ही स्थान से वाक्यविन्यास को बनाए रखने की अनुमति देता है, और अपने अवरोधों को अन्य डेटाबेस में तैनात करना आसान बनाता है)

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

प्रमुख कुंजी बाधाओं - Microsoft

विदेशी कुंजी बाधा - w3schools

चेक बाधाओं

सौभाग्य! ;)


एक नेक्रो-टिप्पणी के रूप में, ऐसा लगता है कि नियम अब Microsoft द्वारा शौच किए जा रहे हैं।
गैरी

6

बाधाएं डेटा पर नियमों के अलावा और कुछ नहीं हैं। कौन सा डेटा वैध है और क्या अमान्य है, इसकी कमी का उपयोग करके परिभाषित किया जा सकता है। तो, डेटा की अखंडता को बनाए रखा जा सकता है। निम्नलिखित व्यापक रूप से उपयोग की जाने वाली बाधाएँ हैं:

  1. प्राथमिक कुंजी : जो विशिष्ट रूप से डेटा की पहचान करता है। यदि यह बाधा कुछ कॉलम के लिए निर्दिष्ट की गई है, तो हम उस कॉलम में डुप्लिकेट डेटा दर्ज नहीं कर सकते हैं
  2. जाँच करें : जैसे NOT NULL। यहां हम निर्दिष्ट कर सकते हैं कि हम उस विशेष कॉलम के लिए कौन सा डेटा दर्ज कर सकते हैं और उस कॉलम के लिए क्या अपेक्षित नहीं है।
  3. विदेशी कुंजी : अन्य तालिका की पंक्ति के लिए विदेशी प्रमुख संदर्भ। ताकि दूसरी तालिका से एक तालिका में संदर्भित डेटा हमेशा संदर्भित तालिका के लिए उपलब्ध हो।

3

डेटा के विशिष्ट गुणों को लागू करने के लिए बाधाओं का उपयोग किया जा सकता है। एक साधारण उदाहरण एक इंट कॉलम को मानों [0-100000] तक सीमित करना है। यह परिचय अच्छा लग रहा है।


3

बाधाएं तय करती हैं कि डेटाबेस में डेटा के लिए कौन से मूल्य मान्य हैं। उदाहरण के लिए, आप एक मान को लागू कर सकते हैं अशक्त ( NOT NULLबाधा) नहीं है, या यह किसी अन्य तालिका (एक FOREIGN KEYबाधा) में एक अद्वितीय बाधा के रूप में मौजूद है , या यह कि इस तालिका के भीतर अद्वितीय है (एक UNIQUEबाधा या शायद PRIMARY KEYआपकी आवश्यकताओं के आधार पर बाधा) )। बाधाओं का उपयोग करके अधिक सामान्य बाधाओं को लागू किया जा सकता है CHECK

एसक्यूएल सर्वर 2008 की कमी के लिए MSDN प्रलेखीकरण शायद अपने सबसे अच्छे प्रारंभिक जगह है।


2
  1. UNIQUEबाधा (जिसमें से एक PRIMARY KEYबाधा एक प्रकार है)। जाँचता है कि किसी दिए गए फ़ील्ड के सभी मान तालिका में अद्वितीय हैं। यह X-axis बाधा (रिकॉर्ड) है

  2. CHECKबाधा (जिसमें से एक NOT NULLबाधा एक प्रकार है)। जाँचता है कि एक निश्चित स्थिति एक ही रिकॉर्ड के क्षेत्रों पर अभिव्यक्ति के लिए रखती है। यह Y-axis बाधा (क्षेत्र) है

  3. FOREIGN KEYबाधा। जाँचता है कि एक फ़ील्ड का मान किसी अन्य तालिका में फ़ील्ड के मानों के बीच पाया जाता है। यह Z-axis बाधा (तालिकाओं) है।


अद्वितीय बाधाओं और विदेशी कुंजी बाधाओं को CHECKबाधाओं का उपयोग करके लिखा जा सकता है इसलिए इसे अलग तरीके से वर्गीकृत क्यों करें? यानी " Y-एक्सिस" (जो भी इसका मतलब है)।
onedaywhen

2
@onedaywhen: आप FOREIGN KEYएक CHECKबाधा का उपयोग करके कैसे लागू करते हैं ?
क्वासोई

1
@onedaywhen: इस बाधा के साथ एक तालिका बनाने का प्रयास करें।
Quassnoi

1
@onedaywhen: क्या यह कोशिश करना इतना कठिन है? सुझाव: यह काम नहीं करेगा।
क्वासोई

3
@onedaywhen: आपके द्वारा लिखी गई क्वेरी चेक बाधा नहीं बनाती है। यह एक मात्र SELECTप्रश्न है। आप CHECKअवरोधों (या वर्तमान रिकॉर्ड के बाहर मानों को संदर्भित करने वाले किसी भी अन्य निर्माण) का उपयोग नहीं कर सकते SQL Server
क्वासोई

2

एक डेटाबेस एक वैचारिक (या व्यवसाय) मॉडल का कम्प्यूटरीकृत तार्किक प्रतिनिधित्व है, जिसमें अनौपचारिक व्यापार नियमों का एक सेट शामिल है। ये नियम डेटा का उपयोगकर्ता द्वारा समझा गया अर्थ हैं। क्योंकि कंप्यूटर केवल औपचारिक अभ्यावेदन प्रस्तुत करते हैं, व्यावसायिक नियमों को सीधे डेटाबेस में नहीं दर्शाया जा सकता है। उन्हें औपचारिक प्रतिनिधित्व के लिए मैप किया जाना चाहिए, एक तार्किक मॉडल, जिसमें अखंडता बाधाओं का एक सेट होता है। ये बाधाएं - डेटाबेस स्कीमा - व्यावसायिक नियमों के डेटाबेस में तार्किक प्रतिनिधित्व हैं और इसलिए, डेटा के डीबीएमएस-समझे गए अर्थ हैं। यह इस प्रकार है कि अगर DBMS अनजान है और / या व्यापार नियमों का प्रतिनिधित्व करने वाले बाधाओं का पूरा सेट लागू नहीं करता है, तो यह डेटा की क्या मतलब है और इसलिए, की एक अधूरी समझ है

नोट: DBMS- "समझा" अर्थ - अखंडता बाधाओं - उपयोगकर्ता-समझे गए अर्थ - व्यावसायिक नियमों के समान नहीं है - लेकिन, कुछ अर्थ के बावजूद, हम डेटा से तार्किक निष्कर्षों को मशीनीकरण करने की क्षमता प्राप्त करते हैं।

फेबियन पास्कल द्वारा "ए ओल्ड क्लास ऑफ एरर्स"


2

SQL में मुख्य रूप से 4 प्रकार की मुख्य बाधाएँ हैं:

  • डोमेन बाधा: यदि नया टपल के लिए प्रदान किया गया एक विशेषता मान निर्दिष्ट विशेषता डोमेन का नहीं है

  • मुख्य बाधा: यदि एक नए टपल में एक प्रमुख विशेषता का मूल्य पहले से ही संबंध में एक और ट्यूपल में मौजूद है

  • रेफ़रेंशियल इंटिग्रिटी: यदि एक नया टपल में एक विदेशी कुंजी मान एक प्राथमिक कुंजी मान को संदर्भित करता है जो संदर्भित संबंध में मौजूद नहीं है

  • इकाई वफ़ादारी: यदि प्राथमिक कुंजी मान एक नए टपल में शून्य है


-1

बाधाएं ऐसी स्थितियां हैं, जो विशिष्ट स्थिति को मान्य कर सकती हैं। डेटाबेस से संबंधित बाधाएं डोमेन अखंडता, एंटिटी अखंडता, संदर्भात्मक अखंडता, उपयोगकर्ता परिभाषित अखंडता बाधाएं आदि हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.