Subir archivos a "/"
This commit is contained in:
@@ -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;
|
||||||
Reference in New Issue
Block a user