es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se agregan restricciones complejas en una tabla?

En SQL Server (o cualquier otro lenguaje SQL probablemente), ¿Cómo se puede asegurar que una tabla siempre cumpla con una restricción compleja?

Por ejemplo, imaginemos que una tabla tiene solo la columna A y B.

La restricción que quiero imponer es que todas las filas que contienen el mismo valor para la columna A (por ejemplo, ‘a’), también tengan el mismo valor para la columna B (por ejemplo, ‘b’). Por ejemplo, esto no está permitido:

A B C
a1 b c1
a1 c c2
a2 d c3

Pero esto sí está permitido:

|A | B | C |
|–|–|–|
a1 | b | c1 |
a1 | b | c2 |
a2 | d | c3 |

Este es un ejemplo de restricción, pero podría haber otros más complejos (es decir, que dependan de más columnas, etc.). Aquí creo que esta restricción se podría expresar en términos de clave primaria, pero supongamos que no se puede.

¿Cuál es la forma de imponer esto?

Lo que se me ocurre es que cada vez que se quiere hacer una inserción, en su lugar, se debe pasar por un procedimiento almacenado. El procedimiento almacenado haría una transacción atómica y comprobaría si se cumpliría la restricción si se hiciera la actualización, y “rechazaría” la actualización si se violara la restricción, pero esto parece bastante complejo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La mejor manera de hacer cumplir esta restricción es crear un índice único en la tabla. Esto asegurará que la tabla siempre verifique la restricción, ya que no permitirá valores duplicados para las columnas A y B. Para crear un índice único, puede usar la siguiente declaración SQL:

    CREATE UNIQUE INDEX my_index ON my_table (A, B);
    

Comments are closed.