के संयोजन के लिए अद्वितीय बाधा जोड़ने के लिए एक माइग्रेशन मुझे कॉलम के संयोजन के लिए अद्वितीय बाधा लागू करने के लिए माइग्रेशन की आवश्यकता है। यानी people
तालिका के लिए, first_name
, last_Name
और Dob
का संयोजन अद्वितीय होना चाहिए।कॉलम
कॉलम
उत्तर
add_index :people, [:firstname, :lastname, :dob], :unique => true
हाय आप अद्वितीय सूचकांक अपने प्रवास में कॉलम के उदाहरण
add_index(:accounts, [:branch_id, :party_id], :unique => true)
या अलग अद्वितीय अनुक्रमणिका के लिए प्रत्येक स्तंभ के लिए जोड़ सकते हैं
क्षमा करें, यह काम किया, पहले मैं संपादन और मौजूदा माइग्रेशन जो काम नहीं किया द्वारा की कोशिश की, फिर एक नया जोड़ा और यह काम किया, धन्यवाद। – rangalo
आप एक के बिना एक बाधा जोड़ सकते हैं सूचकांक। यह इस बात पर निर्भर करेगा कि आप किस डेटाबेस का उपयोग कर रहे हैं। पोस्टग्रेज़ के लिए नीचे नमूना माइग्रेशन कोड है। (tracking_number, carrier)
उन स्तंभों की एक सूची है जिन्हें आप बाधा के लिए उपयोग करना चाहते हैं।
class AddUniqeConstraintToShipments < ActiveRecord::Migration
def up
execute <<-SQL
alter table shipments
add constraint shipment_tracking_number unique (tracking_number, carrier);
SQL
end
def down
execute <<-SQL
alter table shipments
drop constraint if exists shipment_tracking_number;
SQL
end
end
अलग-अलग बाधाएं आप जोड़ सकते हैं। Read the docs
[पोस्टग्रेएसक्यूएल 9.4 के लिए डॉक्स] (http://www.postgresql.org/docs/9.4/static/ddl-constraints.html#DDL-CONSTRAINTS-UNIQUE- कंसस्ट्रेंट्स) कहते हैं: _ एक अद्वितीय बाधा जोड़ने से स्वचालित रूप से एक अद्वितीय btree बन जाएगा बाधा में इस्तेमाल कॉलम या स्तंभों के समूह पर सूचकांक। आंशिक अनुक्रमणिका बनाकर केवल कुछ पंक्तियों पर एक विशिष्टता बाधा लागू की जा सकती है ._ तो आईएमएचओ को कच्चे एसक्यूएल को छोड़ने की कोई आवश्यकता नहीं है जब परिणाम मूल रूप से 'add_index' विधि का उपयोग करने जैसा ही होगा। ;) –
असल में एक कारण है: यह एक कार्यान्वयन विस्तार और [डॉक्स] (http://www.postgresql.org/docs/9.3/static/indexes-unique.html) द्वारा निराश है। यह भी ध्यान रखें कि आप बाध्यता को नाम से संदर्भित नहीं कर सकते हैं, क्योंकि इसे 'pg_constraint' तालिका में नहीं जोड़ा गया है। – kaikuchn
howmanyofme.com के अनुसार, अकेले संयुक्त राज्य अमेरिका में "जॉन स्मिथ नामक 46,427 लोग हैं"। यह लगभग 127 साल है। चूंकि यह मनुष्य के औसत जीवनकाल पर अच्छा है, इसका मतलब है कि एक डीओबी संघर्ष गणितीय रूप से निश्चित है।
मैं बस इतना कह रहा हूं कि अद्वितीय क्षेत्रों के उस विशेष संयोजन से भविष्य में अत्यधिक उपयोगकर्ता/ग्राहक निराशा हो सकती है।
कुछ ऐसा मानें जो वास्तव में अनोखा है, राष्ट्रीय पहचान संख्या की तरह, यदि उपयुक्त हो।
(मुझे लगता है मैं इस एक के साथ पार्टी के लिए बहुत देर हो रही है, लेकिन यह भविष्य पाठकों मदद कर सकता है।)
एचआरएम ... आप निश्चित रूप से सही हैं। लेकिन शायद यह सिर्फ एक उदाहरण था कि इयान सिर्फ प्रश्न को स्पष्ट करने के लिए क्या करना चाहता था। – eritiro
शायद। हालांकि इयान के लिए जवाब इरादा नहीं था। या वास्तव में रंगलो। –
उपयोगकर्ताओं और पोस्ट के बीच एक मेज में शामिल होने का विशिष्ट उदाहरण में:
create_table :users
create_table :posts
create_table :ownerships do |t|
t.belongs_to :user, foreign_key: true, null: false
t.belongs_to :post, foreign_key: true, null: false
end
add_index :ownerships, [:user_id, :post_id], unique: true
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_ownerships_on_user_id_and_post_id"
DETAIL: Key (user_id, post_id)=(1, 1) already exists.
: INSERT INTO "ownerships" ("user_id", "post_id") VALUES ($1, $2) RETURNING "id"
जैसे:
इसी तरह के दो रिकॉर्ड बनाने के लिए एक डेटाबेस त्रुटि (मेरे मामले में Postgres) फेंक जाएगा कोशिश कर रहा है कर रही:
Ownership.create!(user_id: user_id, post_id: post_id)
Ownership.create!(user_id: user_id, post_id: post_id)
पूरी तरह से runnable उदाहरण: https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
db/schema.rb
उत्पन्न: https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744a
- 1. कॉलम बनाम बदलें कॉलम
- 2. jqGrid कॉलम कॉलम हेडर
- 3. कॉलम
- 4. कॉलम
- 5. कॉलम
- 6. कॉलम
- 7. कॉलम
- 8. कॉलम
- 9. कॉलम
- 10. कॉलम
- 11. कॉलम
- 12. कॉलम
- 13. कॉलम
- 14. कॉलम
- 15. कॉलम
- 16. कॉलम
- 17. jQGrid कॉलम चयनकर्ता छुपा कॉलम
- 18. टेस्ट कॉलम मौजूद है, कॉलम जोड़ें, और कॉलम
- 19. एसक्यूएल: प्राथमिक कुंजी कॉलम। कृत्रिम "आईडी" कॉलम बनाम "प्राकृतिक" कॉलम
- 20. हाइबरनेट मैपिंग: एकाधिक कॉलम में एक कॉलम
- 21. आईई वैकल्पिक कॉलम-गणना और कॉलम-गैप
- 22. कॉलम नाम से एक्सेल कॉलम नंबर
- 23. 4 कॉलम के लिए 2 कॉलम
- 24. कॉलम स्टोर: कॉलम आधारित डेटाबेस की तुलना
- 25. SQLServer पहचान कॉलम के साथ कॉलम
- 26. कितने कॉलम बहुत अधिक कॉलम हैं?
- 27. एक कॉलम
- 28. रैडग्रिड कॉलम
- 29. कॉलम नाम
- 30. प्रत्येक कॉलम
मुझे लगता है कि एक अद्वितीय इंडेक्स जोड़ रहा है, * नहीं * एक बाधा। या सूचकांक बाधा भी जोड़ता है? –
नहीं, यह सब अच्छा है। मेरी गलती! अद्वितीय बाधा अद्वितीय सूचकांक के साथ आता है। –
मैं @ पॉल-कैंट्रेल से सहमत हूं: केवल एक बाधा जोड़ने के लिए कोई तरीका नहीं है, एक सूचकांक (जिसमें डीबी स्टोरेज प्रभाव है) –