Apartamentos
Apartamentos
Requisitos
Catálogo de Requisitos
La transcripción que aparece a continuación corresponde a una entrevista con una emprendedora que quiere crear una empresa de gestión de alquileres de apartamentos turísticos.
Entrevista
- Pregunta (P): Bien, ¿qué necesita que haga el portal web a desarrollar?
- Respuesta (R): Bueno, por un lado permitir que los usuarios con alojamientos disponibles los puedan publicar y, por otro lado, que los usuarios que busquen alquilar un alojamiento los puedan buscar por una determinada zona (Costa de la Luz, Costa del Sol, etc.), ver las fotos y solicitar una reserva.
- P: Muy bien, empecemos por los apartamentos.
- R: Hablemos mejor de alojamientos, no todos son apartamentos, también hay casas rurales y otros tipos distintos.
- P: ¿Pero se tratan todos de la misma forma?
- R: Sí, para nosotros son iguales.
- P: Bien, pues dígame que información quiere guardar de los alojamientos.
- R: Pues la dirección, sus características y muchas fotos.
- P: ¿Cuáles son las características?
- R: Pues el número de dormitorios, el número de baños, la ocupación máxima y si tiene aire acondicionado, wifi, piscina y garaje. Y quien es el propietario, claro. Ah, y la zona turística en la que se encuentra, como le dije antes.
- P: Muy bien, y ¿qué información necesita de los usuarios?
- R: Bueno, de los usuarios necesito el DNI, nombre y apellidos, correo electrónico, una contraseña para acceder, una dirección y un teléfono de contacto.
- P: ¿Considera usuarios tanto a los propietarios como a los que solicitan reservas?
- R: Sí, porque los propietarios también pueden reservar. Simplemente, si un usuario es propietario, al entrar al portal podrá gestionar sus alojamientos y hacer reservas. Si no tiene alojamientos, sólo podrá hacer reservas.
- P: Muy bien, hábleme de las reservas.
- R: Bueno, una reserva la hace un usuario sobre un alojamiento, con una fecha de check-in y una fecha de check-out.
- P: ¿Check-in, check-out?
- R: Sí, entrada y salida, es como se suele hablar en este sector, ¿sabe?
- P: OK, fecha de check-in y fecha de check-out.
- R: Eso es, tenga en cuenta que el mismo día de check-out se puede hacer un check-in de otra reserva, pero no puede haber más solape de reservas que ese.
- P: ¿Me lo puede explicar?
- R: Sí claro, dos reservas de un mismo alojamiento no se pueden solapar salvo en el día de check-out de una y el de check-in de la siguiente.
- P: Lo entiendo, debemos controlar el solape de reservas. ¿Algo más sobre reservas?
- R: Bueno, si la reserva se confirma por parte del propietario y el usuario, me gustaría que el usuario pudiera añadir comentarios con una valoración.
- P: ¿Qué tipo de valoración?
- R: Por el momento me vale una de esas de estrellitas, de una a cinco estrellas, ¿sabe de qué le hablo?
- P: Sí, de acuerdo, una valoración de 1 a 5 que se visualiza como estrellas.
- R: Eso es.
- P: ¿Más funcionalidades que necesite del portal?
- R: Quedan muchos más temas por tratar, como la disponibilidad, la gestión de los pagos, etc., pero para una primera versión creo que puede ser suficiente.
Modelo Conceptual
Modelo conceptual
Diagrama de clases

Modelo relacional
Intensión
Opción A: una relación por subclase (partición completa y disjunta):
Usuarios(usuarioId, dni, nombre, apellidos, correo, contrasena, direccion, telefono)
PK(usuarioId)
AK(correo)
AK(dni)
Huespedes(usuarioId)
PK(usuarioId)
FK(usuarioId) / Usuarios
Propietarios(usuarioId, fCompra)
PK(usuarioId)
FK(usuarioId) / Usuarios
Opción B: una sola relación con booleanos (partición completa y solapada):
Usuarios(usuarioId, dni, nombre, apellidos, correo, contrasena, direccion, telefono, fCompra, esPropietario, esHuesped)
PK(usuarioId)
AK(correo)
AK(dni)
Estructura común del dominio:
ZonasTuristicas(zonaId, zona)
PK(zonaId)
Alojamientos(alojamientoId, propietarioId, zonaId, direccion, numDormitorios, numBanos, ocupacionMaxima)
PK(alojamientoId)
FK(propietarioId) / Propietarios
FK(zonaId) / ZonasTuristicas
Reservas(reservaId, huespedId, alojamientoId, checkIn, checkOut, comentario, valoracion)
PK(reservaId)
FK(huespedId) / Huespedes
FK(alojamientoId) / Alojamientos
Fotos(fotoId, alojamientoId, titulo, fotoURL)
PK(fotoId)
FK(alojamientoId) / Alojamientos
Servicios(servicioId, alojamientoId, tipoServicio, disponible)
PK(servicioId)
FK(alojamientoId) / Alojamientos
Extensión (fragmento)
ZonasTuristicas = { (z1, "Costa del Sol") }
Alojamientos = { (a1, p1, z1, "Calle Mayor 10", 3, 2, 6) }
Reservas = { (r1, h1, a1, "2024-10-01", "2024-10-10", "Excelente estancia", 1) }
Servicios = { (s1, a1, "Wifi", true), (s2, a1, "Piscina", true) }
Fotos = { (f1, a1, "Salón", "Siempre-viva-salon.jpg"), (f2, a1, "Cocina", "Siempre-viva-cocina.jpg") }
Álgebra relacional
- Alojamientos con sus propietarios y zonas:
- Alojamientos con fotos:
- Alojamientos con servicios:
- Alojamientos con reservas:
- Alojamientos con propietarios, zona, fotos, servicios y reservas:
- Alojamientos con piscina:
- Reservas en la Costa del Sol:
- Dormitorios y baños de alojamientos con Wifi:
- Propietarios en una zona concreta:
- Valoración media por alojamiento:
- Número de servicios por alojamiento:
- Número de fotos por alojamiento:
- Número de reservas por huésped: