UF2215: Herramientas de los SGBD. Pasarelas y Medios de conexión-70h

☰ Main Menú

UF2215: Actividades y Ejercicios

▲   Inicio de Página

UA1: Sistemas de Gestión de BD

1.1 Funcionalidades y Objetivos

  • Abstracción de datos: Independencia lógica/física
  • Integridad: Validación mediante restricciones (PK, FK, CHECK)
  • Seguridad: Autenticación y control de accesos (roles, privilegios)
  • Concurrencia: Control de acceso concurrente con isolation levels
  • Recuperación: Mecanismos de backup/restore y logs de transacciones

1.2 Arquitectura Funcional

 

Niveles ANSI/SPARC:

┌───────────────────────┐ │ Nivel Externo │ ← Vistas de usuario ├───────────────────────┤ │ Nivel Conceptual │ ← Esquema lógico global ├───────────────────────┤ │ Nivel Interno │ ← Almacenamiento físico └───────────────────────┘
  • Componentes clave:
    • Procesador de consultas
    • Gestor de transacciones
    • Buffer pool
    • Gestor de archivos

1.3 Componente de Procesamiento de Peticiones

Seguridad:

  • Autenticación: Integración con LDAP/OAuth
  • Autorización: Modelo RBAC (Role-Based Access Control)
  • Encriptación: TDE (Transparent Data Encryption)

Concurrencia:

  • Protocolos: 2PL (Two-Phase Locking), MVCC (Multiversion Concurrency Control)
  • Niveles de aislamiento: Read Uncommitted → Serializable
  • Deadlock handling: Detección (grafos) y prevención (timeouts)
  • Ampliación Contenidos   ▲

1.4 Transaccionalidad

Propiedades ACID:

  • Atomicidad: Todo o nada (rollback automático)
  • Consistencia: Transición entre estados válidos
  • Aislamiento: Ejecución como si fueran secuenciales
  • Durabilidad: Persistencia tras commit
BEGIN TRANSACTION;
    UPDATE cuentas SET saldo = saldo - 100 WHERE id = 123;
    UPDATE cuentas SET saldo = saldo + 100 WHERE id = 456;
    -- Si ocurre error:
    ROLLBACK;
    -- Si todo OK:
COMMIT;

1.5 Procesamiento de Consultas

Fases de optimización:

  1. Semántica: Validación de objetos y permisos
  2. Sintáctica: Reescritura de consultas (ej: subconsultas → JOINs)
  3. Física: Selección de algoritmos (hash join vs merge join)

Ejemplo de plan de ejecución (EXPLAIN):

| Id | Operation           | Name     | Rows |
|----|--------------------|----------|------|
| 0  | SELECT STATEMENT   |          | 100  |
| 1  |  HASH JOIN         |          | 100  |
| 2  |   TABLE ACCESS FULL| Empleados| 1000 |
| 3  |   INDEX RANGE SCAN | Dept_IDX | 10   |

1.6 Componente de Gestión de Datos

Recuperación ante fallos:

Técnica Mecanismo Recovery Time
Restauración Desde backups completos + logs Minutos/Horas
Reconstrucción Esquemas Point-in-Time Recovery Segundos (Hot Standby)

1.7 Gestión del Rendimiento

    Técnicas avanzadas:

  • Plan de consultas: Hinting, estadísticas actualizadas
  • Monitores: Herramientas como Oracle AWR, PGAdmin Dashboard
  • Benchmarks: TPC-C (OLTP), TPC-H (Analítica)

Parámetros clave a monitorear:

- Tasa de acierto buffer cache (>95%)
- Ratio de esperas por locks (<1%)
- Throughput (transacciones/segundo)

1.8 Herramientas Esenciales

  • Administración:
    • CLI: psql (PostgreSQL), mysql (MySQL)
    • GUI: DBeaver, SQL Server Management Studio
  • ETL:
    • Import/Export: BULK INSERT, pg_dump
    • Herramientas: Apache NiFi, Talend
  • Consulta avanzada:
    • SQL Notebooks (Jupyter + SQL kernel)
    • BI: Power BI, Tableau
📝  Actividades 1: Sistemas de Gestión de BD  ▲    📝  Actividades 2: Sistemas de Gestión de BD  ▲   
▲   Inicio de Página

UA2: Sistemas de Análisis de la Información

