← Torna alla Home
Area Didattica · Dump reale 29/06/2026

Struttura Database OnePassage

Schema logico relazionale basato sul database attuale: tabelle, attributi SQL, chiavi primarie, chiavi esterne, indici e cardinalita principali.

Entita principale

USERS

Contiene gli account degli utenti, i dati profilo, lo stato email, il ruolo admin e gli identificativi SSO.

  • PK id INT AUTO_INCREMENT
  • · nome VARCHAR(100)
  • · cognome VARCHAR(100)
  • UQ email VARCHAR(255)
  • · password_hash VARCHAR(255)
  • · telefono VARCHAR(20)
  • · bio TEXT
  • · foto_profilo VARCHAR(255)
  • · created_at TIMESTAMP
  • · updated_at TIMESTAMP
  • · public_key TEXT
  • · email_verificata TINYINT(1)
  • · is_admin TINYINT(1)
  • · ban_status ENUM('attivo','bannato')
  • · google_id VARCHAR(255)
  • · apple_id VARCHAR(255)

Vincoli di Integrità e Cardinalità

PK id identifica univocamente ogni utente.

1:N users(id) -> ride_offers.user_id: un utente puo pubblicare molti passaggi.

1:N users(id) -> ride_requests.user_id: un utente puo richiedere molti passaggi come passeggero.

1:N users(id) -> chat_messages.sender_id e receiver_id: un utente puo inviare e ricevere molti messaggi.

Entita evento

EVENTS

Rappresenta concerti, festival o eventi sportivi, manuali o importati da Ticketmaster.

  • PK id INT AUTO_INCREMENT
  • · nome_evento VARCHAR(255)
  • · descrizione TEXT
  • · luogo VARCHAR(255)
  • · latitudine DECIMAL(10,8)
  • · longitudine DECIMAL(11,8)
  • · data_evento DATETIME
  • · created_at TIMESTAMP
  • · updated_at TIMESTAMP
  • IX creato_da INT
  • · approvato TINYINT(1)
  • UQ ticketmaster_id VARCHAR(64)
  • · fonte ENUM('manuale','ticketmaster')

Vincoli di Integrità e Cardinalità

PK id identifica ogni evento.

1:N events(id) -> ride_offers.event_id: un evento puo avere molti passaggi offerti.

Passaggi offerti

RIDE_OFFERS

Associa un guidatore a un evento e descrive partenza, posti, prezzo e coordinate.

  • PK id INT AUTO_INCREMENT
  • FK user_id INT
  • FK event_id INT
  • · punto_partenza VARCHAR(255)
  • · latitudine_partenza DECIMAL(10,8)
  • · longitudine_partenza DECIMAL(11,8)
  • · posti_disponibili INT
  • · prezzo_per_posto DECIMAL(10,2)
  • · note TEXT
  • · created_at TIMESTAMP
  • · updated_at TIMESTAMP

Vincoli di Integrità e Cardinalità

FK user_id -> users(id) con ON DELETE CASCADE.

FK event_id -> events(id) con ON DELETE CASCADE.

N:1 Molti passaggi possono appartenere allo stesso utente e allo stesso evento.

1:N ride_offers(id) -> ride_requests.offer_id: un passaggio puo ricevere molte richieste.

Richieste prenotazione

RIDE_REQUESTS

Registra le richieste dei passeggeri, lo stato del viaggio, conferme e recensioni reciproche.

  • PK id INT AUTO_INCREMENT
  • FK user_id INT
  • FK offer_id INT
  • FK driver_id INT
  • · stato ENUM('in_attesa','accettato','rifiutato','concluso')
  • · stelle INT
  • · recensione_testo TEXT
  • · created_at TIMESTAMP
  • · updated_at TIMESTAMP
  • · confermato_driver TINYINT(1)
  • · confermato_passenger TINYINT(1)
  • · passaggio_confermato TINYINT(1)
  • · stelle_driver TINYINT(1)
  • · recensione_driver TEXT
  • · recensito_da_driver TINYINT(1)
  • · recensito_da_passenger TINYINT(1)

Vincoli di Integrità e Cardinalità

FK user_id -> users(id): passeggero che richiede.

FK offer_id -> ride_offers(id): passaggio richiesto.

FK driver_id -> users(id): conducente del passaggio.

1:N ride_requests(id) -> chat_messages.request_id, chat_keys.request_id e segnalazioni.request_id.

Messaggistica

CHAT_MESSAGES

Contiene i messaggi della chat collegata a una richiesta, anche in forma cifrata AES-GCM.

  • PK id INT AUTO_INCREMENT
  • FK request_id INT
  • FK sender_id INT
  • FK receiver_id INT
  • · messaggio TEXT
  • · letto TINYINT(1)
  • · created_at TIMESTAMP
  • · encrypted TINYINT(1)

Vincoli di Integrità e Cardinalità

FK request_id -> ride_requests(id) con ON DELETE CASCADE.

FK sender_id -> users(id) con ON DELETE CASCADE.

FK receiver_id -> users(id) con ON DELETE CASCADE.

N:1 Molti messaggi appartengono alla stessa richiesta di passaggio.

Cifratura chat

CHAT_KEYS

Memorizza salt e dati legacy delle chiavi per la chat cifrata collegata a una richiesta.

  • PK id INT AUTO_INCREMENT
  • FK request_id INT
  • IX user_id INT
  • · chat_salt VARCHAR(64)
  • · encrypted_key TEXT
  • · created_at TIMESTAMP

Vincoli di Integrità e Cardinalità

FK request_id -> ride_requests(id) con ON DELETE CASCADE.

1:N Una richiesta puo avere piu record tecnici di chiave/salt.

Verifica email

OTP_VERIFICATIONS

Gestisce i codici OTP necessari per confermare l email dell utente durante la registrazione.

  • PK id INT AUTO_INCREMENT
  • FK user_id INT
  • · codice CHAR(6)
  • · scadenza DATETIME
  • · usato TINYINT(1)
  • · created_at TIMESTAMP

Vincoli di Integrità e Cardinalità

FK user_id -> users(id) con ON DELETE CASCADE.

1:N Un utente puo avere molti OTP nel tempo; il campo usato evita riutilizzi.

Moderazione

SEGNALAZIONI

Raccoglie le segnalazioni degli utenti relative a una specifica richiesta di passaggio.

  • PK id INT AUTO_INCREMENT
  • FK request_id INT
  • FK segnalante_id INT
  • FK segnalato_id INT
  • · tipo ENUM('mancato_passaggio','comportamento_scorretto','pagamento','sicurezza','altro')
  • · descrizione TEXT
  • · stato ENUM('aperta','in_revisione','chiusa')
  • · created_at TIMESTAMP

Vincoli di Integrità e Cardinalità

FK request_id -> ride_requests(id) con ON DELETE CASCADE.

FK segnalante_id -> users(id): utente che segnala.

FK segnalato_id -> users(id): utente segnalato.

N:1 Molte segnalazioni possono riferirsi alla stessa richiesta o allo stesso utente.