Esempio pratico completo e realistico di automazione di un sistema di Ticket Center per eventi musicali, comprensivo di:
- analisi del problema
- progettazione database
- creazione tabelle SQL
- inserimento dati di esempio
- query SQL operative reali
- controlli disponibilità biglietti
Compatibile con MySQL / PostgreSQL.
Sistema di gestione Ticket Center per eventi musicali.
1. Scenario reale.
Un ticket center vende biglietti per:
- concerti
- festival musicali
- eventi live
Il sistema deve permettere di:
– Gestire artisti ed eventi
– Gestire location e posti
– Vendere biglietti online
– Controllare disponibilità posti
– Gestire pagamenti
– Permettere ai clienti di visualizzare biglietti acquistati
2. Funzionalità principali.
Cliente
- Registrazione
- Visualizzazione eventi
- Acquisto biglietti
- Consultazione ticket acquistati
Operatore
- Inserimento eventi
- Gestione prezzi e settori
- Monitoraggio vendite
3. Progettazione Database.
Tabelle principali
- CLIENTI
- ARTISTI
- LOCATION
- EVENTI
- SETTORI_POSTI
- BIGLIETTI
- ORDINI
- PAGAMENTI
4. Creazione Tabelle SQL.
Tabella CLIENTI
CREATE TABLE Clienti (
idCliente INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(50),
cognome VARCHAR(50),
email VARCHAR(100) UNIQUE NOT NULL,
telefono VARCHAR(20)
);
Tabella ARTISTI
CREATE TABLE Artisti (
idArtista INT PRIMARY KEY AUTO_INCREMENT,
nomeArte VARCHAR(100),
genere VARCHAR(50)
);
Tabella LOCATION
CREATE TABLE Location (
idLocation INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100),
citta VARCHAR(50),
capienza INT
);
Tabella EVENTI
CREATE TABLE Eventi (
idEvento INT PRIMARY KEY AUTO_INCREMENT,
titolo VARCHAR(150),
idArtista INT,
idLocation INT,
dataEvento DATETIME,
FOREIGN KEY (idArtista) REFERENCES Artisti(idArtista),
FOREIGN KEY (idLocation) REFERENCES Location(idLocation)
);
Tabella SETTORI_POSTI
Gestisce i settori della location con prezzi diversi.
CREATE TABLE SettoriPosti (
idSettore INT PRIMARY KEY AUTO_INCREMENT,
idEvento INT,
nomeSettore VARCHAR(50),
prezzo DECIMAL(6,2),
postiDisponibili INT,
FOREIGN KEY (idEvento) REFERENCES Eventi(idEvento)
);
Tabella ORDINI
CREATE TABLE Ordini (
idOrdine INT PRIMARY KEY AUTO_INCREMENT,
idCliente INT,
dataOrdine DATETIME,
stato VARCHAR(30),
FOREIGN KEY (idCliente) REFERENCES Clienti(idCliente)
);
Tabella BIGLIETTI
CREATE TABLE Biglietti (
idBiglietto INT PRIMARY KEY AUTO_INCREMENT,
idOrdine INT,
idSettore INT,
codiceBiglietto VARCHAR(50) UNIQUE,
FOREIGN KEY (idOrdine) REFERENCES Ordini(idOrdine),
FOREIGN KEY (idSettore) REFERENCES SettoriPosti(idSettore)
);
Tabella PAGAMENTI
CREATE TABLE Pagamenti (
idPagamento INT PRIMARY KEY AUTO_INCREMENT,
idOrdine INT,
dataPagamento DATETIME,
metodo VARCHAR(50),
statoPagamento VARCHAR(30),
FOREIGN KEY (idOrdine) REFERENCES Ordini(idOrdine)
);
5. Inserimento dati di esempio.
Inserimento artista
INSERT INTO Artisti (nomeArte, genere)
VALUES (‘Rock Band X’, ‘Rock’);
Inserimento location
INSERT INTO Location (nome, citta, capienza)
VALUES (‘Arena Musicale’, ‘Venezia’, 5000);
Inserimento evento
INSERT INTO Eventi (titolo, idArtista, idLocation, dataEvento)
VALUES (‘Concerto Estate Rock’, 1, 1, ‘2026-07-10 21:00:00’);
Inserimento settori
INSERT INTO SettoriPosti (idEvento, nomeSettore, prezzo, postiDisponibili)
VALUES
(1, ‘Platea’, 80.00, 1000),
(1, ‘Tribuna’, 50.00, 2000),
(1, ‘Prato’, 35.00, 2000);
Inserimento cliente
INSERT INTO Clienti (nome, cognome, email)
VALUES (‘Luca’, ‘Rossi’, ‘luca@email.it’);
6. Creazione ordine e acquisto biglietto.
Creazione ordine
INSERT INTO Ordini (idCliente, dataOrdine, stato)
VALUES (1, NOW(), ‘In elaborazione’);
Inserimento biglietto
INSERT INTO Biglietti (idOrdine, idSettore, codiceBiglietto)
VALUES (1, 1, ‘TCK10001’);
Aggiornamento posti disponibili
UPDATE SettoriPosti
SET postiDisponibili = postiDisponibili – 1
WHERE idSettore = 1;
Registrazione pagamento
INSERT INTO Pagamenti (idOrdine, dataPagamento, metodo, statoPagamento)
VALUES (1, NOW(), ‘Carta credito’, ‘Pagato’);
7. Query SQL operative.
Visualizzare eventi disponibili
SELECT titolo, dataEvento
FROM Eventi
WHERE dataEvento > NOW();
Visualizzare settori e prezzi di un evento
SELECT nomeSettore, prezzo, postiDisponibili
FROM SettoriPosti
WHERE idEvento = 1;
Biglietti acquistati da un cliente
SELECT B.codiceBiglietto, E.titolo, E.dataEvento
FROM Biglietti B
JOIN Ordini O ON B.idOrdine = O.idOrdine
JOIN SettoriPosti S ON B.idSettore = S.idSettore
JOIN Eventi E ON S.idEvento = E.idEvento
WHERE O.idCliente = 1;
Incassi totali evento
SELECT SUM(S.prezzo) AS IncassoTotale
FROM Biglietti B
JOIN SettoriPosti S ON B.idSettore = S.idSettore
WHERE S.idEvento = 1;
Verifica disponibilità posti
SELECT postiDisponibili
FROM SettoriPosti
WHERE idSettore = 1;
8. Automazioni possibili.
– Generazione QR Code biglietti
– Invio ticket via email
– Blocco automatico posti durante acquisto
– Report vendite in tempo reale
– Notifica evento imminente
– Controllo accessi tramite scanner
9. Estensioni avanzate.
- Scelta posto numerato
- Rivendita biglietti
- Integrazione app mobile
- Prezzi dinamici
- Gestione abbonamenti festival
Benefici del sistema
- Gestione centralizzata vendite
- Eliminazione overbooking
- Tracciabilità biglietti
- Maggiore velocità acquisti
- Analisi performance eventi