2.1 Minería de Datos

  • Proceso KDD: (Knowledge Discovery in Databases)
    1. Limpieza de datos
    2. Integración de fuentes
    3. Selección de características
    4. Algoritmos de minería
    5. Interpretación de patrones
  • Técnicas principales:
    Clasificación: Árboles de decisión, SVM, Random Forest
    Clustering: K-means, DBSCAN
    Reglas de asociación: Apriori, FP-Growth

2.2 Sistemas OLAP

Arquitectura multidimensional:

               ┌───────────────┐
               │    Cubo OLAP  │
               │  ┌─────┐      │
               │  │  *  │      │ ← Hechos (medidas)
               │  └─────┘      │
               │ /   |   \     │
Dimensiones: ┌───┐ ┌───┐ ┌───┐
             │Tiempo││Geo.││Prod.│
             └───┘ └───┘ └───┘
  • Operaciones:
    • Drill-down/roll-up (navegación jerárquica)
    • Slice and dice (filtrado multidimensional)
    • Pivoting (rotación de ejes)
  • Implementaciones: MOLAP, ROLAP, HOLAP

2.3 Dashboards y Scorecards

Característica Dashboard Scorecard
Propósito Monitoreo operacional Gestión estratégica
Métricas Indicadores en tiempo real KPIs alineados a objetivos
Ejemplo Ventas por región hoy % cumplimiento meta anual

Mejores prácticas:

  • Jerarquía visual (de lo general a lo específico)
  • Limitación de 5-9 KPIs por pantalla
  • Semáforos para alertas (rojo/amarillo/verde)

2.4 Herramientas de Análisis

2.4.1 Administración

  • Monitoreo: Grafana, Tableau Server
  • Gobernanza: Collibra, Alation

2.4.2 Migración

  • Herramientas ETL: Informatica PowerCenter, Talend Open Studio
  • Conversión de esquemas: AWS Schema Conversion Tool

2.4.3 Procesamiento ETL/ELT

Extract → [API REST | CSV | JDBC]
Transform → [Limpieza | Enriquecimiento | Agregación]
Load → [Data Warehouse | Data Lake]
  • Open Source: Apache Airflow, Pentaho Data Integration
  • Cloud: Azure Data Factory, Google Dataflow

2.4.4 Análisis Estadístico

  • Lenguajes: R, Python (Pandas, StatsModels)
  • Plataformas: Jupyter Notebooks, KNIME

Caso: Implementación de Solución Analítica

Para una cadena minorista:

  1. Diseñar cubo OLAP con dimensiones (tiempo, producto, tienda)
  2. Crear pipeline ETL que cargue datos diarios desde SAP
  3. Desarrollar dashboard con:
    • Ventas por categoría (gráfico de barras)
    • Tendencia mensual (gráfico de líneas)
    • Mapa de calor por región

Tecnologías sugeridas: Microsoft Power BI + Azure Synapse

📝  Ejercicios UA2: Sistemas de Gestión de BD  ▲   
▲   Inicio de Página

UA3: Herramientas CASE

3.1 Concepto

"Entornos software para automatizar y dar soporte a actividades del ciclo de vida del desarrollo de sistemas"
  • Objetivo principal: Aumentar productividad y calidad en ingeniería de software
  • Acrónimo: Computer-Aided Software Engineering
  • Analogía: Similar a CAD para ingeniería industrial

3.2 Historia y Evolución

1980s - Primeras herramientas (IEW, Excelerator)
1990s - Boom metodologías estructuradas (Rational Rose)
2000s - Enfoque UML (Enterprise Architect)
2010+ - Integración con DevOps (IBM Engineering Workflow)

Hitos tecnológicos:

  • Transición de mainframe a entornos gráficos
  • Integración con repositorios configurables (SVN, Git)
  • Soporte para metodologías ágiles

3.3 Clasificación

Por alcance funcional:

  • Upper-CASE: Análisis de requisitos y modelado (ej: IBM DOORS)
  • Lower-CASE: Generación de código e implementación (ej: Yeoman)
  • Integrated-CASE (I-CASE): Ciclo completo (ej: Sparx EA)

Por especialización:

  • Generales: Soporte multiplataforma (ej: Visual Paradigm)
  • Específicas: Para dominios particulares (ej: PTC para sistemas embebidos)
Tipo Ventajas Ejemplo Actual
On-premise Control total, seguridad IBM Engineering Lifecycle
Cloud Acceso remoto, escalabilidad Lucidchart
Open Source Bajo costo, customizable ArgoUML

3.4 Componentes Clave

