मैं आमतौर पर टेबल बनाने के लिए अपने NodeJS प्रोजेक्ट्स में माइग्रेशन का उपयोग करता हूं। मैं sync({ force: true }) का उपयोग नहीं करता। इसलिए, हर बार जब मुझे डीबी स्कीमा में बदलाव की आवश्यकता होती है, तो मैं माइग्रेशन के साथ जाता हूं। इस तरह, मैं सटीक परिदृश्य को उत्पादन के रूप में रख सकता हूं।

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

1) users - id, name, email, password

2) posts - id, title, content, user_id, category_id

3) categories - id, name

यहां, अगर मैं इस क्रम में माइग्रेशन चलाता हूं, तो मुझे एक त्रुटि मिलती है।

ERROR: Cannot add foreign key constraint

ऐसा इसलिए है, क्योंकि posts टेबल माइग्रेशन के चलने तक categories टेबल अभी तक नहीं बनी है।

तो, मेरे पास यहां क्या विकल्प हैं।

  1. माइग्रेशन को सही क्रम में बनाएं ताकि वे उसी क्रम में चल सकें।

  2. बाद में अलग-अलग माइग्रेशन के साथ विदेशी कुंजी कॉलम जोड़ें (सिर्फ एक कॉलम जोड़ने के लिए)।

  3. या sync({ force: true }) का उपयोग करें, इसलिए मॉडल में कॉलम जोड़ते समय और एसोसिएशन जोड़ते समय टेबल बनाए जाएंगे।

  4. या कोई अन्य उपाय

क्या आप कृपया समझा सकते हैं कि मुझे यहां क्या करना चाहिए ..

अग्रिम में धन्यवाद।

0
Tharindu Thisarasinghe 10 पद 2020, 20:20

1 उत्तर

सबसे बढ़िया उत्तर

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

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

पहले और दूसरे मामलों के लिए आपके पास सभी वृद्धिशील संरचना परिवर्तनों और कुछ माइग्रेशन को रोलबैक करने के साथ-साथ आपके ऐप और डीबी के विभिन्न संस्करणों को तैनात करने की क्षमता पर बढ़िया नियंत्रण है।

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

1
Anatoly 10 पद 2020, 20:33