23

मुझे following post में एक ही समस्या है।क्या रेल को डेटाबेस-स्तरीय बाधाओं की आवश्यकता है?

तो मैं सोच रहा हूं, रेल डिफ़ॉल्ट रूप से विदेशी कुंजी उत्पन्न करने का समर्थन क्यों नहीं करते? क्या यह आवश्यक नहीं है? या क्या हम इसे मैन्युअल रूप से करना चाहते हैं?

उत्तर

56

डाटाबेस बाधाओं को आपकी कार में सीट-बेल्ट पहनने की आवश्यकता नहीं है। आप अपनी पसंद के चारों ओर ड्राइव कर सकते हैं और समस्या आने तक सबकुछ बढ़िया काम करेगा। सीट बेल्ट (बाधाएं) आपको (डेटा) सुरक्षित रखती हैं।

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

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

कारण ActiveRecord बॉक्स के बाहर विदेशी कुंजी का समर्थन नहीं करता है क्योंकि यह डेटाबेस-अज्ञेयवादी है, और विदेशी कुंजी सभी डेटाबेस सिस्टम द्वारा सार्वभौमिक रूप से समर्थित नहीं हैं।

+13

मुझे सीट-बेल्ट समानता पसंद है! – Zabba

+1

एक अन्य कारण: जब तक कि आपकी रेल ऐप एक प्रक्रिया नहीं है, एक थ्रेड, एक सर्वर पर चल रहा है, यह एक साथ कई अनुरोधों को संसाधित कर सकता है। 'मान्यताओं की तरह चीजें: उपयोगकर्ता नाम, विशिष्टता: सत्य 'उस मामले में विफल हो सकती है, क्योंकि प्रत्येक ऐप इंस्टेंस अनुरोधित उपयोगकर्ता नाम के लिए जांच करता है, उसे नहीं मिला, और इसे सम्मिलित करता है। केवल एक अद्वितीय सूचकांक इसे रोकता है। आम तौर पर, कोई भी चेक "जैसे यह डेटा मान्य है डेटाबेस में क्या है ** अभी अभी **?" केवल डेटाबेस द्वारा ही विश्वसनीय रूप से किया जा सकता है। –

9

आप Foreigner प्लगइन के साथ विदेशी-कुंजी समर्थन जोड़ सकते हैं।

ActiveRecord समर्थन के लिए सभी समर्थित डेटाबेस विदेशी कुंजी का समर्थन नहीं करते हैं, इसलिए रेल ढांचे में इसे मूल सुविधा के रूप में शामिल नहीं किया गया है।


नोट: उपरोक्त अब सटीक नहीं है, रेल में added FK support के रूप में।

+0

मुझे पता है ..... मैं बस जानना चाहता हूं..क्या हमें इसकी आवश्यकता है ??? ..... – jojo

+2

संक्षिप्त उत्तर है, हाँ यह महत्वपूर्ण है लेकिन डिफ़ॉल्ट रूप से आपको 'विकल्प' का उपयोग करना होगा हैश। ActiveRecord अमूर्तता के स्तर पर रहता है जहां यह एफके के लिए समर्थन नहीं ले सकता है। –

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