From b261964ef983d0734724784d7bc9ca380f581395 Mon Sep 17 00:00:00 2001 From: alumnos_ti Date: Tue, 23 Jun 2026 23:37:19 +0000 Subject: [PATCH] Subir archivos a "/" --- basededatos_definitiva.sql | 271 +++++++++++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 basededatos_definitiva.sql diff --git a/basededatos_definitiva.sql b/basededatos_definitiva.sql new file mode 100644 index 0000000..a477392 --- /dev/null +++ b/basededatos_definitiva.sql @@ -0,0 +1,271 @@ +CREATE DATABASE IF NOT EXISTS carpooling; +USE carpooling; + +-- 1. Tabla principal de usuarios +CREATE TABLE Usuarios ( + ID_usuario INT AUTO_INCREMENT PRIMARY KEY, + Nombre VARCHAR(100) NOT NULL, + Apellido VARCHAR(100) NOT NULL, + DNI VARCHAR(20) UNIQUE NOT NULL, + DniFrenteImagen MEDIUMTEXT NULL, + DniDorsoImagen MEDIUMTEXT NULL, + Correo VARCHAR(150) UNIQUE NOT NULL, + Telefono VARCHAR(20), + `Contraseña` VARCHAR(255) NOT NULL, + FotoPerfil MEDIUMTEXT NULL, + Descripcion TEXT NULL, + Preferencias TEXT NULL, + Saldo DECIMAL(10,2) DEFAULT 0.00, + TokenRecuperacion VARCHAR(255) NULL, + ExpiracionToken DATETIME NULL, + BaneadoHasta DATETIME NULL DEFAULT NULL, + FechaRegistro DATETIME DEFAULT CURRENT_TIMESTAMP, + Estado VARCHAR(50) DEFAULT 'Activo' +); + +-- 2. Subtipos de usuarios +CREATE TABLE Pasajeros ( + ID_pasajero INT AUTO_INCREMENT PRIMARY KEY, + ID_usuario INT NOT NULL, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE +); + +CREATE TABLE Conductores ( + ID_conductor INT AUTO_INCREMENT PRIMARY KEY, + LicenciaConducir VARCHAR(100) NOT NULL, + SeguroVehiculo VARCHAR(100) NOT NULL, + CuentaBancaria VARCHAR(100) NOT NULL, + Estado VARCHAR(50) DEFAULT 'Esperando', + FechaRegistro DATETIME DEFAULT CURRENT_TIMESTAMP, + BaneadoHasta DATETIME NULL DEFAULT NULL, + -- Datos de contacto y pago del conductor + TelefonoContacto VARCHAR(50) NULL, + AliasMP VARCHAR(100) NULL, + -- Fotos de identidad del conductor (almacenadas en Base64) + FotoCarnet MEDIUMTEXT NULL, + FotoCara MEDIUMTEXT NULL, + ID_usuario INT NOT NULL, + vehiculo_activo_id INT NULL, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE +); + +CREATE TABLE Administradores ( + ID_administrador INT AUTO_INCREMENT PRIMARY KEY, + ID_usuario INT NOT NULL, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE +); + +-- 3. Entidades Adicionales +CREATE TABLE Vehiculos ( + ID_vehiculo INT AUTO_INCREMENT PRIMARY KEY, + CantidadAsientos INT NOT NULL, + Color VARCHAR(50) NOT NULL, + Modelo VARCHAR(100) NOT NULL, + Marca VARCHAR(100) NOT NULL, + Patente VARCHAR(50) DEFAULT 'Sin Patente', + Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente', + FechaRegistro DATETIME DEFAULT CURRENT_TIMESTAMP, + -- Foto general (legacy/compatibilidad) + Foto MEDIUMTEXT, + -- Documentación del vehículo (almacenada en Base64) + PapelesAuto MEDIUMTEXT NULL, + -- Fotos 360° del vehículo (almacenadas en Base64) + FotoFrente MEDIUMTEXT NULL, + FotoCostado MEDIUMTEXT NULL, + FotoAtras MEDIUMTEXT NULL +); + +-- Nota: La disponibilidad de asientos se calcula en tiempo de consulta como: +-- asientos_disponibles = Vehiculos.CantidadAsientos - COUNT(Reservas activas) +-- donde Reservas activas son las que tienen Estado NOT IN ('Cancelada', 'Rechazada') +CREATE TABLE Publicaciones ( + ID_publicacion INT AUTO_INCREMENT PRIMARY KEY, + CiudadOrigen VARCHAR(100) NOT NULL, + CiudadDestino VARCHAR(100) NOT NULL, + -- Calle/dirección exacta de salida (visible para los pasajeros) + CalleSalida VARCHAR(200) NULL, + HoraSalida DATETIME NOT NULL, + Precio DECIMAL(10,2) NOT NULL, + Estado VARCHAR(50) NOT NULL DEFAULT 'Activa', + DistanciaKM INT NULL, + DuracionMinutos INT NULL, + ID_vehiculo INT NOT NULL, + FOREIGN KEY (ID_vehiculo) REFERENCES Vehiculos(ID_vehiculo) +); + +CREATE TABLE Reservas ( + ID_reserva INT AUTO_INCREMENT PRIMARY KEY, + Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente', + FechaReserva DATETIME DEFAULT CURRENT_TIMESTAMP, + CodigoAcceso VARCHAR(20) NULL, + TipoPasaje ENUM('propio','tercero') NOT NULL DEFAULT 'propio', + PasajeroNombre VARCHAR(100) NULL, + PasajeroApellido VARCHAR(100) NULL, + PasajeroDNI VARCHAR(20) NULL, + PasajeroTelefono VARCHAR(20) NULL, + PasajeroCorreo VARCHAR(150) NULL, + ID_usuario_responsable INT NULL, + ID_publicacion INT NOT NULL, + FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE +); + +CREATE TABLE Pagos ( + ID_pago INT AUTO_INCREMENT PRIMARY KEY, + Monto DECIMAL(10,2) NOT NULL, + Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente', + Fecha DATETIME DEFAULT CURRENT_TIMESTAMP, + ID_reserva INT NOT NULL, + FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE +); + +CREATE TABLE RetirosAdmin ( + ID_retiro INT AUTO_INCREMENT PRIMARY KEY, + Monto DECIMAL(10,2) NOT NULL, + Fecha DATETIME DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE Calificaciones ( + ID_calificacion INT AUTO_INCREMENT PRIMARY KEY, + Comentario TEXT, + Puntuacion INT CHECK(Puntuacion >= 1 AND Puntuacion <= 5), + ID_pasajero INT NOT NULL, + ID_conductor INT NOT NULL, + ID_reserva INT NOT NULL, + Fecha DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ID_pasajero) REFERENCES Pasajeros(ID_pasajero) ON DELETE CASCADE, + FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE, + FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE +); + +CREATE TABLE Reportes ( + ID_reporte INT AUTO_INCREMENT PRIMARY KEY, + Hora TIME NOT NULL, + Fecha DATE NOT NULL, + Descripcion TEXT NOT NULL, + ID_conductor INT NOT NULL, + ID_publicacion INT NULL, + ID_usuario_reportante INT NULL, + FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE, + FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE SET NULL, + FOREIGN KEY (ID_usuario_reportante) REFERENCES Usuarios(ID_usuario) ON DELETE SET NULL +); + +CREATE TABLE ReportesPasajeros ( + ID_reporte_pasajero INT AUTO_INCREMENT PRIMARY KEY, + ID_reserva INT NOT NULL, + ID_usuario_reportado INT NOT NULL, + ID_usuario_responsable INT NULL, + ID_conductor INT NOT NULL, + Motivo VARCHAR(80) NOT NULL, + Descripcion TEXT NULL, + Estado VARCHAR(30) NOT NULL DEFAULT 'Pendiente', + Fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE, + FOREIGN KEY (ID_usuario_reportado) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE, + FOREIGN KEY (ID_usuario_responsable) REFERENCES Usuarios(ID_usuario) ON DELETE SET NULL, + FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE +); + +CREATE TABLE Notificaciones ( + ID_notificacion INT AUTO_INCREMENT PRIMARY KEY, + ID_usuario INT NOT NULL, + Mensaje TEXT NOT NULL, + AccionURL VARCHAR(255) NULL, + AccionLabel VARCHAR(80) NULL, + AccionSecundariaURL VARCHAR(255) NULL, + AccionSecundariaLabel VARCHAR(80) NULL, + Leida BOOLEAN DEFAULT FALSE, + Fecha DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE +); + +CREATE TABLE ConfirmacionesViaje ( + ID_confirmacion INT AUTO_INCREMENT PRIMARY KEY, + ID_reserva INT NOT NULL UNIQUE, + ID_usuario INT NOT NULL, + ID_publicacion INT NOT NULL, + ConfirmoLlegada BOOLEAN NOT NULL DEFAULT TRUE, + FechaConfirmacion DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE, + FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE +); + +CREATE TABLE ConfirmacionesConductorViaje ( + ID_confirmacion INT AUTO_INCREMENT PRIMARY KEY, + ID_publicacion INT NOT NULL UNIQUE, + ID_conductor INT NOT NULL, + Estado VARCHAR(30) NOT NULL DEFAULT 'Todo bien', + FechaConfirmacion DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE, + FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE +); + +-- Tabla para tickets de soporte enviados por usuarios +CREATE TABLE Soporte ( + ID_soporte INT AUTO_INCREMENT PRIMARY KEY, + ID_usuario INT NOT NULL, + Asunto VARCHAR(150) NOT NULL, + Mensaje TEXT NOT NULL, + Fecha DATETIME DEFAULT CURRENT_TIMESTAMP, + Estado VARCHAR(50) NOT NULL DEFAULT 'Pendiente', + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE BusquedasViajes ( + ID_busqueda INT AUTO_INCREMENT PRIMARY KEY, + ID_usuario INT NULL, + CiudadOrigen VARCHAR(100) NULL, + CiudadDestino VARCHAR(100) NULL, + Orden VARCHAR(50) NULL, + Resultados INT NOT NULL DEFAULT 0, + IP VARCHAR(45) NULL, + UserAgent VARCHAR(255) NULL, + Fecha DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- 4. Tablas Intermedias (Relaciones N:M) +CREATE TABLE ConductorVehiculo ( + ID_conductor INT, + ID_vehiculo INT, + PRIMARY KEY (ID_conductor, ID_vehiculo), + FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE, + FOREIGN KEY (ID_vehiculo) REFERENCES Vehiculos(ID_vehiculo) ON DELETE CASCADE +); + +CREATE TABLE ConductorPublicacion ( + ID_conductor INT, + ID_publicacion INT, + PRIMARY KEY (ID_conductor, ID_publicacion), + FOREIGN KEY (ID_conductor) REFERENCES Conductores(ID_conductor) ON DELETE CASCADE, + FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE +); + +CREATE TABLE PasajerosReservas ( + ID_pasajero INT, + ID_reserva INT, + PRIMARY KEY (ID_pasajero, ID_reserva), + FOREIGN KEY (ID_pasajero) REFERENCES Pasajeros(ID_pasajero) ON DELETE CASCADE, + FOREIGN KEY (ID_reserva) REFERENCES Reservas(ID_reserva) ON DELETE CASCADE +); + +CREATE TABLE AdministradorUsuario ( + ID_administrador INT, + ID_usuario INT, + PRIMARY KEY (ID_administrador, ID_usuario), + FOREIGN KEY (ID_administrador) REFERENCES Administradores(ID_administrador) ON DELETE CASCADE, + FOREIGN KEY (ID_usuario) REFERENCES Usuarios(ID_usuario) ON DELETE CASCADE +); + +CREATE TABLE AdministradorPublicacion ( + ID_administrador INT, + ID_publicacion INT, + PRIMARY KEY (ID_administrador, ID_publicacion), + FOREIGN KEY (ID_administrador) REFERENCES Administradores(ID_administrador) ON DELETE CASCADE, + FOREIGN KEY (ID_publicacion) REFERENCES Publicaciones(ID_publicacion) ON DELETE CASCADE +); + +ALTER TABLE Conductores + ADD CONSTRAINT fk_conductores_vehiculo_activo + FOREIGN KEY (vehiculo_activo_id) REFERENCES Vehiculos(ID_vehiculo) ON DELETE SET NULL;