Estoy intentando crear una restricción INDEX ÚNICA para dos columnas, pero solo cuando otra columna contiene el valor 1. Por ejemplo, column_1
y column_2
deberían ser ÚNICOS solo cuando active = 1
. Las filas que contienen active = 0
pueden compartir valores para column_1
y column_2
con otra fila, independientemente de cuál sea el valor de la otra fila para active
. Pero las filas donde active = 1
no pueden compartir valores de column_1
o column_2
con otra fila que tenga active = 1
.Restricción ÚNICA, solo cuando un campo contiene un valor específico
Lo que quiero decir con "compartir" son dos filas que tienen el mismo valor (es) en la (s) misma (s) columna (s). Ejemplo: row1.a = row2.a AND row1.b = row2.b. Los valores se compartirían solo si ambas columnas en la fila 1 coincidían con las otras dos columnas en la fila2.
Espero haber sido claro. : \
Recibí una sugerencia similar en IRC; crea una tabla activa y una tabla inactiva. Pero la forma en que lo pones tiene más sentido; tener una tabla histórica y una tabla activa. Sin embargo, esta tabla tiene muchos campos y parece que duplicar esos campos en dos tablas sería lo incorrecto. ¿Cómo sugeriría que evite este tipo de redundancia? – Sam
Una pequeña desnormalización puede ser muy útil, así que no se preocupe por las definiciones duplicadas. Por supuesto, también tendrá que hacer cambios en la tabla original a la tabla histórica, así que eso es un poco sobrecargado, pero, en mi humilde opinión, vale la pena limpiar los datos. – SWeko
Hmm, ¿y si tuviera que separar solo los datos que necesitan una indexación única? Las tablas: mydata, mydata_active, mydata_inactive. De esta forma mydata contiene la clave principal y las columnas de datos.Y, mydata_active y mydata_inactive solo contendrán las columnas que deben indexarse de forma exclusiva y una clave externa que hace referencia a mydata. Esta es otra forma, pero requiere una tabla extra (tercera). – Sam