Come implementare un indice univoco su due colonne nei binari


95

Ho una tabella e sto cercando di aggiungere un indice univoco su due colonne. Anche queste colonne sono indicizzate. Quindi la mia domanda è se posso rimuovere gli indici che erano solo per una colonna o se devo usare tutti e tre gli indici:

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

5
Come nota a margine: se stai usando MySQL, non ha senso avere il tuo used_ide content_idin indici separati se hai anche un indice univoco di entrambe le colonne. Questo probabilmente vale anche per altri DB ... Contrariamente a quanto ci si aspetta, avrà un impatto negativo sulle prestazioni (soprattutto inserimenti / aggiornamenti).
hurikhan77

Risposte:


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

6
Esistono anche sintassi alternative: add_index: subscriptions, [: user_id,: content_id],: unique => true add_index: subscriptions,% w (user_id content_id),: unique => true Sono la stessa cosa, solo una sintassi diversa per specificare le colonne.
François Beausoleil

14
@ FrançoisBeausoleil %w(user_id content_id)in ruby ​​crea solo un array di stringhe, non è speciale per i binari. Puoi fare lo stesso con "user_id content_id".splitcui sta ancora creando un array di stringhe. Sono sicuro che lo sai, questo commento è solo così gli altri lettori non lo collegano a rail in modo errato :)
Khaja Minhajuddin

Quale sarebbe la sintassi per questo sulla creazione di tabelle? <- trovato risposta ( stackoverflow.com/questions/4870961/... )
tnaught

Sto avendo uno strano problema dopo averlo usato. Non è possibile eseguire alcuna nuova migrazione utilizzando rake db: migrate. Solo in grado di eseguire la migrazione utilizzando il numero di versione rake db: migrate: up VERSION = 20180411062714 un file alla volta. Avevo già i dati sulla tabella su cui ho fatto un vero unico su due colonne.
codice codec

@ FrançoisBeausoleil Beh, in realtà non sono la stessa cosa, %w(user_id content_id)è un array di stringhe. Che è lo stesso di ['user_id', 'content_id']. La diversa notazione per Array of Symbols è %i(user_id content_id), o come l'ha scritta l'OP[:user_id, :content_id]
Sasa Blagojevic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.