2010-11-08 12 views
56

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

+5

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

धन्यवाद एक पक्ष नोट के रूप में: तो मेरे सवाल है, तो मैं सिर्फ अनुक्रमित है जो सिर्फ एक स्तंभ के लिए या यदि थे मैं सभी तीन अनुक्रमित उपयोग करने के लिए निकाल सकते हैं है : यदि आप MySQL का उपयोग कर रहे हैं तो यह अलग-अलग इंडेक्स में आपकी 'used_id' और' content_id' रखने का कोई अर्थ नहीं है यदि आपके पास दोनों कॉलम का अनन्य अनुक्रमणिका भी है। यह शायद अन्य डीबी पर भी लागू होता है ... आप जो अपेक्षा करते हैं उसके विपरीत, इसका प्रदर्शन (विशेष रूप से सम्मिलन/अपडेट) पर नकारात्मक प्रभाव पड़ता है। अद्वितीय => true वे कर रहे हैं: – hurikhan77

उत्तर

126
add_index :subscriptions, [:user_id, :content_id], unique: true 
+6

वैकल्पिक वाक्यविन्यास के साथ-साथ हैं: add_index: सदस्यता, [: user_id,: content_id],: अद्वितीय => true add_index: सदस्यता,% w (user_id content_id), कॉलम निर्दिष्ट करने के लिए एक ही बात, बस अलग वाक्यविन्यास। –

+12

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

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