Ejercicios Prácticos: Herramientas CASE

Ejercicio 1: Modelado de Bases de Datos con Herramienta CASE

Conceptos de Herramientas CASE

Las herramientas CASE (Computer-Aided Software Engineering) ayudan en:

Clasificación CASE:

Herramientas CASE populares:

Enterprise Architect IBM Rational Rose Microsoft Visio Oracle Designer ERwin Data Modeler

Objetivo: Utilizar una herramienta CASE para modelar una base de datos de biblioteca.

    Enunciado:

  1. Crear el modelo conceptual (diagrama entidad-relación)
  2. Transformar a modelo lógico (esquema relacional)
  3. Generar el script SQL para implementación
  4. Documentar el modelo con comentarios y descripciones

Solución Paso a Paso con MySQL Workbench

1. Modelo Conceptual (Diagrama E-R)

ENTIDADES PRINCIPALES:

LIBRO (ISBN, título, año, editorial)

AUTOR (id, nombre, nacionalidad)

EJEMPLAR (código, ubicación, estado)

USUARIO (id, nombre, dirección)

PRÉSTAMO (id, fecha_préstamo, fecha_devolución)

RELACIONES:

LIBRO - AUTOR: M:N (un libro tiene varios autores, un autor tiene varios libros)

LIBRO - EJEMPLAR: 1:N (un libro tiene varios ejemplares)

USUARIO - PRÉSTAMO: 1:N (un usuario tiene varios préstamos)

EJEMPLAR - PRÉSTAMO: 1:1 (cada préstamo es de un ejemplar)

2. Modelo Lógico (Esquema Relacional)
-- Tablas principales
LIBROS (ISBN*, título, año, editorial, edición)
AUTORES (id*, nombre, nacionalidad, fecha_nacimiento)
EJEMPLARES (código_barras*, ISBN#, ubicación, estado)
USUARIOS (id*, nombre, dirección, teléfono, email)

-- Tablas de relación
LIBRO_AUTOR (ISBN#, autor_id#, rol) -- Para relación M:N
PRÉSTAMOS (id*, usuario_id#, ejemplar_código#, fecha_préstamo, fecha_devolución, estado)

-- Notación:
-- * = Llave primaria
-- # = Llave foránea
3. Script SQL Generado Automáticamente
-- MySQL Workbench genera este código desde el modelo E-R
CREATE SCHEMA IF NOT EXISTS `biblioteca` DEFAULT CHARACTER SET utf8;
USE `biblioteca`;

-- Tabla 'libros'
CREATE TABLE `libros` (
  `ISBN` VARCHAR(20) NOT NULL,
  `titulo` VARCHAR(200) NOT NULL,
  `año` INT NULL,
  `editorial` VARCHAR(100) NULL,
  `edicion` INT NULL,
  PRIMARY KEY (`ISBN`));

-- Tabla 'autores'
CREATE TABLE `autores` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nombre` VARCHAR(100) NOT NULL,
  `nacionalidad` VARCHAR(50) NULL,
  `fecha_nacimiento` DATE NULL,
  PRIMARY KEY (`id`));

-- Tabla intermedia 'libro_autor'
CREATE TABLE `libro_autor` (
  `libro_ISBN` VARCHAR(20) NOT NULL,
  `autor_id` INT NOT NULL,
  `rol` VARCHAR(50) NULL,
  PRIMARY KEY (`libro_ISBN`, `autor_id`),
  CONSTRAINT `fk_libro_autor_libros`
    FOREIGN KEY (`libro_ISBN`)
    REFERENCES `libros` (`ISBN`),
  CONSTRAINT `fk_libro_autor_autores`
    FOREIGN KEY (`autor_id`)
    REFERENCES `autores` (`id`));

-- Tabla 'ejemplares'
CREATE TABLE `ejemplares` (
  `codigo_barras` VARCHAR(50) NOT NULL,
  `libro_ISBN` VARCHAR(20) NOT NULL,
  `ubicacion` VARCHAR(50) NULL,
  `estado` ENUM('disponible', 'prestado', 'reparacion') NULL DEFAULT 'disponible',
  PRIMARY KEY (`codigo_barras`),
  CONSTRAINT `fk_ejemplares_libros1`
    FOREIGN KEY (`libro_ISBN`)
    REFERENCES `libros` (`ISBN`));

-- Tabla 'usuarios'
CREATE TABLE `usuarios` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nombre` VARCHAR(100) NOT NULL,
  `direccion` VARCHAR(200) NULL,
  `telefono` VARCHAR(20) NULL,
  `email` VARCHAR(100) NULL,
  PRIMARY KEY (`id`));

-- Tabla 'prestamos'
CREATE TABLE `prestamos` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `usuario_id` INT NOT NULL,
  `ejemplar_codigo` VARCHAR(50) NOT NULL,
  `fecha_prestamo` DATE NOT NULL,
  `fecha_devolucion` DATE NULL,
  `estado` ENUM('activo', 'completado', 'atrasado') NULL DEFAULT 'activo',
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_prestamos_usuarios1`
    FOREIGN KEY (`usuario_id`)
    REFERENCES `usuarios` (`id`),
  CONSTRAINT `fk_prestamos_ejemplares1`
    FOREIGN KEY (`ejemplar_codigo`)
    REFERENCES `ejemplares` (`codigo_barras`));
4. Documentación del Modelo
/**
 * MODELO DE DATOS PARA SISTEMA DE BIBLIOTECA
 * Versión: 1.0
 * Autor: Equipo de Desarrollo
 * Fecha: 2023-11-15
 * 
 * Descripción:
 * Este modelo representa el sistema de gestión de una biblioteca,
 * incluyendo libros, autores, ejemplares, usuarios y préstamos.
 * 
 * Notas importantes:
 * - Un libro puede tener múltiples autores (relación muchos a muchos)
 * - Cada libro tiene múltiples ejemplares físicos (relación uno a muchos)
 * - Los préstamos se registran por ejemplar, no por libro
 * - Se utiliza enumeraciones para estados predefinidos
 */

-- Comentarios a nivel de tabla (ejemplo para tabla 'libros')
ALTER TABLE `libros` COMMENT = 'Contiene información bibliográfica de los libros, independiente de los ejemplares físicos';

-- Comentarios a nivel de columna (ejemplo)
ALTER TABLE `usuarios` 
CHANGE COLUMN `email` `email` VARCHAR(100) NULL COMMENT 'Dirección de correo electrónico válida para notificaciones';

Ejercicio 2: Generación de Informes con 4GL

Conceptos de Entornos 4GL

Objetivo: Crear un informe avanzado usando un generador de informes 4GL.

    Enunciado:

  1. Conectar a la base de datos de ventas
  2. Diseñar un informe con agrupaciones y subtotales
  3. Implementar parámetros de filtrado
  4. Exportar a múltiples formatos (PDF, Excel)

Solución Paso a Paso con Generador de Informes 4GL

1. Conexión a la Base de Datos de Ventas

DATABASE ventas 
END DATABASE

MAIN
    DEFINE rep_ventas REPORT
        CONNECT TO "ventas_db" USER "usuario" USING "contraseña"
        IF STATUS THEN
            DISPLAY "Error al conectar a la base de datos"
            EXIT PROGRAM
        END IF
    END MAIN
2. Diseño del Informe con Agrupaciones y Subtotales

REPORT rep_ventas (venta_id, fecha, cliente_id, producto_id, cantidad, precio_unitario, total)
    DEFINE
        grupo_cliente LIKE clientes.cliente_id,
        subtotal DECIMAL(12,2),
        gran_total DECIMAL(12,2) INITIAL 0
    END DEFINE

    FORMAT
        FIRST PAGE HEADER
            PRINT "Informe de Ventas", AT 40
            PRINT "Fecha: ", TODAY AT 80
            SKIP 2 LINES
        END FIRST PAGE HEADER

        PAGE HEADER
            PRINT "ID Venta", AT 5,
                  "Fecha", AT 15,
                  "Producto", AT 30,
                  "Cantidad", AT 50,
                  "Precio Unit.", AT 65,
                  "Total", AT 80
            SKIP 1 LINE
        END PAGE HEADER

        BEFORE GROUP OF cliente_id
            grupo_cliente = cliente_id
            PRINT "Cliente: ", cliente_id USING "####", AT 5
            subtotal = 0
        END BEFORE GROUP

        AFTER GROUP OF cliente_id
            PRINT "Subtotal cliente: ", subtotal USING "$##,###,###.00", AT 65
            SKIP 1 LINE
            gran_total = gran_total + subtotal
        END AFTER GROUP

        ON LAST ROW
            SKIP 2 LINES
            PRINT "TOTAL GENERAL: ", gran_total USING "$##,###,###.00", AT 65
        END LAST ROW
    END FORMAT
3. Implementación de Parámetros de Filtrado

FUNCTION generar_informe(fecha_desde DATE, fecha_hasta DATE, cliente_opcional INTEGER)
    DEFINE sql_query STRING
    
    LET sql_query = "SELECT * FROM ventas WHERE fecha BETWEEN ? AND ?"
    
    IF cliente_opcional IS NOT NULL THEN
        LET sql_query = sql_query CLIPPED, " AND cliente_id = ", cliente_opcional USING "####"
    END IF
    
    LET sql_query = sql_query CLIPPED, " ORDER BY cliente_id, fecha"
    
    PREPARE stmt FROM sql_query
    
    IF fecha_desde IS NULL THEN
        LET fecha_desde = MDY(1,1,YEAR(TODAY))
    END IF
    
    IF fecha_hasta IS NULL THEN
        LET fecha_hasta = TODAY
    END IF
    
    START REPORT rep_ventas TO "ventas_filtrado.rep"
    
    DECLARE cur_ventas CURSOR FOR stmt USING fecha_desde, fecha_hasta
    FOREACH cur_ventas INTO venta_id, fecha, cliente_id, producto_id, cantidad, precio_unitario, total
        subtotal = subtotal + total
        OUTPUT TO REPORT rep_ventas(venta_id, fecha, cliente_id, producto_id, 
                                  cantidad, precio_unitario, total)
    END FOREACH
    
    FINISH REPORT rep_ventas
END FUNCTION
4. Exportación a Múltiples Formatos

FUNCTION exportar_informe(tipo_formato STRING)
    CASE tipo_formato
        WHEN "PDF"
            SYSTEM "rep2pdf ventas.rep -o ventas.pdf"
            DISPLAY "Informe exportado a PDF: ventas.pdf"
        
        WHEN "EXCEL"
            SYSTEM "rep2excel ventas.rep -o ventas.xlsx"
            DISPLAY "Informe exportado a Excel: ventas.xlsx"
        
        WHEN "HTML"
            SYSTEM "rep2html ventas.rep -o ventas.html"
            DISPLAY "Informe exportado a HTML: ventas.html"
        
        OTHERWISE
            DISPLAY "Formato no soportado. Use PDF, EXCEL o HTML"
    END CASE
END FUNCTION

Nota: 4GL permite exportar informes a múltiples formatos mediante herramientas como rep2pdf, rep2excel y rep2html.

▲   volver