He tenido esto aparecido un par de veces en mi carrera, y ninguno de mis compañeros locales parece ser capaz de responderlo. Digamos que tengo una tabla que tiene un campo de "Descripción" que es una clave candidata, excepto que a veces un usuario se detiene a la mitad del proceso. Entonces, para quizás el 25% de los registros, este valor es nulo, pero para todos los que no son NULL, debe ser único.SQL ¿Puedo tener una restricción "condicionalmente única" en una tabla?
Otro ejemplo podría ser una tabla que debe mantener múltiples "versiones" de un registro, y un valor de bit indica cuál es la "activa". Por lo tanto, la "clave candidata" siempre está poblada, pero puede haber tres versiones que sean idénticas (con 0 en el bit activo) y solo una que esté activa (1 en el bit activo).
Tengo métodos alternativos para resolver estos problemas (en el primer caso, aplicar el código de la regla, ya sea en el procedimiento almacenado o la capa de negocios, y en el segundo, llenar una tabla de archivo con un desencadenador y UNION las tablas cuando necesito un historial). No quiero alternativas (a menos que haya soluciones mejores demostrables), me pregunto si algún sabor de SQL puede expresar "singularidad condicional" de esta manera. Estoy usando MS SQL, así que si hay una manera de hacerlo en eso, genial. En su mayoría solo estoy académicamente interesado en el problema.
duplicados Posible: http://stackoverflow.com/questions/866061/conditional-unique-constraint –
¿Qué versión de SQL Server? – gbn
Gracias por el puntero In silico. Definitivamente se aplica a la situación 2. Intenté buscar antes de publicar, pero en realidad no busqué las palabras clave que usé en el título o ¡lo habría encontrado! El enlace que publica no resuelve la situación n. ° 1, que se resuelve con la sugerencia de Tom H. en 2005 y Arthur en 2008. gbn: estoy usando 2005, por lo que no sabía sobre el índice filtros en 2008. –