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