2010-09-02 10 views
7

मैं हाल ही में सोच रहा था। आइए कहें कि हम जेएसएफ + स्प्रिंग + जेपीए/हाइबरनेट (या अच्छी तरह से किसी अन्य तकनीक) के साथ एक वेबपैप कर रहे हैं और कहें कि हमारे पास "उपयोगकर्ता" इकाई है। हम चाहते हैं कि उपयोगकर्ता एक अद्वितीय लॉगिन करे। अगर हम इसे करना चाहते हैं तो हम "लॉग इन" कॉलम पर @UniqueConstraint डाल सकते हैं, लेकिन फिर भी हमारे आवेदन को उपयोगकर्ता पंजीकरण के दौरान जांचना है कि क्या उपयोगकर्ता इनपुट मान्य है (अद्वितीय) या नहीं, इसके बिना और केवल डीबी बाधा के साथ हमें बस एक त्रुटि मिलेगी। इससे मुझे लगता है, डीबी बाधाएं वास्तव में आवश्यक/सहायक हैं? जब हम किसी को हमें कोई नुकसान पहुंचाएंगे तो मैं केवल दो बार सोच सकता हूं जब कोई हमें हैक करने की कोशिश करता है (लेकिन मुझे लगता है कि हमारा ऐप एसक्यूएल इंजेक्शन सबूत होना चाहिए) या हम डीबी सामग्री को मैन्युअल रूप से बदलने की कोशिश करते हैं (जो नहीं होना चाहिए वास्तव में होता है)। असल में अब मैं इसके बारे में सोचता हूं, क्या डीबी की बाधाएं सामान्य आवश्यक/अच्छी प्रैक्टिस में हैं? एक स्ट्रिंग आदिडीबी पर आवश्यक अनन्य बाधाएं हैं?

+0

क्या कोई वास्तव में सोचता है कि धारणा के तहत एक हमला वेक्टर चौड़ा खुला छोड़ना हमेशा ठीक है, हमले को एक विशिष्ट अलग वेक्टर 1 के माध्यम से आना चाहिए? या किसी ने लिखा है कि उत्तेजक और चर्चा को प्रोत्साहित किया जाए? – bbadour

उत्तर

8

मेरे लिए, स्पष्ट हाँ, Database as a Fotress दान चक द्वारा 97 से देख की लंबाई की तरह सोचता है कि हर सॉफ्टवेयर आर्किटेक्ट पता होना चाहिए। वह कहता है कि मैं इससे ज्यादा बेहतर था।

+0

वास्तव में लिंक की तरह, धन्यवाद! –

+0

किताबें बहुत अच्छी हैं, हालांकि इसमें सभी निबंध * ओपन सोर्स * हैं, इसलिए आप उन्हें उस विकी पर –

4

हाँ, वे हैं। वे निम्नतम स्तर पर डेटा अखंडता को लागू करते हैं।

आप मैन्युअल रूप से डीबी सामग्री को बदलने के लिए चाहते हो सकता है (यानी नए संस्करण के लिए उन्नयन)

आप कुछ अपने कोड में विवश जाँच करने के लिए भूल जाते हैं हो सकता है।

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

3

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

सच यह है कि मध्यम स्तर के अनुप्रयोग आते हैं और जाते हैं, लेकिन डेटा हमेशा के लिए रहता है।

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

1

अक्सर जब आप कॉलम का एक सेट अनूठा होने की घोषणा करते हैं, तो यह ऐसा कुछ है जिसे आप क्वेरी करना चाहते हैं - इसलिए इसे किसी भी तरह से अनुक्रमित किया जाना चाहिए।

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

0

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

1

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

0

लेकिन अभी भी हमारे आवेदन है कि क्या उपयोगकर्ता इनपुट वैध (अद्वितीय) नहीं है या उपयोगकर्ता पंजीकरण के दौरान जाँच करने के लिए है, कि बिना और केवल DB बाधा के साथ हम केवल एक त्रुटि मिल जाएगा।

यह सबसे मजेदार बात है जिसे मैंने कभी पढ़ा है। आपको बस एक त्रुटि मिलती है? वास्तव में आपको बस सही चाहिए? कभी फंसाने में त्रुटि के बारे में सुना? किसी भी घंटी बजाने की कोशिश करो?

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

+0

के लिए पढ़ सकते हैं, ठीक है, मुझे उस पर और अधिक पढ़ना होगा क्योंकि मैं कस्टम जेएसएफ अपवाद हैंडलर का उपयोग कर रहा हूं जो रीडायरेक्ट करता है मुझे एक पृष्ठ_not_found.jsf पर हर बार जब यह अपवाद प्राप्त करता है और चूंकि कॉन्स्ट्रेन्ट विलोएशन अपवाद अपवाद का एक उपन्यास है तो इसे भी पकड़ा जाएगा और पृष्ठ पर रीडायरेक्ट किया जाएगा। यकीन नहीं है कि मेरे उपयोगकर्ता इससे खुश होंगे। –

+0

डेटाबेस से फेंकने वाली त्रुटियों पर निर्भर होने का मतलब है कि आपको एक समय में एक त्रुटि मिलती है, जिससे एक भयानक उपयोगकर्ता अनुभव होता है। यदि आप अपनी सभी समस्याओं को सामने की जांच करते हैं, तो आप उन्हें सभी उपयोगकर्ताओं को एक साथ प्रदर्शित कर सकते हैं। – Shlomo

0

हां। केवल कुंजी उल्लंघन त्रुटि को पकड़ें और कुंजी बाधा आपके लिए अतिरिक्त जांच के अतिरिक्त ओवरहेड किए बिना आपके लिए काम करेगी।

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