Ejercicios de acceso relacional

Esta es una colección de ejercicios para reforzar lo visto en los cursos Acceso a Bases de Datos y Persistencia con BDR. Trabajan sobre el caso práctico de gestión de FCT (Caso práctico: gestión de FCT).

Requisitos previos

Necesitas haber trabajado los conceptos de acceso relacional y disponer de un entorno con un gestor de bases de datos (embebido o independiente).

Para UD2, los ejemplos ejecutables están en la guía de conexión y esquema y se trabajan inline en las diez clases de Acceso a Bases de Datos. Las preguntas de esta página son refuerzo formativo, no entregas adicionales. La infraestructura de la aplicación está en el enunciado privado de UD2.

Conexión y estructura (UD2)

  1. Dado el dominio FCT (estudiantes, empresas, tutores y asignaciones), diseña el esquema relacional:

    1. ¿Qué tablas necesitas?

    2. ¿Qué columnas y tipos tendría cada tabla?

    3. ¿Cuál es la clave primaria de cada tabla?

    4. ¿Dónde colocarías las claves ajenas?

  2. Explica la diferencia entre un gestor embebido y uno independiente. ¿Cuál usarías para el desarrollo y cuál para el despliegue?

  3. Escribe (en pseudocódigo o SQL) las sentencias para crear la tabla empresa con sus columnas y su clave primaria.

Soluciones
-- 3. Crear la tabla empresa
 CREATE TABLE empresa (
     id          TEXT PRIMARY KEY NOT NULL,
     nombre      TEXT NOT NULL
 );

-- Tabla tutor (relación uno a muchos con empresa)
CREATE TABLE tutor (
     id          TEXT PRIMARY KEY NOT NULL,
     nombre      TEXT NOT NULL,
     empresa_id  TEXT NOT NULL REFERENCES empresa(id)
 );

Este fragmento aísla dos tablas. El esquema de la práctica conserva A01, E01 y T01 de UD1 e incluye la asignación; no introduce CIF ni datos personales. La guía compara restricciones y fechas en los dos gestores.

  1. ¿Qué es el desfase objeto-relacional? Pon un ejemplo concreto con el dominio FCT.

  2. ¿Por qué las credenciales no deben ir dentro del código fuente? ¿Dónde deberían guardarse?

Operaciones y transacciones (UD3)

  1. Escribe una consulta SQL que devuelva los estudiantes de un ciclo concreto (p. ej. DAM).

  2. ¿Qué es una sentencia parametrizada y por qué es más segura que concatenar valores en una cadena SQL?

  3. Explica qué es una transacción y cuándo usarías commit y rollback.

  4. ¿Qué es un procedimiento almacenado y cuándo conviene usarlo?

Soluciones
-- 6. Estudiantes de DAM
SELECT nombre FROM estudiante WHERE ciclo = 'DAM';

-- 7. Sentencia parametrizada (con marcador ?)
-- SELECT * FROM estudiante WHERE ciclo = ?;
-- El valor se enlaza aparte, evitando inyección SQL.

-- 8. Transacción
-- BEGIN;
--   INSERT INTO convenio ...;
--   UPDATE estudiante ...;
-- COMMIT;  -- o ROLLBACK si algo falla
  1. ¿Qué significa «liberar recursos también cuando hay errores»? ¿Cómo lo garantizas en tu código?