Las funciones son bloques de código que realizan una tarea específica y devuelven un valor. Se utilizan para encapsular lógica que puede ser reutilizada en consultas y otros procedimientos.
-- Ejemplo de una función en SQL que calcula el salario anual
CREATE FUNCTION calcular_salario_anual(salario_mensual DECIMAL)
RETURNS DECIMAL
BEGIN
RETURN salario_mensual * 12;
END;
Los triggers son procedimientos almacenados que se ejecutan automáticamente en respuesta a ciertos eventos en una tabla, como INSERT, UPDATE o DELETE.
-- Ejemplo de un trigger en SQL que actualiza una fecha de modificación en una tabla
CREATE TRIGGER actualizar_fecha_modificacion
BEFORE UPDATE ON empleados
FOR EACH ROW
BEGIN
SET NEW.fecha_modificacion = NOW();
END;
Los paquetes son colecciones de procedimientos, funciones y variables que se agrupan en una unidad. Se utilizan para organizar y reutilizar código.
-- Ejemplo de un paquete en Oracle que contiene una función y un procedimiento
CREATE OR REPLACE PACKAGE gestion_empleados AS
FUNCTION calcular_bonificacion(salario DECIMAL) RETURN DECIMAL;
PROCEDURE actualizar_salario(id_empleado INT, nuevo_salario DECIMAL);
END gestion_empleados;
/
CREATE OR REPLACE PACKAGE BODY gestion_empleados AS
FUNCTION calcular_bonificacion(salario DECIMAL) RETURN DECIMAL IS
BEGIN
RETURN salario * 0.10;
END calcular_bonificacion;
PROCEDURE actualizar_salario(id_empleado INT, nuevo_salario DECIMAL) IS
BEGIN
UPDATE empleados SET salario = nuevo_salario WHERE id = id_empleado;
END actualizar_salario;
END gestion_empleados;
Las tipologías de dimensiones se refieren a los diferentes tipos de dimensiones que se pueden utilizar en un modelo dimensional, como dimensiones slowly changing, dimensiones de hechos y dimensiones de tiempo.
Una dimensión Slowly Changing (SCD) es una dimensión que cambia lentamente con el tiempo. Se maneja utilizando técnicas como SCD tipo 1, tipo 2 y tipo 3 para gestionar y almacenar cambios en los datos.
Se define una función utilizando el comando CREATE FUNCTION y se especifica el cuerpo de la función que realiza la tarea deseada.
-- Ejemplo de una función que convierte una cadena a mayúsculas
CREATE FUNCTION convertir_a_mayusculas(cadena VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
RETURN UPPER(cadena);
END;
Un trigger BEFORE se ejecuta antes de que ocurra el evento de modificación (INSERT, UPDATE, DELETE), mientras que un trigger AFTER se ejecuta después del evento.
Se puede utilizar un trigger para insertar registros en una tabla de auditoría cada vez que se realiza una operación en la tabla original.
-- Ejemplo de un trigger que audita cambios en una tabla de empleados
CREATE TRIGGER auditar_cambios_empleados
AFTER UPDATE ON empleados
FOR EACH ROW
BEGIN
INSERT INTO auditoria_empleados (id_empleado, cambio, fecha)
VALUES (NEW.id, 'Actualización', NOW());
END;
Un paquete en PL/SQL se crea para agrupar procedimientos y funciones relacionados en una unidad lógica, facilitando la organización y reutilización del código.
-- Ejemplo de un paquete en PL/SQL para la gestión de clientes
CREATE OR REPLACE PACKAGE gestion_clientes AS
FUNCTION obtener_cliente(id_cliente INT) RETURN cliente%ROWTYPE;
PROCEDURE actualizar_cliente(id_cliente INT, nombre_cliente VARCHAR2);
END gestion_clientes;
Una dimensión de tiempo es una dimensión que representa fechas y períodos. Se utiliza para permitir el análisis de datos a lo largo del tiempo en los data warehouses.
Se actualizan los valores existentes en la dimensión sin mantener un historial de cambios.
Se crean nuevas filas para cada cambio en la dimensión, manteniendo un historial completo de los cambios.
Se agrega una columna adicional para almacenar el valor anterior, permitiendo el seguimiento de un número limitado de cambios.
Una dimensión de hechos es una tabla que almacena datos cuantitativos y métricas, y se relaciona con las dimensiones para realizar análisis y generar informes.
Se define una función en Java que realiza el cálculo y retorna el resultado. Luego se puede utilizar en diferentes partes de la aplicación.
public class Calculadora {
public static double calcularInteresCompuesto(double principal, double tasa, int tiempo) {
return principal * Math.pow(1 + tasa / 100, tiempo);
}
}
El trigger se define en la base de datos, y en Java se puede utilizar JDBC para realizar operaciones que disparen el trigger.
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/db", "user", "password");
Statement stmt = conn.createStatement();
stmt.executeUpdate("UPDATE empleados SET salario = 50000 WHERE id = 1");
Se define una función en Python que realiza operaciones sobre los datos y retorna el resultado.
def calcular_promedio(numeros):
return sum(numeros) / len(numeros)
SQLAlchemy no soporta triggers directamente, pero se pueden manejar cambios mediante eventos en modelos.
from sqlalchemy import event
from sqlalchemy.orm import mapper
def before_insert(mapper, connection, target):
# Código para manejar el evento antes de insertar
pass
event.listen(mapper, 'before_insert', before_insert)
Una tabla de hechos es una tabla central en un data warehouse que contiene medidas y métricas que se pueden analizar y consultar.
Se crea una tabla de dimensión que incluye atributos relacionados con los productos, como nombre, categoría y proveedor.
-- Ejemplo de tabla de dimensión de producto
CREATE TABLE dimension_producto (
id_producto INT PRIMARY KEY,
nombre_producto VARCHAR(255),
categoria_producto VARCHAR(100),
proveedor_producto VARCHAR(100)
);
Una función de ventana realiza cálculos sobre un conjunto de filas relacionadas con la fila actual. Se utiliza para realizar análisis avanzados.
-- Ejemplo de función de ventana para calcular el promedio móvil
SELECT fecha, ventas,
AVG(ventas) OVER (ORDER BY fecha ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS promedio_movil
FROM ventas_diarias;
En el proceso ETL, se identifican los cambios y se insertan nuevas filas en la dimensión con las fechas de inicio y fin correspondientes.
Se definen procedimientos y funciones en un paquete que se pueden llamar desde aplicaciones o scripts para automatizar tareas repetitivas.
-- Ejemplo de procedimiento para enviar notificaciones en un paquete
CREATE OR REPLACE PACKAGE notificaciones AS
PROCEDURE enviar_email(destinatario VARCHAR2, asunto VARCHAR2, cuerpo VARCHAR2);
END notificaciones;
/
CREATE OR REPLACE PACKAGE BODY notificaciones AS
PROCEDURE enviar_email(destinatario VARCHAR2, asunto VARCHAR2, cuerpo VARCHAR2) IS
BEGIN
-- Código para enviar email
END enviar_email;
END notificaciones;
Se utilizan técnicas como la indexación, particionamiento y la creación de vistas materializadas para mejorar el rendimiento de las consultas.
Se utilizan triggers para asegurar que las operaciones en una tabla mantengan la integridad referencial con otras tablas, como la actualización de registros relacionados.
Se crea un trigger utilizando el comando CREATE TRIGGER y se define la función asociada que realiza la acción deseada.
-- Crear una función de trigger en PostgreSQL
CREATE OR REPLACE FUNCTION actualizar_fecha_modificacion()
RETURNS TRIGGER AS $$
BEGIN
NEW.fecha_modificacion = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Crear el trigger asociado
CREATE TRIGGER trigger_actualizar_fecha
BEFORE UPDATE ON empleados
FOR EACH ROW
EXECUTE FUNCTION actualizar_fecha_modificacion();
Se utilizan tablas de agregación para almacenar datos pre-calculados y resumidos, mejorando la eficiencia de las consultas de análisis.
Un índice bitmap es un índice que utiliza una serie de bits para representar la presencia de valores en una columna. Se utiliza en columnas con pocos valores distintos y en tablas con grandes volúmenes de datos.
Las funciones agregadas se implementan para realizar cálculos como SUM, AVG y COUNT sobre conjuntos de datos, y se gestionan para optimizar el rendimiento en consultas analíticas.
Se optimizan funciones y procedimientos revisando el código para eliminar redundancias, utilizando índices adecuados, y revisando los planes de ejecución para mejorar el rendimiento.