रेल में दो स्तंभों पर एक अद्वितीय सूचकांक कैसे लागू करें


95

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

add_index "subscriptions", ["user_id"]
add_index "subscriptions", ["content_id"]
add_index "subscriptions", ["user_id"], ["content_id"], :unique => true

5
एक साइड नोट के रूप में: यदि आप MySQL का उपयोग कर रहे हैं, तो इसका कोई मतलब नहीं है कि आपके पास used_idऔर content_idअलग-अलग इंडेक्स में हैं यदि आप दोनों कॉलम का एक अनूठा सूचकांक भी बना रहे हैं। यह संभवतः अन्य DB पर भी लागू होता है ... आप जो अपेक्षा करते हैं, उसके विपरीत, इसका प्रदर्शन (विशेष रूप से सम्मिलन / अद्यतन) पर नकारात्मक प्रभाव पड़ेगा।
हर्किहन

जवाबों:


186
add_index :subscriptions, [:user_id, :content_id], unique: true

6
वैकल्पिक सिंटैक्स भी हैं: add_index: सदस्यताएँ, [: user_id,: content_id],: अद्वितीय => सत्य add_index: सदस्यताएँ,% w (user_id content_id): अद्वितीय = सही वे एक ही चीज़ हैं, बस अलग वाक्य-विन्यास कॉलम निर्दिष्ट करने के लिए।
फ्रांस्वा ब्यूसोइल

14
%w(user_id content_id)रूबी में @ फ्रांस्वा ब्यूसोइल सिर्फ स्ट्रिंग्स की एक सरणी बनाता है, यह रेल के लिए विशेष नहीं है। आप वही कर सकते हैं "user_id content_id".splitजिसके साथ अभी भी तार की एक सरणी बन रही है। मुझे यकीन है कि आप यह जानते हैं, यह टिप्पणी सिर्फ अन्य पाठकों को गलत तरीके से रेल से संबंधित नहीं है :)
खाजा मिन्हाजुद्दीन

टेबल निर्माण पर इसके लिए वाक्य रचना क्या होगी? <- पाया गया उत्तर ( stackoverflow.com/questions/4870961/… )
tnaught

इसके इस्तेमाल के बाद मुझे अजीब समस्या हो रही है। रेक db का उपयोग करके कोई भी नया माइग्रेशन चलाने में सक्षम नहीं: माइग्रेट करें। केवल संस्करण संख्या रेक db का उपयोग करके माइग्रेशन चलाने में सक्षम: माइग्रेट: अप VERSION = 20180411062714 एक बार में एक फ़ाइल। मेरे पास पहले से ही उस तालिका का डेटा था जिस पर मैंने दो कॉलम पर अद्वितीय सत्य किया था।
thedudecodes

@ फ्रांस्वा ब्यूसोलोल खैर, वास्तव में वे एक ही चीज नहीं हैं, %w(user_id content_id)स्ट्रिंग्स का एक ऐरे है। जो जैसा है वैसा ही है ['user_id', 'content_id']। Array of Symbols के लिए अलग-अलग अंकन है %i(user_id content_id), या जैसा कि ओपी ने लिखा है[:user_id, :content_id]
सास ब्लागजेविक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.