Cuando trabajamos con SQL Server, hay momentos en los que necesitamos realizar acciones diferentes o alternativas durante las consultas a la base de datos. Esto puede ser por motivos de protección de datos o abstracción de datos. En SQL Server, podemos lograr esto utilizando reglas.
Una regla en SQL Server nos permite definir una acción alternativa en las operaciones de inserción, actualización o eliminación. Genera una consulta adicional, lo cual puede afectar el rendimiento del sistema. Veamos cómo podemos crear reglas en SQL Server.
Creando reglas
Para crear una regla en SQL Server, utilizamos la siguiente sintaxis:
CREATE RULE nombre_de_regla AS
@evento
[WHERE condición]
[FOR nombre_de_tabla]
[EN LUGAR DE]
[comando]
Los parámetros utilizados en la sintaxis son:
- nombre_de_regla: El nombre de la regla a crear.
- @evento: El evento en el que se debe activar la regla. Esto puede ser SELECT, INSERT, UPDATE o DELETE.
- condición: Una expresión SQL opcional para especificar cuándo debe ejecutarse la regla.
- nombre_de_tabla: El nombre de la tabla donde se aplica la regla.
- EN LUGAR DE: Especifica que la regla debe ejecutarse en lugar del comando original.
- comando: La acción alternativa que debe realizarse.
Dentro de la condición y el comando, podemos usar los nombres de tabla especiales INSERTED y DELETED para hacer referencia a los valores en la tabla referenciada. La tabla INSERTED contiene los nuevos valores para una operación de inserción o actualización, mientras que la tabla DELETED contiene los valores antiguos para una operación de actualización o eliminación.
Escenarios prácticos
Exploraremos algunos escenarios comunes donde las reglas pueden ser útiles:
Escenario 1: Protección de datos
Supongamos que tenemos el requisito de evitar que alguien actualice cualquier dato en la tabla Employee. Podemos lograr esto utilizando una regla:
CREATE RULE PrevenirActualización AS
ON UPDATE TO Employee
DO EN LUGAR DE NADA;
Con esta regla en su lugar, cualquier consulta de actualización en la tabla Employee no tendrá efecto.
Escenario 2: Registro de auditoría
Supongamos que necesitamos realizar un seguimiento de cualquier actualización realizada en la tabla Employee en una tabla de registro separada llamada Employee_Log. Podemos lograr esto utilizando una regla y una tabla de registro separada:
CREATE TABLE Employee_Log (
Nombre_Empleado TEXT,
ID_Empleado INTEGER,
Usuario_Empleado TEXT,
Fecha_Creación TIMESTAMP
);
CREATE RULE RegistrarEmpleado AS
ON UPDATE TO Employee
WHERE NEW.ID_Empleado <> OLD.ID_Empleado
DO INSERT INTO Employee_Log VALUES (
NEW.Nombre,
NEW.ID_Empleado,
CURRENT_USER,
CURRENT_TIMESTAMP
);
Con esta regla en su lugar, cualquier consulta de actualización en la tabla Employee que cambie el ID_Empleado también insertará una entrada correspondiente en la tabla Employee_Log.
Conclusión
Las reglas de SQL Server proporcionan una forma de realizar acciones alternativas durante las consultas a la base de datos. Pueden ser útiles para la protección de datos, la abstracción de datos y el registro de auditoría. Sin embargo, es recomendable utilizar desencadenadores en lugar de reglas en la mayoría de los casos. Las reglas pueden afectar el rendimiento, especialmente cuando varias filas califican para una consulta de actualización. En tales casos, una regla genera solo una consulta adicional para todas las filas calificadas en su conjunto, lo cual beneficia el rendimiento de la base de datos.
En nuestros próximos artículos, exploraremos escenarios de creación de reglas más complejos con diferentes casos de uso prácticos.