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)¶
Dado el dominio FCT (estudiantes, empresas, tutores y asignaciones), diseña el esquema relacional:
¿Qué tablas necesitas?
¿Qué columnas y tipos tendría cada tabla?
¿Cuál es la clave primaria de cada tabla?
¿Dónde colocarías las claves ajenas?
Explica la diferencia entre un gestor embebido y uno independiente. ¿Cuál usarías para el desarrollo y cuál para el despliegue?
Escribe (en pseudocódigo o SQL) las sentencias para crear la tabla
empresacon 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.
¿Qué es el desfase objeto-relacional? Pon un ejemplo concreto con el dominio FCT.
¿Por qué las credenciales no deben ir dentro del código fuente? ¿Dónde deberían guardarse?
Operaciones y transacciones (UD3)¶
Escribe una consulta SQL que devuelva los estudiantes de un ciclo concreto (p. ej. DAM).
¿Qué es una sentencia parametrizada y por qué es más segura que concatenar valores en una cadena SQL?
Explica qué es una transacción y cuándo usarías
commityrollback.¿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
¿Qué significa «liberar recursos también cuando hay errores»? ¿Cómo lo garantizas en tu código?