┌───────────────────────────────────┐
│         HERRAMIENTA CASE          │
├───────────────────────────────────┤
│  ┌───────────┐   ┌─────────────┐  │
│  │Repositorio│   │Generador de │  │
│  │ Central   │←─→│  Código     │  │
│  └───────────┘   └─────────────┘  │
│         ↑               ↓         │
│  ┌───────────┐   ┌─────────────┐  │
│  │Editores   │   │Herramientas │  │
│  │Diagramas  │   │ de Pruebas  │  │
│  └───────────┘   └─────────────┘  │
└───────────────────────────────────┘

Funcionalidades esenciales:

  • Modelado visual: Diagramas UML, BPMN, ER
  • Generación automática: Código, documentación, esquemas DB
  • Análisis estático: Métricas de complejidad (COCOMO)
  • Gestión de requisitos: Trazabilidad requisito→código
  • Colaboración: Control de versiones y trabajo en equipo

Ejemplo de flujo en Sparx EA:

  1. Crear diagrama de clases UML
  2. Generar esqueleto Java/Python
  3. Exportar documentación HTML
  4. Sincronizar con repositorio Git

Taller: Evaluación de Herramientas

Comparar 3 herramientas CASE modernas:

Criterio Enterprise Architect Visual Paradigm GenMyModel
Soporte UML 2.5 ✔️ Completo ✔️ Completo ✔️ Básico
Generación código 10+ lenguajes 8 lenguajes 3 lenguajes
Precio (USD/año) 229-599 99-1999 Gratis-299

Tarea: Seleccionar la más adecuada para un proyecto fintech con equipo distribuido.

▲   Ejercicios
▲   Inicio de Página

UA4: Entornos 4GL

4.1 Tipología

"Lenguajes de cuarta generación orientados a desarrollo rápido de aplicaciones empresariales"

Por enfoque principal:

  • Report Generators: Focus en informes (ej: Crystal Reports)
  • Form Builders: Interfaces de usuario (ej: Oracle Forms)
  • Full IDE: Entornos integrados (ej: Progress OpenEdge)

Por modelo de ejecución:

Tipo Ejemplo Caso de Uso
Compilados Uniface Aplicaciones críticas
Interpretados FileMaker Prototipado rápido
Híbridos PowerBuilder Equilibrio rendimiento/flexibilidad

4.2 Componentes Clave

┌───────────────────────────────────────┐
│          ENTORNO 4GL TÍPICO           │
├───────────────────────────────────────┤
│  ┌────────────┐ ┌──────────────────┐  │
│  │  RAD Tools │ │ Database Gateway │  │
│  └────────────┘ └──────────────────┘  │
│         ↓                ↓            │
│  ┌────────────┐ ┌──────────────────┐  │
│  │ Generadores│ │  Debuggers/      │  │
│  │  de Código │ │  Profilers       │  │
│  └────────────┘ └──────────────────┘  │
└───────────────────────────────────────┘
  • Características esenciales:
    • Interfaces declarativas (no procedurales)
    • Conectividad nativa con bases de datos
    • Entornos RAD (Rapid Application Development)
    • Soporte multiplataforma

4.3 Generadores de Informes

Estructura típica en Crystal Reports:

REPORT "Ventas por Región"
DATA:
    CONNECT TO "DB_Ventas"
    SQL = "SELECT region, SUM(monto) FROM ventas 
           GROUP BY region"
BODY:
    GROUP BY region
    COLUMNS:
        region (HEADER "Región")
        sum_monto (HEADER "Total", FORMAT "$#,##0.00")
    FOOTER:
        LINE
        "Total General: " + grand_total(sum_monto)
  • Funcionalidades avanzadas:
    • Subreportes anidados
    • Fórmulas personalizadas
    • Exportación a PDF/Excel
    • Drill-down interactivo

4.4 Generadores de Formularios

Herramienta Ventaja Ejemplo Real
Oracle Forms Integración con PL/SQL Sistemas ERP legacy
Microsoft Access Curva de aprendizaje baja Aplicaciones departamentales
FileMaker Pro Multiplataforma (iOS/Web) Soluciones móviles

Flujo de diseño típico:

  1. Arrastrar controles (campos, botones)
  2. Vincular a fuente de datos
  3. Definir eventos (onClick, onChange)
  4. Generar automáticamente código

4.5 Generadores Gráficos

  • Tipos de visualización:
    • Gráficos empresariales (barras, líneas, tartas)
    • Dashboards interactivos
    • Mapas georeferenciados
  • Ejemplo en PowerBuilder:
    // Crear gráfico dinámico
    gr_1.Type = ColumnGraph!
    gr_1.AddSeries("Ventas Q1")
    gr_1.AddData(1, 1, 45000)
    gr_1.AddData(1, 2, 52000)
    gr_1.Title = "Desempeño Trimestral"

