2010-11-08 4 views
56

Ich habe eine Tabelle und ich versuche, einen eindeutigen Index für zwei Spalten hinzuzufügen. Diese Spalten sind ebenfalls indexiert. Also meine Frage ist, wenn ich nur den Indizes entfernen, die nur für eine Spalte waren oder wenn ich alle drei Indizes verwenden:So implementieren Sie einen eindeutigen Index für zwei Spalten in Schienen

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

Vielen Dank für Ihre Klarstellung Markus

+5

Als Randbemerkung : Wenn Sie MySQL verwenden, macht es keinen Sinn, Ihre 'used_id' und' content_id' in separaten Indizes zu haben, wenn Sie auch einen eindeutigen Index für beide Spalten haben. Dies gilt wahrscheinlich auch für andere DBs ... Entgegen Ihrer Erwartung wird sich dies negativ auf die Performance (insbesondere Einfügungen/Updates) auswirken. – hurikhan77

Antwort

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

Es gibt alternative Syntaxen auch: add_index: Abonnements, [: user_id,: content_id]: unique => true add_index: Abonnements% w (user_id content_id): unique => true Sie sind die Gleiche, nur andere Syntax für die Angabe der Spalten. –

+12

@ FrançoisBeausoleil '% w (user_id content_id)' in Ruby erstellt nur ein Array von Streichern, das ist nicht speziell für Rails. Sie können das gleiche mit '" user_id content_id ".split" tun, die immer noch ein Array von Strings erstellt. Ich bin sicher, dass Sie das wissen, dieser Kommentar ist nur so, dass andere Leser dies nicht mit Schienen falsch beziehen :) –

Verwandte Themen