Ejemplos Prácticos de Implementación de Triggers y Restricciones SQL

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 6,97 KB

Ejemplos Prácticos de Implementación de Triggers y Restricciones SQL

Disparadores (Triggers) en SQL

Los disparadores son objetos de base de datos que se ejecutan automáticamente en respuesta a ciertos eventos, como inserciones, actualizaciones o eliminaciones de datos. A continuación, se presentan ejemplos de su implementación.

1. Disparador para Descontar Existencias al Realizar un Pedido

Este disparador se activa al insertar un nuevo registro en la tabla Pedido y descuenta la cantidad pedida de las existencias en la tabla Producto.

CREATE TRIGGER TR_1
ON Pedido
FOR INSERT
AS
BEGIN
    UPDATE Producto
    SET Existencias = Existencias - (SELECT Cantidad FROM inserted)
    WHERE Id_Producto = (SELECT Id_Producto FROM inserted);
END;

2. Disparador para Revertir Existencias al Eliminar un Pedido

Este disparador se ejecuta al eliminar un registro de la tabla Pedido y suma la cantidad eliminada de nuevo a las existencias en la tabla Producto.

CREATE TRIGGER TR_2
ON Pedido
FOR DELETE
AS
BEGIN
    UPDATE Producto
    SET Existencias = Existencias + (SELECT Cantidad FROM deleted)
    WHERE Id_Producto = (SELECT Id_Producto FROM deleted);
END;

3. Mostrar Disparadores Creados

Para verificar los disparadores asociados a una tabla específica, se puede utilizar el procedimiento almacenado sp_helptrigger.

EXEC sp_helptrigger Pedido;

4. Disparador para Registrar Eliminación de Clientes en Historial

Este disparador se activa al eliminar un cliente de la tabla CLIENTES y registra la fecha, una descripción y el usuario que realizó la eliminación en la tabla HISTORIAL.

SELECT * FROM CLIENTES; -- Ejemplo de consulta antes de la eliminación

CREATE TRIGGER TR_1_Clientes
ON CLIENTES
FOR DELETE
AS
BEGIN
    INSERT INTO HISTORIAL (Fecha, Descripción, Usuario)
    VALUES (GETDATE(), 'Cliente eliminado por: ' + SUSER_SNAME(), SUSER_SNAME());
END;

Nota: Se ha renombrado el disparador a TR_1_Clientes para evitar conflictos con TR_1 de la tabla Pedido.

5. Disparador para Archivar Clientes Eliminados

Este disparador se ejecuta al eliminar un registro de la tabla CLIENTES y copia el registro completo a la tabla CLIENTES_BORRADOS, actuando como un archivo de seguridad.

CREATE TRIGGER TR_2_Clientes
ON CLIENTES
FOR DELETE
AS
BEGIN
    INSERT INTO CLIENTES_BORRADOS (Id_Cliente, Compañía, Contacto, Ciudad, Teléfono)
    SELECT
        deleted.Id_Cliente,
        deleted.Compañía,
        deleted.Contacto,
        deleted.Ciudad,
        deleted.Teléfono
    FROM deleted;
END;

Nota: Se ha renombrado el disparador a TR_2_Clientes para evitar conflictos con TR_2 de la tabla Pedido.

Restricciones (Constraints) en SQL

Las restricciones son reglas que se aplican a las columnas de una tabla para limitar el tipo de datos que se pueden ingresar, asegurando la integridad y consistencia de la base de datos.

1. Restricción PRIMARY KEY para 'Matricula'

Define la columna Matricula como clave primaria en la tabla Alumno_Restricciones, asegurando que cada valor sea único y no nulo.

ALTER TABLE Alumno_Restricciones
ADD CONSTRAINT Matricula_PK PRIMARY KEY (Matricula);

2. Restricción UNIQUE para 'Celular'

Define una restricción de unicidad en la columna Celular de la tabla Alumno_Restricciones, garantizando que no haya valores duplicados.

ALTER TABLE Alumno_Restricciones
ADD CONSTRAINT Celular_UQ UNIQUE (Celular);

3. Restricción FOREIGN KEY para 'Consultorio'

Define una clave foránea en la columna Consultorio de la tabla Médico, referenciando la columna Código de la tabla Paciente. Esto establece una relación entre ambas tablas.

ALTER TABLE Médico
ADD CONSTRAINT FK_Consultorio FOREIGN KEY (Consultorio) REFERENCES Paciente(Código);

4. Restricción DEFAULT para 'Carrera'

Define un valor predeterminado ('IAS') para la columna Carrera en la tabla Alumno_Restricciones2. Si no se especifica un valor al insertar un registro, se asignará 'IAS'.

ALTER TABLE Alumno_Restricciones2
ADD CONSTRAINT DF_Carrera DEFAULT 'IAS' FOR Carrera;

5. Restricción CHECK para 'NombreArt' (No 'Z')

Añade una restricción a la columna NombreArt en la tabla ARTICULOS_COMPUTACIÓN para asegurar que los nombres de los artículos no comiencen con la letra 'Z'.

ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_NombreArt CHECK (NombreArt NOT LIKE 'Z%');

6. Restricción CHECK para 'PrecioUnitario' (> 40)

Define una restricción en la columna PrecioUnitario de la tabla ARTICULOS_COMPUTACIÓN para que solo acepte valores mayores a 40.

ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_PrecioUnitario CHECK (PrecioUnitario > 40);

7. Restricción CHECK para 'PrecioMay' (Valores Específicos)

Define una restricción en la columna PrecioMay de la tabla ARTICULOS_COMPUTACIÓN para que solo acepte los valores 99, 199, 299 y 399.

ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_PrecioMay CHECK (PrecioMay IN (99, 199, 299, 399));

8. Restricción CHECK para 'StockArt' (Rango de Valores)

Define una restricción en la columna StockArt de la tabla ARTICULOS_COMPUTACIÓN para que acepte valores entre 0 y 999 (inclusive).

ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_StockArt CHECK (StockArt BETWEEN 0 AND 999);

9. Restricción CHECK para 'Fecha_Baja' (Fechas Anteriores)

Agrega una restricción a la columna Fecha_Baja en la tabla ARTICULOS_COMPUTACIÓN para que solo acepte fechas anteriores a la fecha actual.

ALTER TABLE ARTICULOS_COMPUTACIÓN
ADD CONSTRAINT CH_Fecha_Baja CHECK (Fecha_Baja < GETDATE());

10. Deshabilitar Restricción

Deshabilita la restricción CH_PrecioMe en la tabla ARTICULOS_COMPUTACIÓN. Esto permite insertar o actualizar datos que violarían la restricción sin que se genere un error.

ALTER TABLE ARTICULOS_COMPUTACIÓN
NOCHECK CONSTRAINT CH_PrecioMe;

Nota: La restricción CH_PrecioMe no fue definida explícitamente en los ejemplos anteriores de este documento. Se mantiene el nombre original del ejemplo.

Entradas relacionadas: