Saltar a contenido

Modelo de datos

Diagrama EER

erDiagram

    ROL ||--o{ USUARIO : POSEER

    USUARIO ||--o{ IDENTIDAD_AUTENTICACION : UTILIZAR
    USUARIO ||--o{ RESERVA : REALIZAR
    USUARIO ||--o{ AUDITORIA_ADMIN : EJECUTAR

    PAIS ||--o{ CIUDAD : USAR
    CIUDAD ||--o{ AEROPUERTO : TENER

    AEROPUERTO ||--o{ VUELO : ORIGEN
    AEROPUERTO ||--o{ VUELO : DESTINO
    AEROPUERTO ||--o{ AERONAVE : BASE

    MODELO_AERONAVE ||--o{ AERONAVE : DEFINIR
    AERONAVE ||--o{ ASIENTO : CONTENER
    AERONAVE ||--o{ VUELO : OPERAR

    CLASE_CABINA ||--o{ ASIENTO : CLASIFICAR
    CLASE_CABINA ||--o{ TARIFA_VUELO : OFRECER
    CLASE_CABINA ||--o{ RESERVA : SELECCIONAR

    VUELO ||--o{ TARIFA_VUELO : DISPONER
    VUELO ||--o{ ASIENTO_VUELO : GENERAR
    ASIENTO ||--o{ ASIENTO_VUELO : PERTENECER

    RESERVA ||--|{ RESERVA_VUELO : INCLUIR
    VUELO ||--o{ RESERVA_VUELO : FORMAR

    RESERVA ||--|{ PASAJERO_RESERVA : CONTENER

    RESERVA_VUELO ||--|{ BILLETE : GENERAR
    PASAJERO_RESERVA ||--o{ BILLETE : TENER
    TARIFA_VUELO ||--o{ BILLETE : APLICAR
    ASIENTO_VUELO ||--o{ BILLETE : ASIGNAR

    BILLETE ||--o{ EQUIPAJE : INCLUIR
    BILLETE ||--o| DATOS_APIS : DISPONER
    BILLETE ||--o| CHECKIN : REALIZAR

    CHECKIN ||--|| TARJETA_EMBARQUE : GENERAR

    RESERVA ||--o| DATOS_FACTURACION : UTILIZAR
    RESERVA ||--o{ PAGO : RECIBIR

Diccionario de datos

El diccionario de datos define los atributos que componen las entidades identificadas en el modelo EER, indicando su tipo, claves, restricciones y significado dentro del sistema.

ROL

Campo Tipo Clave Nulo Restricciones Descripción
id_rol INT PK No Identificador único Identificador del rol
codigo VARCHAR(30) UK No Único Código interno del rol
nombre VARCHAR(50) — No — Nombre descriptivo del rol

USUARIO

Campo Tipo Clave Nulo Restricciones Descripción
id_usuario INT PK No Identificador único Identificador del usuario
id_rol INT FK No Referencia a ROL Rol asignado al usuario
email VARCHAR(255) UK No Único Correo electrónico del usuario
password_hash VARCHAR(255) — Sí Puede ser NULL para cuentas externas Contraseña almacenada mediante hash
nombre VARCHAR(100) — No — Nombre del usuario
apellidos VARCHAR(150) — No — Apellidos del usuario
telefono VARCHAR(20) — Sí — Teléfono de contacto
fecha_nacimiento DATE — Sí — Fecha de nacimiento
foto_url VARCHAR(500) — Sí — Dirección de la fotografía de perfil
origen_foto VARCHAR(20) — Sí DEFAULT, GOOGLE, APPLE, etc. Origen de la fotografía
activo BOOLEAN — No Valor booleano Indica si la cuenta está activa
fecha_creacion_utc DATETIME — No UTC Fecha de creación de la cuenta

IDENTIDAD_AUTENTICACION

Campo Tipo Clave Nulo Restricciones Descripción
id_identidad INT PK No Identificador único Identificador de la identidad
id_usuario INT FK No Referencia a USUARIO Usuario al que pertenece la identidad
proveedor VARCHAR(20) — No GOOGLE o APPLE Proveedor externo de autenticación
identificador_externo VARCHAR(255) UK No Único junto al proveedor Identificador del usuario en el proveedor
email_proveedor VARCHAR(255) — Sí — Correo proporcionado por el proveedor

Restricción recomendada: UNIQUE(proveedor, identificador_externo).

PAIS

Campo Tipo Clave Nulo Restricciones Descripción
id_pais INT PK No Identificador único Identificador del país
codigo_iso2 CHAR(2) UK No ISO 3166-1 alpha-2 Código ISO de dos caracteres
codigo_iso3 CHAR(3) UK No ISO 3166-1 alpha-3 Código ISO de tres caracteres
nombre VARCHAR(100) — No — Nombre del país

CIUDAD

Campo Tipo Clave Nulo Restricciones Descripción
id_ciudad INT PK No Identificador único Identificador de la ciudad
id_pais INT FK No Referencia a PAIS País al que pertenece la ciudad
nombre VARCHAR(100) — No — Nombre de la ciudad

Restricción recomendada: UNIQUE(id_pais, nombre).

AEROPUERTO

Campo Tipo Clave Nulo Restricciones Descripción
id_aeropuerto INT PK No Identificador único Identificador del aeropuerto
id_ciudad INT FK No Referencia a CIUDAD Ciudad en la que se encuentra
codigo_iata CHAR(3) UK No Código IATA Código IATA del aeropuerto
nombre VARCHAR(150) — No — Nombre del aeropuerto
zona_horaria VARCHAR(50) — No Identificador IANA Zona horaria del aeropuerto
latitud DECIMAL(9,6) — No Rango geográfico válido Latitud del aeropuerto
longitud DECIMAL(9,6) — No Rango geográfico válido Longitud del aeropuerto
activo BOOLEAN — No Valor booleano Indica si el aeropuerto está operativo en el sistema

MODELO_AERONAVE

Campo Tipo Clave Nulo Restricciones Descripción
id_modelo INT PK No Identificador único Identificador del modelo
fabricante VARCHAR(100) — No — Fabricante de la aeronave
modelo VARCHAR(100) — No — Modelo de la aeronave
capacidad_maxima INT — No Mayor que 0 Capacidad máxima de pasajeros
capacidad_combustible_l DECIMAL(12,2) — No Mayor que 0 Capacidad de combustible en litros
peso_vacio_kg DECIMAL(12,2) — No Mayor que 0 Peso de la aeronave vacía
peso_max_despegue_kg DECIMAL(12,2) — No Mayor que peso vacío Peso máximo autorizado al despegue
alcance_km INT — No Mayor que 0 Alcance máximo aproximado en kilómetros
activo BOOLEAN — No Valor booleano Indica si el modelo está disponible

AERONAVE

Campo Tipo Clave Nulo Restricciones Descripción
id_aeronave INT PK No Identificador único Identificador de la aeronave
id_modelo INT FK No Referencia a MODELO_AERONAVE Modelo al que pertenece
id_aeropuerto_base INT FK Sí Referencia a AEROPUERTO Aeropuerto base de la aeronave
matricula VARCHAR(20) UK No Única Matrícula de la aeronave
nombre VARCHAR(100) — Sí — Nombre identificativo de la aeronave
estado VARCHAR(30) — No Valores controlados Estado operativo
fecha_alta DATE — No — Fecha de incorporación a la flota
activo BOOLEAN — No Valor booleano Indica si forma parte de la flota activa

CLASE_CABINA

Campo Tipo Clave Nulo Restricciones Descripción
id_clase INT PK No Identificador único Identificador de la clase
codigo VARCHAR(20) UK No Único Código de la clase
nombre VARCHAR(50) — No — Nombre de la clase de cabina

ASIENTO

Campo Tipo Clave Nulo Restricciones Descripción
id_asiento INT PK No Identificador único Identificador del asiento
id_aeronave INT FK No Referencia a AERONAVE Aeronave a la que pertenece
id_clase INT FK No Referencia a CLASE_CABINA Clase de cabina del asiento
fila INT — No Mayor que 0 Número de fila
letra CHAR(1) — No Valor válido según configuración Letra del asiento
tipo VARCHAR(30) — No Valores controlados Tipo de asiento
salida_emergencia BOOLEAN — No Valor booleano Indica si está situado en una salida de emergencia
activo BOOLEAN — No Valor booleano Indica si el asiento está disponible en la configuración

Restricción recomendada: UNIQUE(id_aeronave, fila, letra).

VUELO

Campo Tipo Clave Nulo Restricciones Descripción
id_vuelo INT PK No Identificador único Identificador del vuelo
id_origen INT FK No Referencia a AEROPUERTO Aeropuerto de origen
id_destino INT FK No Referencia a AEROPUERTO Aeropuerto de destino
id_aeronave INT FK No Referencia a AERONAVE Aeronave asignada al vuelo
numero_vuelo VARCHAR(10) — No — Número comercial del vuelo
salida_utc DATETIME — No UTC Fecha y hora de salida
llegada_utc DATETIME — No UTC Fecha y hora de llegada
estado VARCHAR(30) — No Valores controlados Estado operativo del vuelo
venta_habilitada BOOLEAN — No Valor booleano Indica si el vuelo está disponible para su venta

Restricciones recomendadas: origen y destino deben ser distintos y llegada_utc debe ser posterior a salida_utc.

TARIFA_VUELO

Campo Tipo Clave Nulo Restricciones Descripción
id_tarifa INT PK No Identificador único Identificador de la tarifa
id_vuelo INT FK No Referencia a VUELO Vuelo al que pertenece
id_clase INT FK No Referencia a CLASE_CABINA Clase asociada
precio_base DECIMAL(10,2) — No Mayor o igual que 0 Precio base de la tarifa
moneda CHAR(3) — No ISO 4217 Moneda del precio
permite_cancelacion BOOLEAN — No Valor booleano Indica si admite cancelación
permite_cambio BOOLEAN — No Valor booleano Indica si admite cambios
equipaje_mano_piezas TINYINT — No Mayor o igual que 0 Número de piezas de equipaje de mano incluidas
equipaje_facturado_piezas TINYINT — No Mayor o igual que 0 Número de piezas facturadas incluidas
peso_equipaje_facturado_kg DECIMAL(5,2) — No Mayor o igual que 0 Peso máximo de equipaje facturado incluido
activa BOOLEAN — No Valor booleano Indica si la tarifa está disponible

Restricción recomendada: UNIQUE(id_vuelo, id_clase).

ASIENTO_VUELO

Campo Tipo Clave Nulo Restricciones Descripción
id_asiento_vuelo INT PK No Identificador único Identificador de la disponibilidad del asiento en el vuelo
id_vuelo INT FK No Referencia a VUELO Vuelo al que pertenece
id_asiento INT FK No Referencia a ASIENTO Asiento físico de la aeronave
estado VARCHAR(20) — No Valores controlados Estado del asiento para ese vuelo
precio_extra DECIMAL(10,2) — No Mayor o igual que 0 Coste adicional del asiento

Restricción recomendada: UNIQUE(id_vuelo, id_asiento).

RESERVA

Campo Tipo Clave Nulo Restricciones Descripción
id_reserva INT PK No Identificador único Identificador de la reserva
id_usuario INT FK Sí NULL para reservas de invitados Usuario propietario de la reserva
id_clase INT FK No Referencia a CLASE_CABINA Clase seleccionada para la reserva
codigo_reserva VARCHAR(20) UK No Único Localizador de la reserva
tipo_viaje VARCHAR(20) — No IDA o IDA_VUELTA Tipo de viaje
email_contacto VARCHAR(255) — No Formato de correo Correo de contacto de la reserva
telefono_contacto VARCHAR(20) Sí — — Teléfono de contacto
estado VARCHAR(30) — No Valores controlados Estado de la reserva
importe_total DECIMAL(10,2) — No Mayor o igual que 0 Importe total de la reserva
moneda CHAR(3) — No ISO 4217 Moneda utilizada
fecha_creacion_utc DATETIME — No UTC Fecha de creación

RESERVA_VUELO

Campo Tipo Clave Nulo Restricciones Descripción
id_reserva_vuelo INT PK No Identificador único Identificador del tramo de la reserva
id_reserva INT FK No Referencia a RESERVA Reserva a la que pertenece
id_vuelo INT FK No Referencia a VUELO Vuelo incluido
orden TINYINT — No 1 o 2 Orden del tramo dentro de la reserva
tipo_tramo VARCHAR(20) — No IDA o VUELTA Tipo de tramo

PASAJERO_RESERVA

Campo Tipo Clave Nulo Restricciones Descripción
id_pasajero_reserva INT PK No Identificador único Identificador del pasajero dentro de la reserva
id_reserva INT FK No Referencia a RESERVA Reserva a la que pertenece
numero_pasajero TINYINT — No Entre 1 y 8 Número identificativo del pasajero dentro de la reserva
tipo_pasajero VARCHAR(20) — No ADULTO, NINO, BEBE Categoría del pasajero
nombre VARCHAR(100) — No — Nombre del pasajero
apellidos VARCHAR(150) — No — Apellidos del pasajero
fecha_nacimiento DATE — No — Fecha de nacimiento
nacionalidad CHAR(2) — Sí Código ISO Nacionalidad del pasajero

Restricción recomendada: UNIQUE(id_reserva, numero_pasajero).

BILLETE

Campo Tipo Clave Nulo Restricciones Descripción
id_billete INT PK No Identificador único Identificador del billete
id_reserva_vuelo INT FK No Referencia a RESERVA_VUELO Tramo de reserva al que pertenece
id_pasajero_reserva INT FK No Referencia a PASAJERO_RESERVA Pasajero asociado
id_tarifa INT FK No Referencia a TARIFA_VUELO Tarifa aplicada
id_asiento_vuelo INT FK Sí Puede asignarse posteriormente Asiento asignado para el vuelo
codigo_billete VARCHAR(30) UK No Único Identificador comercial del billete
precio_base DECIMAL(10,2) — No Mayor o igual que 0 Precio base aplicado al billete
estado VARCHAR(30) — No Valores controlados Estado del billete

EQUIPAJE

Campo Tipo Clave Nulo Restricciones Descripción
id_equipaje INT PK No Identificador único Identificador del equipaje
id_billete INT FK No Referencia a BILLETE Billete al que pertenece
tipo VARCHAR(30) — No Valores controlados Tipo de equipaje
peso_kg DECIMAL(5,2) — No Mayor que 0 Peso del equipaje
precio DECIMAL(10,2) — No Mayor o igual que 0 Precio asociado

DATOS_APIS

Campo Tipo Clave Nulo Restricciones Descripción
id_apis INT PK No Identificador único Identificador de los datos APIS
id_billete INT FK No Único Billete asociado
tipo_documento VARCHAR(30) — No Valores controlados Tipo de documento utilizado
numero_documento VARCHAR(50) — No — Número del documento
pais_emision CHAR(2) — No Código ISO País emisor
fecha_caducidad DATE No — Fecha válida Fecha de caducidad del documento
sexo CHAR(1) — Sí Valores establecidos Sexo indicado en el documento
pais_residencia CHAR(2) — Sí Código ISO País de residencia
direccion_destino VARCHAR(255) — Sí — Dirección de destino declarada
fecha_actualizacion_utc DATETIME — No UTC Fecha de actualización de los datos

CHECKIN

Campo Tipo Clave Nulo Restricciones Descripción
id_checkin INT PK No Identificador único Identificador del check-in
id_billete INT FK No Único Billete que realiza el check-in
fecha_checkin_utc DATETIME — No UTC Fecha y hora en la que se realiza el check-in

Restricción recomendada: UNIQUE(id_billete).

TARJETA_EMBARQUE

Campo Tipo Clave Nulo Restricciones Descripción
id_tarjeta INT PK No Identificador único Identificador de la tarjeta de embarque
id_checkin INT FK No Único Check-in que generó la tarjeta
codigo_barra VARCHAR(255) UK No Único Código utilizado para identificar la tarjeta
fecha_emision_utc DATETIME — No UTC Fecha de emisión

Restricción recomendada: UNIQUE(id_checkin).

DATOS_FACTURACION

Campo Tipo Clave Nulo Restricciones Descripción
id_facturacion INT PK No Identificador único Identificador de los datos de facturación
id_reserva INT FK No Único Reserva a la que pertenece
nombre_razon_social VARCHAR(150) — No — Nombre o razón social
identificacion_fiscal VARCHAR(50) — No — Identificación fiscal
direccion VARCHAR(255) — No — Dirección de facturación
codigo_postal VARCHAR(15) — No — Código postal
ciudad VARCHAR(100) — No — Ciudad de facturación
pais VARCHAR(100) — No — País de facturación

PAGO

Campo Tipo Clave Nulo Restricciones Descripción
id_pago INT PK No Identificador único Identificador del pago
id_reserva INT FK No Referencia a RESERVA Reserva asociada
metodo VARCHAR(30) — No Valores controlados Método de pago utilizado
importe DECIMAL(10,2) — No Mayor que 0 Importe del pago
moneda CHAR(3) — No ISO 4217 Moneda del pago
estado VARCHAR(30) — No Valores controlados Estado del pago
referencia VARCHAR(100) UK No Única Referencia de la operación
fecha_creacion_utc DATETIME — No UTC Fecha de creación del pago
fecha_confirmacion_utc DATETIME Sí — UTC Fecha de confirmación del pago

AUDITORIA_ADMIN

Campo Tipo Clave Nulo Restricciones Descripción
id_auditoria INT PK No Identificador único Identificador del registro de auditoría
id_usuario INT FK No Referencia a USUARIO Administrador que realizó la operación
accion VARCHAR(50) — No Valores controlados Acción realizada
entidad VARCHAR(50) — No — Entidad afectada
id_entidad INT — No Identificador de registro Identificador del registro afectado
fecha_utc DATETIME — No UTC Fecha y hora de la operación
detalle TEXT Sí — — Información adicional de la operación
Una precisión importante: **este diccionario ya está a un nivel mucho más próximo al modelo físico que el EER**, porque aparecen `VARCHAR`, `DECIMAL`, `DATETIME`, longitudes y restricciones. Eso es correcto para documentarlo como diccionario de datos.

Además, al revisar el modelo contra tus requisitos, hay dos puntos que conviene reflejar también cuando actualicemos el EER definitivo: las **reservas de invitado** hacen que la relación `USUARIO–RESERVA` sea opcional, y el **asiento de un billete puede quedar sin asignar hasta el check-in**.