4.6 Generadores de Aplicaciones

Plataformas modernas:

  • Low-Code: Mendix, OutSystems
  • BPM: Appian, Pega
  • Open Source: JHipster

Comparativa generación de CRUD:

Método Esfuerzo Flexibilidad
Codificación manual 40 horas Alta
4GL tradicional 8 horas Media
Low-Code actual 2 horas Limitada

4.7 Evolución y Tendencias

Transformación digital:

  • Migración a cloud: AWS Honeycode, Google AppSheet
  • Integración AI: Generación automática de código con GPT
  • Movilidad: Soluciones multiplataforma (Flutter, React Native)

Caso: Modernización de Legacy

Problema: Sistema en Progress 4GL sin soporte móvil

Solución: Capa RESTful + Frontend en Vue.js

Resultado: +300% adopción por fuerza de ventas

📝  Actividades 1: Sistemas de Gestión de BD  ▲    ▲   Inicio de Página

UA5: Desarrollo de Aplicaciones

5.1 Órdenes Embebidas

"Integración directa de instrucciones SQL en lenguajes de programación convencionales"

Java (JDBC):

String query = "SELECT * FROM clientes WHERE saldo > ?";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
    stmt.setDouble(1, 1000.00);
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        System.out.println(rs.getString("nombre"));
    }
}

Python (SQLite):

import sqlite3
conn = sqlite3.connect('empresa.db')
cursor = conn.cursor()
cursor.execute("""
    INSERT INTO empleados (id, nombre) 
    VALUES (?, ?)
""", (101, 'Ana López'))
conn.commit()
  • Ventajas: Máximo control, operaciones complejas
  • Riesgos: Inyección SQL si no se usan prepared statements

5.2 Uso de Bibliotecas de Funciones

Tecnología Ejemplo Patrón Clave
ORM Hibernate (Java) Session.save(cliente)
Micro ORM Dapper (.NET) connection.Query<Cliente>()
Query Builder Knex.js (Node) knex.select().from().where()

Flujo típico con Entity Framework:

var clientes = dbContext.Clientes
                   .Where(c => c.UltimaCompra > DateTime.Now.AddMonths(-3))
                   .OrderBy(c => c.Nombre)
                   .ToList();

Traducción SQL generada:

SELECT * FROM Clientes 
WHERE UltimaCompra > DATEADD(month, -3, GETDATE())
ORDER BY Nombre

5.3 Diseño de Lenguajes Especializados

Enfoques modernos:

  • DSLs (Domain-Specific Languages):
    // Ejemplo: Lenguaje para reglas de negocio
    rule "DescuentoVIP" when
        Cliente.tipo == "VIP" && 
        Carrito.total > 1000
    then
        aplicarDescuento(15%)
    end
  • LINQ (Language Integrated Query):
    var resultados = from p in productos
                     where p.Precio > 100
                     join c in categorias on p.CategoriaId equals c.Id
                     select new { p.Nombre, c.Grupo };

Fases de diseño:

  1. Análisis de dominio: Identificar patrones repetitivos
  2. Sintaxis abstracta: Definir estructuras básicas
  3. Semántica operacional: Especificar comportamiento
  4. Implementación:
    • Compiladores (ANTLR, Lex/Yacc)
    • Interpretes embebidos

Taller Práctico: Evolución de Técnicas

Escenario: Sistema de reservas de hotel

1. Implementación con SQL embebido (Java):

String sql = "INSERT INTO reservas (id, fecha_in, fecha_out) " +
             "VALUES (?, ?, ?)";
// Usar PreparedStatement...

2. Refactorización con JPA:

@Entity
public class Reserva {
    @Id private Long id;
    private LocalDate checkIn;
    private LocalDate checkOut;
}
// Uso:
em.persist(nuevaReserva);

3. DSL personalizado:

Reserva.crear()
    .paraCliente(123)
    .conHabitacion("SUITE")
    .del("2023-12-15").al("2023-12-20")
    .confirmar();

Análisis comparativo:

Criterio SQL Embebido ORM DSL
Seguridad ▲▲ (con PS) ▲▲▲ ▲▲▲
Productividad ▲▲ ▲▲▲
Flexibilidad ▲▲▲ ▲▲
📝  Actividades 1: Sistemas de Gestión de BD  ▲    📝  Actividades 2: Sistemas de Gestión de BD  ▲    📝  Actividades 1: Sistemas de Gestión de BD  ▲    📝  Actividades 2: Sistemas de Gestión de BD  ▲    📝  Actividades 2: Sistemas de Gestión de BD  ▲    ▲   Inicio de Página

