Aficiones
Aficiones
Requisitos
Catálogo de Requisitos
Añada los siguientes requisitos al ejercicio Usuarios:
RI-1: Usuarios
- Mismo que ejercicio de Usuarios
RI-02: Aficiones
- Como: Profesor de la asignatura
- Quiero: Almacenar las aficiones de los usuarios, que pueden ser: literatura, cine, deporte o gastronomía. Los usuarios pueden varias aficiones o ninguna.
- Para: Que el estudiante tenga en cuenta este requisito en el modelo conceptual, relacional y tecnológico
RF-03: Informes sobre aficiones
- Como: Profesor de la asignatura
- Quiero: Que el sistema sea capaz de generar los siguientes informes:
- Listado de usuarios con sus aficiones.
- Usuarios a los que le gusta el cine.
- Usuarios que no tienen aficiones.
- Número de aficiones de cada usuario.
- Máximo número de aficiones que tiene un usuario.
- Usuarios con el máximo número de aficiones.
- Para: Que el alumno realice consultas en Álgebra Relacional y SQL.
Modificación solicitada:
Modifique el RI-02 de la versión estática/cerrada del ejercicio de Aficiones para que las aficiones de los Usuarios sean dinámicas/abierta.
Modelo Conceptual
Modelo conceptual (Versión estática)
Diagrama de clases

Modelo conceptual (Versión dinámica)
Diagrama de clases
En la versión dinámica, las aficiones se convierten en entidad propia para permitir un catálogo abierto y gestionable. Normalmente aparecen las entidades Usuario y Afición, y una asociación Usuario–Afición para resolver la relación *..**.

Modelo relacional
Variante estática (Aficiones como atributos en su relación)
Intensión
Usuarios(usuarioId, nombre, edad, género, email)
PK(usuarioId)
AK(email)
Aficiones(aficionId, usuarioId, afición)
PK(aficionId)
FK(usuarioId) / Usuarios
AK(usuarioId, afición)
Extensión
Usuarios = { u1..u11 como en el ejercicio de Usuarios }
Aficiones = {
(a1, u1, "Deporte"),
(a2, u1, "Gastronomía"),
(a3, u2, "Deporte"),
(a4, u2, "Literatura"),
(a5, u2, "Cine"),
(a6, u4, "Gastronomía"),
(a7, u4, "Cine"),
(a8, u4, "Literatura"),
(a9, u5, "Deporte"),
(a10, u6, "Cine"),
(a11, u8, "Deporte"),
(a12, u8, "Gastronomía"),
(a13, u8, "Literatura"),
(a14, u8, "Cine"),
(a15, u9, "Deporte"),
(a16, u9, "Literatura"),
(a17, u9, "Cine"),
(a18, u10, "Gastronomía")
}
Álgebra relacional
- Renombrado:
- Usuarios con sus aficiones:
- Usuarias a las que les gusta el cine:
- Usuarios sin aficiones:
- Número de aficiones por usuario:
Variante dinámica (tabla intermedia usuario–afición)
Intensión
Usuarios(usuarioId, nombre, edad, género, email)
PK(usuarioId)
AK(email)
Aficiones(aficionId, afición)
PK(aficionId)
UsuariosAficiones(usuarioAficionId, usuarioId, aficiónId)
PK(usuarioAficionId)
FK(usuarioId) / Usuarios
FK(aficiónId) / Aficiones
AK(usuarioId, aficiónId)
Extensión
Usuarios = { u1..u11 como en el ejercicio de Usuarios }
Aficiones = {
(a1, "Cine"), (a2, "Deporte"), (a3, "Jugar al fútbol"),
(a4, "Hacer senderismo"), (a5, "Montar a caballo")
}
UsuariosAficiones = {
(u1,a3), (u1,a4), (u2,a1), (u2,a2), (u2,a3), (u4,a4),
(u4,a2), (u4,a1), (u5,a3), (u6,a2), (u8,a3), (u8,a4),
(u8,a1), (u8,a2), (u9,a3), (u9,a1), (u9,a2), (u10,a4),
(u11,a5)
}
Álgebra relacional
- Renombrado:
- Usuarios con sus aficiones:
- Usuarios a los que les gusta el cine:
- Usuarios sin aficiones:
- Usuarios con todas las aficiones:
Modelo Tecnológico (MariaDB)
Modelo tecnológico (MariaDB)
Versión Estática
Script SQL para crear la base de datos
Script SQL para la carga inicial de datos
Consultas
Versión Dinámica
Script SQL para crear la base de datos
Script SQL para la carga inicial de datos
Consultas
SQL Avanzado
Realice un procedimiento para insertar en la tabla de usuarios e implemente la siguiente prueba de aceptación:
Pruebas de aceptación
PA-001: Usuarios
- ✅ Insertar un usuario con datos correctos.
- ✅ Insertar un usuario sin género.
- ❌ Insertar un usuario con un email repetido.
- ❌ Insertar un usuario menor de edad.
Transacciones
Realice un procedimiento para insertar una afición a un usuario nuevo, es decir, que inserte en las tres tablas:
Realice el mismo procedimiento pero de forma transaccional:
Pruebas SQL
Pruebas de aceptación SQL
PA-001: Usuarios
- ✅ Insertar un usuario con datos correctos.
- ✅ Insertar un usuario sin género.
- ❌ Insertar un usuario con un email repetido.
- ❌ Insertar un usuario menor de edad.
Para hacer esta prueba crearemos un procedimiento para insertar un único Usuario, después usamos este procedimiento para insertar los datos de la prueba, teniendo en cuenta que antes hay que hacer la carga inicial de datos.
Transacciones
Transacciones
Realice un procedimiento para insertar una afición a un usuario nuevo, es decir, que inserte en las tres tablas:
Realice el mismo procedimiento pero de forma transaccional: