2010-11-08 8 views
56

Tengo una tabla y estoy tratando de agregar un índice único en dos columnas. Esas columnas también están indexadas. Así que mi pregunta es si puedo quitar los índices que eran sólo para una columna o si tengo que usar los tres índices:Cómo implementar un índice único en dos columnas en rieles

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

Gracias por su aclaración Markus

+5

Como nota al margen : Si está utilizando MySQL, no tiene sentido tener su 'used_id' y' content_id' en índices separados si también tiene un índice único de ambas columnas. Esto probablemente también se aplique a otros DB ... Al contrario de lo que espera, tendrá un impacto negativo en el rendimiento (especialmente en inserciones/actualizaciones). – hurikhan77

Respuesta

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

Hay sintaxis alternativas, así: add_index: suscripciones, [: user_id, content_id:], única: => true add_index: suscripciones,% w (content_id user_id), única: => true Son la Lo mismo, solo una sintaxis diferente para especificar las columnas. –

+12

@ FrançoisBeausoleil '% w (id_usuario_id_id)' en ruby ​​solo crea una matriz de cadenas, no es especial para los rieles. Puede hacer lo mismo con '" user_id content_id ".split' que todavía está creando una matriz de cadenas. Estoy seguro de que lo sabes, este comentario es solo para que otros lectores no relacionen esto con los rieles de forma incorrecta :) –

Cuestiones relacionadas