2010-11-08 12 views
56

Ho una tabella e sto cercando di aggiungere un indice univoco su due colonne. Queste colonne sono anche indicizzate. Quindi la mia domanda è se riesco proprio a rimuovere gli indici che erano solo per una colonna o se devo usare tutti e tre gli indici:Come implementare un indice univoco su due colonne nei binari

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

Grazie per il vostro chiarimento Markus

+5

Come nota a margine : Se si utilizza MySQL, non ha senso avere 'used_id' e 'content_id' in indici separati se si ha anche un indice univoco di entrambe le colonne. Questo probabilmente si applica anche ad altri DB ... Contrariamente a quanto previsto, avrà un impatto negativo sulle prestazioni (in particolare inserimenti/aggiornamenti). – hurikhan77

risposta

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

Ci sono sintassi alternative così: add_index: abbonamenti, [: user_id,: content_id], unico: => true add_index: abbonamenti,% w (content_id user_id), unico nel suo genere: => true Sono il stessa cosa, solo sintassi diversa per specificare le colonne. –

+12

@ FrançoisBeausoleil '% w (user_id content_id)' in ruby ​​crea solo un array di stringhe, non è speciale per le guide. Puoi fare lo stesso con "" user_id content_id ".split' che sta ancora creando una serie di stringhe. Sono sicuro che lo sai, questo commento è solo così che gli altri lettori non riferiscono questo a rotaie in modo errato :) –