AUTOMATIZZARE LA GESTIONE DELLE PRENOTAZIONI ONLINE PER CORSE SU LINEE DI TRASPORTO PUBBLICO: analisi+SQL.

Anatomia SQL
Anatomia SQL

Esempio pratico realistico di automazione della gestione delle prenotazioni online per corse su linee di trasporto pubblico (es. autobus extraurbani, navette aeroportuali, traghetti locali, treni regionali con prenotazione posti).

1. Analisi del problema.

Un’azienda di trasporto deve gestire:

  • Linee di trasporto
  • Corse giornaliere
  • Mezzi utilizzati
  • Passeggeri
  • Prenotazioni posti

Il sistema deve permettere di:

  • Prenotare un posto su una corsa
  • Controllare disponibilità
  • Evitare overbooking
  • Gestire pagamenti
  • Generare report utilizzo mezzi

2. Modellazione concettuale.

Entità principali

  • Passeggero
  • Linea
  • Corsa
  • Mezzo
  • Prenotazione
  • Pagamento

Relazioni

  • Una linea ha più corse
  • Una corsa utilizza un mezzo
  • Un passeggero può effettuare più prenotazioni
  • Una corsa ha più prenotazioni

3. Struttura database (Esempio SQL).

Tabella Passeggeri

CREATE TABLE Passeggeri (

    id_passeggero INT PRIMARY KEY,

    nome VARCHAR(50),

    cognome VARCHAR(50),

    email VARCHAR(100),

    telefono VARCHAR(20)

);

Tabella Linee

CREATE TABLE Linee (

    id_linea INT PRIMARY KEY,

    nome_linea VARCHAR(50),

    partenza VARCHAR(50),

    arrivo VARCHAR(50)

);

Tabella Mezzi

CREATE TABLE Mezzi (

    id_mezzo INT PRIMARY KEY,

    modello VARCHAR(50),

    posti_totali INT

);

Tabella Corse

CREATE TABLE Corse (

    id_corsa INT PRIMARY KEY,

    id_linea INT,

    id_mezzo INT,

    data_corsa DATE,

    orario TIME,

    FOREIGN KEY (id_linea) REFERENCES Linee(id_linea),

    FOREIGN KEY (id_mezzo) REFERENCES Mezzi(id_mezzo)

);

Tabella Prenotazioni

CREATE TABLE Prenotazioni (

    id_prenotazione INT PRIMARY KEY,

    id_passeggero INT,

    id_corsa INT,

    numero_posti INT,

    FOREIGN KEY (id_passeggero) REFERENCES Passeggeri(id_passeggero),

    FOREIGN KEY (id_corsa) REFERENCES Corse(id_corsa)

);

Tabella Pagamenti

CREATE TABLE Pagamenti (

    id_pagamento INT PRIMARY KEY,

    id_prenotazione INT,

    importo DECIMAL(8,2),

    metodo VARCHAR(50),

    stato VARCHAR(30),

    FOREIGN KEY (id_prenotazione) REFERENCES Prenotazioni(id_prenotazione)

);

4. Automazioni pratiche.

Inserimento nuova corsa

INSERT INTO Corse

VALUES (10, 2, 5, ‘2026-03-20′, ’08:30’);

Corsa sulla linea 2 con mezzo 5.

Prenotazione posti

INSERT INTO Prenotazioni

VALUES (100, 7, 10, 2);

Il passeggero 7 prenota 2 posti sulla corsa 10.

Controllo disponibilità posti

SELECT

    M.posti_totali – COALESCE(SUM(P.numero_posti),0) AS posti_disponibili

FROM Corse C

JOIN Mezzi M ON C.id_mezzo = M.id_mezzo

LEFT JOIN Prenotazioni P ON C.id_corsa = P.id_corsa

WHERE C.id_corsa = 10

GROUP BY M.posti_totali;

Elenco passeggeri di una corsa

SELECT Pa.nome, Pa.cognome

FROM Prenotazioni Pr

JOIN Passeggeri Pa ON Pr.id_passeggero = Pa.id_passeggero

WHERE Pr.id_corsa = 10;

Report utilizzo linee

SELECT L.nome_linea, COUNT(Pr.id_prenotazione) AS totale_prenotazioni

FROM Prenotazioni Pr

JOIN Corse C ON Pr.id_corsa = C.id_corsa

JOIN Linee L ON C.id_linea = L.id_linea

GROUP BY L.nome_linea;

5. Automazione avanzata (Trigger anti-overbooking).

CREATE TRIGGER controllo_posti

BEFORE INSERT ON Prenotazioni

FOR EACH ROW

BEGIN

    DECLARE posti_prenotati INT;

    DECLARE posti_totali INT;

    SELECT COALESCE(SUM(numero_posti),0)

    INTO posti_prenotati

    FROM Prenotazioni

    WHERE id_corsa = NEW.id_corsa;

    SELECT posti_totali

    INTO posti_totali

    FROM Corse C

    JOIN Mezzi M ON C.id_mezzo = M.id_mezzo

    WHERE C.id_corsa = NEW.id_corsa;

    IF posti_prenotati + NEW.numero_posti > posti_totali THEN

        SIGNAL SQLSTATE ‘45000’

        SET MESSAGE_TEXT = ‘Posti non disponibili’;

    END IF;

END;

Blocca prenotazioni oltre la capienza del mezzo.

6. Caso pratico reale.

Scenario.

Linea autobus:

  • Venezia → Trieste
  • Autobus con 50 posti
  • 3 corse giornaliere

Processo automatizzato

  1. Cliente seleziona linea e orario
  2. Sistema verifica posti disponibili
  3. Cliente prenota e paga online
  4. Sistema genera biglietto digitale
  5. Autista visualizza elenco passeggeri

7. Funzionalità realistiche aggiuntive.

Sistema reale potrebbe includere:

  • Selezione posto numerato
  • QR code per accesso al mezzo
  • Gestione abbonamenti
  • Rimborso e modifiche prenotazione
  • Tracking mezzi in tempo reale
  • Notifiche ritardi
  • Lista attesa automatica
  • Tariffe dinamiche

8. Possibile architettura software.

Stack realistico:

  • Database → PostgreSQL / MySQL
  • Backend → Java Spring / Node.js / Python
  • Frontend → Web app / App mobile
  • Integrazione pagamento → Stripe / PayPal
  • API → sistemi bigliettazione e tracking GPS

Mini riassunto.

L’automazione consente di:

  • Gestire corse e linee
  • Prenotare posti online
  • Controllare disponibilità
  • Evitare overbooking
  • Automatizzare pagamenti
  • Generare report operativi
** Se puoi sostenere il mio lavoro, comprami un libro | Buy me a book! **
** ISCRIVITI ALLA NEWSLETTER ! **

About the Author

Sergio Mauri
Blogger, autore. Perito in Sistemi Informativi Aziendali, musicista e compositore, Laurea in Discipline storiche e filosofiche e in Filosofia. Premio speciale al Concorso Claudia Ruggeri nel 2007; terzo posto al Premio Igor Slavich nel 2020. Ha pubblicato con Terra d'Ulivi nel 2007 e nel 2011, con Hammerle Editori nel 2013 e 2014, con PGreco nel 2015 con Historica Edizioni e Alcova Letteraria nel 2022 con Silele Edizioni (La Tela Nera) nel 2023 e con Amazon Kdp nel 2024 e 2025.