कोड के बजाय डेटाबेस में बाधाएं क्यों लागू की जाती हैं?


21

डेटाबेस में बाधाएं क्यों लागू की जाती हैं? क्या इसे कोड में रखना अधिक लचीला नहीं होगा?

मैं डेटाबेस को लागू करने के लिए शुरुआती किताब पढ़ रहा हूं, इसलिए मैं इसे शुरुआती के रूप में पूछ रहा हूं। मान लें कि मैंने इस इकाई मॉडल सहित एक डेटाबेस तैयार किया है:

 entity type    |   sub-types
----------------+--------------------------------------------
   Person       |   Employee, Student,       ...
   Student      |   Graduate, Undergraduate, ...
   Employee     |   Teacher,  Administrator, ...

वर्तमान बाधाओं:

  1. सिस्टम पर एक पंजीकृत व्यक्ति केवल एक छात्र या एक कर्मचारी हो सकता है।
  2. व्यक्ति इकाई को सामाजिक संख्या की विशिष्टता की आवश्यकता होती है, जिसे हम मानते हैं कि प्रत्येक व्यक्ति केवल एक ही अद्वितीय (उर्फ, एक अच्छी प्राथमिक कुंजी) रखता है । (# 1 देखें)

बाद में हम नंबर 1 को हटाने का निर्णय लेते हैं: यदि एक दिन कॉलेज तय करता है कि Teacher( Employeeउप-प्रकार) भी हो सकता है Student, अपने खाली समय में पाठ्यक्रम ले रहा है, तो डेटाबेस डिजाइन को बदलना बहुत कठिन है, जिसमें हजारों, लाखों, अरबों हो सकते हैं, केवल कोड में तर्क बदलने के बजाय प्रविष्टियों का क्षेत्र: बस वह हिस्सा जिसने किसी व्यक्ति को एक छात्र और एक कर्मचारी दोनों के रूप में पंजीकृत नहीं होने दिया।

(यह बहुत ही अनुचित है लेकिन मैं अभी और कुछ नहीं सोच सकता। जाहिरा तौर पर यह संभव है)।

हम कोड के बजाय डेटाबेस डिज़ाइन में व्यावसायिक नियमों की परवाह क्यों करते हैं ?

# 1: 7 साल बाद एक नोट, एक वास्तविक जीवन उदाहरण:
मैंने एक सरकार देखी है जहां एक गलती के कारण, जारी किए गए एसएसएन को दोहराया गया था: कई लोग, एक ही एसएसएन। मूल DB डिजाइन करने वालों ने निश्चित रूप से डेटाबेस में इस विशिष्टता बाधा को लागू नहीं करने की गलती की। (और बाद में मूल एप्लिकेशन में एक बग? साझा डेटाबेस का उपयोग करते हुए कई एप्लिकेशन और सहमत नहीं हैं कि बाधा कहां डालनी है, जांचना और लागू करना है? ...)।
यह बग सिस्टम में रहने के लिए जाएगा और उसके बाद विकसित किए गए सभी सिस्टम उस मूल सिस्टम के डेटाबेस पर निर्भर करते हैं, आने वाले कई वर्षों तक। यहाँ उत्तर पढ़कर मैंने सभी अड़चनों को लागू करना सीखा, उनमें से जितने संभव हो उतने ही बुद्धिमानी से (आँख बंद करके) डेटाबेस में वास्तविक भौतिक दुनिया का प्रतिनिधित्व करने के लिए जितना हो सके उतना अच्छा।


2
ज्यादातर हम व्यावसायिक नियमों को लागू करने के बारे में परवाह करते हैं और उसके लिए सबसे अच्छा तरीका क्या है।
ypercube y

3
आप वास्तव में इस बात का बहुत बुरा उदाहरण प्रस्तुत कर रहे हैं कि आपकी संस्थाओं के लचीलेपन और डेटाबेस के विस्तार के बाद से, किन बाधाओं का उपयोग किया जाता है, ज्यादातर सामान्यीकरण द्वारा परिभाषित किए जाते हैं। यह कहते हुए कि, बाधाएं डेटाबेस में आने वाले किसी भी भ्रष्ट डेटा के खिलाफ अंतिम सुरक्षा हैं, भले ही आवेदन को रोक दिया गया हो, भले ही एक नया एप्लिकेशन विकसित किया गया हो, भले ही कोई बाहरी एपीआई जोड़ा गया हो, भले ही कोई व्यक्ति सीधे डीबी को संपादित करता हो। बाधाएं डेटाबेस की रक्षा करती हैं, उसके शीर्ष पर व्यवसाय तर्क को भी डीबी तक पहुंचने की कोशिश करने से पहले अपनी चीजें करनी होंगी।
Niels Keurentjes

3
दरअसल, एक स्नातक छात्र के रूप में मुझे एक छात्र, कर्मचारी और एक शिक्षक दोनों माना जाता है। तो आपका उदाहरण वास्तव में अनुचित नहीं है।
विंस्टन एवर्ट

4
आपको अपने आवेदन में कभी भी ऑब्जेक्ट पर डेटाबेस डिज़ाइन को आधार नहीं बनाना चाहिए। आप इसे व्यक्ति के रूप में डिजाइन नहीं करेंगे, फिर व्यक्तियों की भूमिकाओं को समाप्त करने के लिए एक संबंधित तालिका होगी। तब समस्या नहीं आती है, क्योंकि आप भूमिकाओं के लिए वास्तविक रूप से तैयार की गई तालिका में लोगों को कई भूमिकाएँ दे सकते हैं। यदि आप केवल एक ही भूमिका निभाना चाहते हैं, तो आप तालिका को बाधित करते हैं ताकि लोगों की पहचान अद्वितीय हो। जब आप बदलना चाहते हैं कि तह बाधा को हटा दें।
HLGEM

ऑब्जेक्ट <-> रिलेशनल मैपिंग एक कला है।
Thorbjørn रावन एंडरसन

जवाबों:


34

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

बाधाएं जो डेटाबेस में सबसे अच्छी तरह से लागू होती हैं, वे आमतौर पर वहां होती हैं क्योंकि वे डेटा मॉडल की संरचना के लिए मौलिक होती हैं, जैसे कि एक विदेशी कुंजी को सुनिश्चित करने के लिए कि कोई उत्पाद वैध है category_id

किसी एप्लिकेशन में लागू होने वाली बाधाएं डेटा मॉडल के लिए मौलिक नहीं हो सकती हैं, जैसे कि सभी FooBar उत्पाद नीले होने चाहिए - लेकिन बाद में कोई यह तय कर सकता है कि FooBar भी पीला हो सकता है। यह अनुप्रयोग तर्क है जिसे वास्तव में डेटाबेस में रहने की आवश्यकता नहीं है, हालांकि आप एक अलग coloursतालिका बना सकते हैं और डेटाबेस को यह आवश्यक हो सकता है कि उत्पाद उस तालिका से मान्य प्रविष्टि का संदर्भ दे। लेकिन निर्णय है कि केवल में रिकॉर्ड coloursमूल्य है blueहोगा अभी भी कहीं न कहीं से आते हैं बाहर डेटाबेस।

विचार करें कि क्या होगा यदि आपके पास डेटाबेस में कोई बाधा नहीं थी, और उन्हें आवेदन में लागू करने की आवश्यकता थी। यदि आपके पास एक से अधिक एप्लिकेशन हैं, तो डेटा के साथ काम करने के लिए क्या होगा? यदि विभिन्न एप्लिकेशन अलग-अलग तरीकों से लागू करने का निर्णय लेते हैं तो आपका डेटा कैसा दिखेगा?

आपका उदाहरण एक ऐसी स्थिति दिखाता है जहां डेटाबेस के बजाय आवेदन में बाधा का होना अधिक फायदेमंद हो सकता है, लेकिन शायद प्रारंभिक डेटा मॉडल के साथ एक मौलिक समस्या थी जो बहुत अधिक प्रतिबंधात्मक और अनम्य है?


तो इस उत्तर के अनुसार, नियम <a व्यक्ति केवल छात्र की उप-तालिका में मौजूद हो सकता है या केवल कर्मचारी उप- तालिका तालिका में लागू किया जा सकता है, और डेटाबेस में </ छात्र / कर्मचारी उप-प्रकार मान्य होना चाहिए व्यक्ति> बाधा। क्या मैं सही हू? (यह पुस्तक का उदाहरण था)। धन्यवाद।
खोखो

2
@loolooyyyy: हाँ, मुझे लगता है कि यह सही है। यदि डेटाबेस पहले नियम को लागू करता है (कि एक व्यक्ति केवल एक छात्र या एक कर्मचारी हो सकता है) तो आपके द्वारा वर्णित स्थिति (जिसमें एक कर्मचारी एक वर्ग के लिए पंजीकरण करना चाहता है) असंभव है क्योंकि: व्यक्ति दोनों नहीं हो सकता है, और यह नहीं है यहां तक ​​कि दूसरा "व्यक्ति" रिकॉर्ड बनाने के लिए संभव है क्योंकि वे सामाजिक सुरक्षा संख्याओं को साझा नहीं कर सकते हैं जो संभवतः किसी तीसरे पक्ष (जैसे सरकार) से जारी किए जाते हैं। बेशक, यह अत्यधिक प्रतिबंधक डेटा मॉडल कुछ मामलों के लिए काम कर सकता है ...
FrustratedWithFormsDesigner 20

2
@loolooyyyy: मूल डेटा मॉडल का उपयोग करने का एक और तरीका और अभी भी शिक्षकों को छात्रों को एक अन्य तालिका कहा जा सकता है, teachers_as_studentsजिसका एक और उपप्रकार है Studentsऔर इसमें एक सामाजिक के बजाय एक नई विदेशी कुंजी है Teachers, और एक सिस्टम-जेनरेटेड प्राथमिक कुंजी है। सुरक्षा संख्या। इस तरह, एक "छात्र" वास्तव में एक शिक्षक के लिए एक उपनाम है इसलिए शिक्षक अभी भी कक्षा लेने के लिए पंजीकरण कर सकता है। यह कहना मुश्किल है कि पूरे डेटा मॉडल को देखे बिना यह कितना अच्छा काम करेगा।
FrustratedWithFormsDesigner 20

2
मैंने इसे नीचा दिखाया। कोई समय नहीं है जब केवल आवेदन में एक बाधा सबसे अच्छा लागू होती है इस उत्तर के लहजे को अनुचित तरीके से वेट किया जाता है।
इवान कैरोल

3
@FrustratedWithFormsDesigner निश्चित रूप से, यह वास्तव में एक विदेशी प्रमुख बाधा के लिए पोस्टर बच्चा है। मान लें कि आपके पास अलग-अलग संस्करणों के तीन ग्राहक हैं / डीबी एक्सेस प्वाइंट का निर्माण करते हैं, जब आप उस उत्पाद को लाल रंग में शिपिंग रोकते हैं तो आप क्या करने जा रहे हैं? आप संभावित रंग संयोजनों की सूची को कहां संग्रहीत करने जा रहे हैं ? संकेत: मुझे आपके लिए एक केंद्रीकृत स्थान मिला है। और यदि आप तालिका बनाते हैं color_products, और color, आप संभवतः अधिक आसानी के साथ अतिरिक्त ड्रॉप डाउन बनाने में सक्षम होंगे - अधिकांश आईडीई / स्कीमा लोडर, fkeys का समर्थन करते हैं।
इवान कैरोल

35

इसलिये:

  1. मैं चाहता हूं कि डेटाबेस में सभी डेटा एक ही बाधाओं के अधीन हों, न कि नए डेटा जो अभी चल रहे कोड के संस्करण में बाधाओं के अधीन हैं।
  2. मैं घोषणात्मक अड़चनें चाहता हूं, प्रोग्रामेटिक अड़चनें नहीं।
  3. डेटाबेस में डेटा अक्सर उस कोड को रेखांकित करता है जो आज उसके साथ बातचीत करने के लिए लिखा गया है। और वह डेटा - कोड नहीं - संगठन की संपत्ति है।
  4. मेरा कोड बहुत सरल हो जाता है जब मुझे पता चलता है कि सभी डेटा कठोर बाधाओं के अधीन हैं। मुझे अब विशेष मामलों पर विचार करने की आवश्यकता नहीं है जो मुझे पता है कि डेटाबेस असंभव होने की गारंटी देता है।

बस कुछ कारण जो मेरे लिए महत्वपूर्ण हैं।


4
अर्ध-संबंधित (1) और (3): एप्लिकेशन कोड में बग को ठीक किया जा सकता है, आपके डेटा में कीड़े अक्सर अपूरणीय होते हैं।
म्यू

17

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

मेरी व्यक्तिगत राय में (कई अलग-अलग उद्देश्यों के लिए उपयोग किए जाने वाले सैकड़ों विभिन्न डेटाबेसों के साथ डेटा और अनुभव से निपटने के 30 वर्षों के आधार पर) जो कोई भी उन डेटाबेसों में विरोधाभास नहीं डालता है, जहां वे अंततः खराब डेटा रखते हैं। कभी-कभी अनुपयोगी होने के बिंदु पर खराब डेटा। यह विशेष रूप से सच है जहां आपके पास वित्तीय / नियामक डेटा है जो ऑडिटिंग के लिए कुछ मानदंडों को पूरा करने की आवश्यकता है।


17

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

आमतौर पर अनुप्रयोग-स्तर की बाधाओं को हराया जाता है, हालांकि डेटाबेस निरंतरता तंत्र को पढ़ता है, जिसके द्वारा सत्र तब तक अन्य सत्रों के डेटा को नहीं देख सकता है।

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

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

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


16

डेटाबेस द्वारा लागू बाधाओं का लाभ:

सादगी - एक बाधा की घोषणा करना एक बाधा घोषित करने और उस घोषणा को लागू करने वाले कोड को लिखने की तुलना में काफी सरल है।

सटीकता - आपके द्वारा लिखा गया कोड आपके द्वारा बनाए गए बग में कभी नहीं होगा। डेटाबेस विक्रेता यह सुनिश्चित करने में समय व्यतीत करते हैं कि उनका बाधा कोड सटीक है, इसलिए आपको नहीं करना है।

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

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

पूर्णता - अनुप्रयोग डेटाबेस में डेटा दर्ज होने पर बाधाओं को लागू करता है और पुराने डेटा को सत्यापित करने के लिए अतिरिक्त प्रयास की आवश्यकता होती है या डेटाबेस में पहले से मौजूद डेटा में हेरफेर करने के लिए।

दीर्घायु - आपके डेटाबेस प्लेटफ़ॉर्म में किसी विशेष एप्लिकेशन की संभावना होगी।


11

सर्वर पर बाधाएं क्यों लागू की जाती हैं? क्योंकि आप बुरे लोगों को अपने ग्राहक का उपयोग करने के लिए मजबूर नहीं कर सकते।

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

यदि आप डेटाबेस सर्वर पर अखंडता की जाँच करते हैं, तो उपकरण की परवाह किए बिना डेटा तक पहुंचने का हर प्रयास, आपके नियमों से बाध्य होगा।


10

यहाँ कुछ महान जवाब, और अन्य विचारों को दोहराने के जोखिम पर:

  • SSN जरूरी नहीं कि अद्वितीय हो। हेक, एसएसएन हमेशा ज्ञात नहीं होता है, और कुछ मामलों में यह मौजूद नहीं है (अभी तक)। SSN का पुन: उपयोग किया जा सकता है और सभी कर्मचारियों या छात्रों के पास कभी भी SSN नहीं हो सकता है। यह प्रश्न का परिधीय है, लेकिन यह दर्शाता है कि, कोई फर्क नहीं पड़ता कि आप अपनी बाधाओं को लागू करते हैं, आपको व्यावसायिक नियमों के बारे में निर्णय लेने के लिए डेटा मॉडल और डोमेन को अच्छी तरह से समझने की आवश्यकता है।
  • व्यक्तिगत रूप से मैं बाधाओं को यथासंभव डेटा के करीब रहना पसंद करता हूं। बहुत सरल कारण यह है कि हर कोई डेटाबेस में डेटा बदलने के लिए एप्लिकेशन कोड का उपयोग नहीं करेगा। यदि आप अपने व्यावसायिक नियमों को आवेदन के स्तर पर लागू करते हैं और मैं UPDATEडेटाबेस के खिलाफ सीधे बयान चलाता हूं , तो आपका आवेदन एक अवैध परिवर्तन को कैसे रोकता है? ऐप में व्यावसायिक नियमों के साथ एक और समस्या यह है कि recompiling / redeploying मुश्किल हो सकता है, विशेष रूप से वितरित ऐप्स के लिए जहां यह संभव है कि सभी को एक ही समय में अपडेट नहीं मिलेगा। और अंत में, एप्लिकेशन में व्यावसायिक नियमों को बदलने से डेटा के बारे में बिल्कुल कुछ नहीं होता है जो पहले से मौजूद है जो नए नियमों का उल्लंघन करता है - यदि आप डेटा में नई बाधा जोड़ते हैं, तो आपको डेटा को ठीक करने की आवश्यकता है।
  • आप विभिन्न स्तरों पर कई, निरर्थक जांचों को सही ठहराने में सक्षम हो सकते हैं। यह सब तैनाती के तरीके के लचीलेपन पर निर्भर करता है, एक बदलाव की संभावना कितनी है, और डेटाबेस और अन्य परतों में व्यावसायिक नियम परिवर्तन को सिंक्रनाइज़ करना कितना मुश्किल है। ऐप लेयर पर चेक को दोहराने के लिए एक सम्मोहक तर्क यह है कि आप संभावित रूप से केवल एक बाधा को विफल करने के लिए डेटाबेस में एक गोल-यात्रा को रोक सकते हैं (बाधा की प्रकृति और यह मौजूदा डेटा पर निर्भर करता है)। लेकिन अगर मुझे एक या दूसरे को चुनना था तो मैं इसे उपरोक्त कारणों से डेटाबेस में रखूंगा।

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


9
  1. डेटाबेस बाधाओं को प्रभावी ढंग से जांच सकता है। कोड से बेहतर है।

  2. वफ़ादारी बाधाओं प्रभावी निष्पादन योजना खोजने के लिए डेटाबेस में मदद करता है

  3. एप्लिकेशन को सुसंगत दृश्य पढ़ता है, इसलिए यह शायद ही विशिष्टता की गारंटी दे सकता है। जबकि डेटाबेस गैर-कमिटेड डेटा भी देख सकता है।


8

संक्षिप्त उत्तर ... डेटा अखंडता (यानी सटीकता और वैधता) को संरक्षित करने के लिए।

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

बाकी सब कुछ के लिए ...
डेटाबेस हमेशा दो स्वामी की सेवा करता है जिसे मैं संपादकों और उपयोगकर्ताओं को बुलाता हूं ।

संपादक ज्यादातर डेटा को डेटाबेस में डालते हैं और एक बार में एक या एक से कम संख्या में डेटा प्राप्त करते हैं। उनकी प्राथमिक चिंताएं डेटा के सभी संबंधित टुकड़ों के लिए तेज, सटीक पहुंच और उनके परिवर्तनों के तेज, विश्वसनीय भंडारण हैं।

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

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

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

हालांकि, जितना हम दिखावा करते हैं हम भविष्य की भविष्यवाणी कर सकते हैं, हम नहीं कर सकते।

किसी भी डेटाबेस का उत्पादन करने का प्रयास कभी भी इसे फेंकने के लिए बहुत मूल्यवान है। एक घर की तरह, डेटाबेस को कई बार विस्तारित, परिवर्तित और पुनर्निर्मित किया जाएगा। यहां तक ​​कि जब इसे पूरी तरह से बदल दिया जाता है, तब भी सभी डेटा पुराने डेटाबेस के सभी पुराने व्यापारिक नियमों और संबंधों को संरक्षित करते हुए नए डेटाबेस में चले जाएंगे।

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

यह, दर-तरीका, बिल्कुल वही है जो मेनफ्रेम कोबोल प्रोग्रामर्स को करना पड़ता है क्योंकि वे बड़े पैमाने पर डेटाबेस अक्सर बनाए जाते थे, इससे पहले कि हम रिलेशनल इंजन और बाधाओं थे। यहां तक ​​कि अगर आईबीएम के DB2 जैसी आधुनिक प्रणाली में स्थानांतरित कर दिया गया है, तो कई बार पुराने नियमों के तर्क के बाद से बाधाओं को पूरी तरह से लागू नहीं किया जाता है, शायद COBOL "बैच" कार्यक्रमों की एक श्रृंखला में सन्निहित है, इसलिए इसे परिवर्तित करने के लिए व्यावहारिक नहीं होने के रूप में जटिल किया जा सकता है। इसके बजाय स्वचालित उपकरण का उपयोग पुराने COBOL को नए रिलेशनल इंजन के इंटरफेस के साथ एक नए संस्करण में बदलने के लिए किया जा सकता है और थोड़ा ट्वीकिंग के साथ, डेटा अखंडता को संरक्षित किया जाता है ... जब तक कि एक नया ऐप नहीं लिखा जाता है कि सब कुछ और कंपनी को समान रूप से दूषित कर दिया जाए। के लिए अदालत में, हजारों घर-मालिकों के बारे में कहना, जिनके पास नहीं होना चाहिए।


7

अन्य टिप्पणियों के अलावा ...

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


5

व्यक्तिगत रूप से, मुझे लगता है कि ट्रिगर बनाने के लिए बाधाओं को बनाना और बदलना आसान है, उदाहरण के लिए, जो स्रोत कोड का उपयोग करके आपके व्यावसायिक नियम को लागू करने का एक तरीका होगा।

ट्रिगर भी पोर्टेबल होने की संभावना कम है, क्योंकि वे आमतौर पर विक्रेता विशिष्ट भाषाओं में लिखे जाते हैं, जैसे कि पीएल / एसक्यूएल।

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


5
इसके अलावा ट्रिगर अखंडता की गारंटी नहीं देते हैं, पढ़ने की निरंतरता के मुद्दों के कारण।
डेविड एल्ड्रिज

3

उन्हें हमेशा डेटाबेस में पहले लागू किया जाना चाहिए क्योंकि,

  1. डेटाबेस विभिन्न ग्राहकों के बीच अखंडता सुनिश्चित करता है। आपके पास अलग-अलग प्लेटफ़ॉर्म पर अलग-अलग क्लाइंट हो सकते हैं जो डेटाबेस तक पहुँचते हैं। जब आप एक नया क्लाइंट बनाते हैं तो डेटाबेस में बाधाएँ अखंडता के मुद्दों को जोखिम में नहीं डालती हैं। यह आपको पुनर्लेखन या अतिरिक्त पहुंच बिंदु की स्थिति में आपके अवरोधों के क्यू / ए होने से बचाता है।
  2. डेटाबेस में अवरोधों के निर्माण के लिए एक DSL है: SQL DDL!
  3. डेटाबेस सिस्टम कैटलॉग में उन बाधाओं को एक्सेस प्रदान करता है इसलिए एक उचित ORM या "स्कीमा लोडर" उन बाधाओं को पढ़ सकता है और उन्हें आपके आवेदन में ला सकता है। उदाहरण के लिए, यदि आपका डेटाबेस निर्दिष्ट करता है कि आपके पास एक varchar(5)प्रकार है, तो एक अच्छा मौका है कि आप अपनी विशिष्ट भाषा के लिए एक स्कीमा लोडिंग ORM पा सकते हैं जो भाषा प्रकार को स्कीमा के प्रकार में मैप करता है, और कोडांतरण करता है जो आकार में स्वयं का अवरोध है। DBIx for Perl is one such schema loader; यहाँ एंटिटी फ्रेमवर्क के लिए एक और है । इन लोडरों की क्षमता अलग-अलग होती है, लेकिन जो कुछ भी वे प्रदान कर सकते हैं वह डेटाबेस की यात्रा के बिना ऐप में अखंडता सुनिश्चित करने के लिए एक अच्छी शुरुआत है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.