Ejercicio 39: Gestión de Reservas en una Base de Datos de Aerolínea
Este ejercicio se centra en la gestión de reservas dentro de un sistema de base de datos de una aerolínea. Se trabajará en la actualización de reservas, la identificación de restricciones y el análisis de integridad de datos en el esquema relacional.
Objetivos
- Implementar operaciones de actualización de reservas en una base de datos.
- Verificar y aplicar restricciones de integridad de datos.
- Analizar y clasificar restricciones de integridad referencial.
Entrada de Datos
El esquema de la base de datos de la aerolínea incluye las siguientes entidades y relaciones clave:
- FLIGHT (Vuelo): Identificado por
Flight_number
. - FLIGHT_LEG (Tramo del Vuelo): Incluye
Leg_number
. - LEG_INSTANCE (Instancia de Tramo de Vuelo): Relacionado con fechas específicas.
- FARE (Tarifa): Define costos asociados.
- SEAT_RESERVATION (Reserva de Asiento): Registra pasajeros y asientos.
- AIRPLANE (Avión): Identificado por
Airplane_id
. - AIRPLANE_TYPE (Tipo de Avión): Define modelos y capacidades.
- AIRPORT (Aeropuerto): Identificado por
Airport_code
.
Parte 1: Operación de Actualización de Reserva
a. Operaciones necesarias para registrar una nueva reserva
Verificar disponibilidad:
- Comprobar existencia del vuelo y tramo en
LEG_INSTANCE
. - Revisar disponibilidad de asientos en
SEAT_RESERVATION
.
- Comprobar existencia del vuelo y tramo en
Crear la reserva:
- Insertar un nuevo registro en
SEAT_RESERVATION
con detalles del pasajero y vuelo.
- Insertar un nuevo registro en
Actualizar la ocupación del vuelo:
- Reducir asientos disponibles en
LEG_INSTANCE
.
- Reducir asientos disponibles en
Confirmar la reserva:
- Registrar la tarifa asociada y emitir el ticket.
Ejemplo de consulta SQL
-- TODO: Implementar
INSERT INTO SEAT_RESERVATION (passenger_id, flight_number, leg_number, date, seat_number)
VALUES (12345, 'AA101', 1, '2025-06-15', '12A');
Parte 2: Restricciones a Verificar
b. Restricciones en la operación de reserva
- Disponibilidad de asiento: No reservar un asiento ocupado.
- Existencia del vuelo y tramo: Validar en
LEG_INSTANCE
. - Consistencia de horarios: Hora de llegada posterior a la de salida.
- Compatibilidad del avión con el aeropuerto: Validar en
CAN_LAND
. - Integridad de datos del pasajero:
Passenger_id
debe existir.
Parte 3: Tipos de Restricciones de Integridad
Restricción | Tipo |
---|---|
FLIGHT tiene Flight_number único | Clave primaria |
FLIGHT_LEG asociado a FLIGHT | Integridad referencial |
LEG_INSTANCE corresponde a FLIGHT_LEG | Integridad referencial |
SEAT_RESERVATION asociada a pasajero y vuelo | Integridad referencial |
Avión debe existir en AIRPLANE | Integridad referencial |
Fecha de llegada no anterior a salida | Restricción de dominio |
Asientos reservados no superan capacidad | Restricción de negocio |
Parte 4: Restricciones de Integridad Referencial
FLIGHT_LEG.Flight_number
→FLIGHT.Flight_number
LEG_INSTANCE.Flight_number, LEG_INSTANCE.Leg_number
→FLIGHT_LEG.Flight_number, FLIGHT_LEG.Leg_number
SEAT_RESERVATION.Flight_number, SEAT_RESERVATION.Leg_number, SEAT_RESERVATION.Date
→LEG_INSTANCE.Flight_number, LEG_INSTANCE.Leg_number, LEG_INSTANCE.Date
FARE.Flight_number
→FLIGHT.Flight_number
LEG_INSTANCE.Airplane_id
→AIRPLANE.Airplane_id
AIRPLANE.Airplane_type
→AIRPLANE_TYPE.Airplane_type
CAN_LAND.Airplane_type, CAN_LAND.Airport_code
→AIRPLANE_TYPE.Airplane_type, AIRPORT.Airport_code
FLIGHT_LEG.Departure_airport
→AIRPORT.Airport_code
FLIGHT_LEG.Arrival_airport
→AIRPORT.Airport_code
SEAT_RESERVATION.Passenger_id
→PASSENGER.Passenger_id
Conclusión
Este ejercicio permite reforzar conceptos clave en bases de datos, como operaciones de actualización complejas, verificación de restricciones de integridad, identificación de claves y relaciones entre entidades, y análisis de restricciones de negocio en sistemas de reserva.
Entrega esperada
- Descripción detallada de cada parte del ejercicio.
- SQL que represente la inserción de reservas.
- Análisis de restricciones con explicaciones.