UA6: Tecnologías de Conectividad a BD

6.1 OLEDB

"Modelo de componentes COM para acceso universal a datos, superando limitaciones de ODBC"

Características clave:

  • Arquitectura: Proveedores (Providers) vs Consumidores (Consumers)
  • Ventajas:
    • Acceso a datos relacionales y no relacionales
    • Optimizado para entornos Microsoft
  • Ejemplo en C++:
    CoInitialize(NULL);
    IDBInitialize* pDBInit = NULL;
    CoCreateInstance(CLSID_SQLOLEDB, NULL, CLSCTX_INPROC_SERVER,
                     IID_IDBInitialize, (void**)&pDBInit);
    // Configurar propiedades de conexión
    DBPROPSET dbPropSet[1];
    // ... inicialización de propiedades
    pDBInit->Initialize();

6.2 ODBC

Estandarización:

  • 1992: Primer release por Microsoft
  • ISO/IEC 9075-3: Parte del estándar SQL/CLI

Componentes:

┌─────────────────┐   ┌─────────────────┐
│   Aplicación    │   │    Driver       │
│    (ODBC API)   │←─→│  Administrador │
└─────────────────┘   └─────────────────┘
                             ↓
                   ┌─────────────────────┐
                   │ Driver específico   │
                   │ (MySQL, Oracle...)  │
                   └─────────────────────┘

Ejemplo en C:

SQLHENV env;
SQLHDBC dbc;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLConnect(dbc, "DSN=miBD", SQL_NTS, "usuario", SQL_NTS, "clave", SQL_NTS);

6.3 JDBC

Evolución:

  • JDBC 1.0: API básica (1997)
  • JDBC 4.0: Auto-registro drivers (2006)
  • JDBC 4.3: Soporte para Sharding (2017)

Flujo moderno (try-with-resources):

String url = "jdbc:mysql://localhost:3306/miDB?useSSL=false";
try (Connection conn = DriverManager.getConnection(url, "user", "pass");
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT * FROM productos")) {
     
    while (rs.next()) {
        System.out.println(rs.getString("nombre"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

Tipos de Drivers:

Tipo Implementación Uso típico
Tipo 1 JDBC-ODBC Bridge Legacy (deprecated)
Tipo 4 Nativo puro Aplicaciones modernas

6.4 SQLJ

Concepto:

Estándar para embedding SQL estático en Java (ANSI/ISO SQL Part 10)

Ejemplo básico:

// SQLJ:
#sql {
    INSERT INTO empleados (id, nombre)
    VALUES (:id, :nombre)
};

Ventajas vs JDBC:

  • Verificación de sintaxis en tiempo de compilación
  • Mejor integración con herramientas IDE
  • Traducción automática a JDBC

6.5 SQL/CLI (Call Level Interface)

Parte del estándar SQL:

  • ISO/IEC 9075-3: Define API independiente de lenguaje
  • Base técnica: Similar a ODBC pero estandarizado

Diferencias clave con ODBC:

Aspecto ODBC SQL/CLI
Origen Microsoft ISO/IEC
Alcance Solo Windows Multiplataforma
Compatibilidad Legacy systems Nuevos desarrollos

Laboratorio: Migración JDBC → SQLJ

Objetivo: Convertir este código JDBC a SQLJ:

Versión JDBC:

String sql = "UPDATE productos SET precio = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
    pstmt.setDouble(1, nuevoPrecio);
    pstmt.setInt(2, idProducto);
    int filas = pstmt.executeUpdate();
    System.out.println(filas + " registros actualizados");
}

Solución SQLJ:

#sql {
    UPDATE productos 
    SET precio = :nuevoPrecio
    WHERE id = :idProducto
};
System.out.println(SQLJ.getUpdateCount() + " registros actualizados");

Análisis:

  1. ¿Qué ventajas ofrece la versión SQLJ?
  2. ¿En qué casos seguiría siendo preferible JDBC?
📝  Tecnologías de Conectividad a Bases de Datos  ▲    📝  Actividad: Guardar datos en MySQL usando PHP  ▲    📝  EJEMPLO PRÁCTICO: Conexión a BD con PHP-PDO  ▲    📝  Actividad: CRUD Completo con PHP PDO  ▲    📝  Ejercicios en PDF  ▲   
▲   Inicio de Página