Progetto universitario di gruppo realizzato per il corso di Laboratorio di Basi di Dati dell'Università degli Studi dell'Aquila.
L'obiettivo è progettare e implementare una base di dati relazionale per un'attività di ristorazione con servizio di consegna a domicilio, seguendo l'intero processo di progettazione:
requisiti → modello ER → ristrutturazione → schema relazionale → schema fisico → SQL
Il progetto è stato sviluppato in gruppo.
Il mio contributo si è concentrato principalmente su:
- analisi dei requisiti e modello ER concettuale;
- definizione dei vincoli non esprimibili direttamente nel modello ER;
- traduzione verso lo schema fisico;
create_tables.sql;- viste SQL;
- query #1, #4 e #11;
- collaborazione su funzioni e trigger.
Lo schema ER e la parte principale di create_tables.sql sono stati sviluppati senza un uso sostanziale di AI.
Ho utilizzato strumenti AI:
- come supporto nella revisione e ottimizzazione di alcune viste e query;
- in modo più significativo nell'implementazione di funzioni e trigger.
Questa distinzione è riportata per rendere chiaro quali parti del progetto rappresentano meglio le competenze che utilizzo in autonomia.
La base di dati gestisce:
- clienti;
- prodotti e immagini;
- ingredienti e ricette;
- caratteristiche personalizzabili;
- gruppi di mutua esclusione;
- ordini e righe d'ordine;
- personale e proprietario;
- storico degli stati operativi.
Durante la ristrutturazione:
- l'attributo multivalore delle immagini viene trasformato in
IMMAGINE_PRODOTTO; - la relazione Prodotto–Ingrediente viene esplicitata tramite
RICETTA; - la relazione RigaOrdine–Caratteristica viene esplicitata tramite
SCELTA_CARATTERISTICA_RIGA; - i prezzi applicati agli ordini vengono storicizzati per preservare lo storico.
- Il menu corrente è ricavato dai prodotti attivi.
- Lo stato gestionale dell'ordine è separato dallo stato operativo.
- Lo stato operativo corrente è ricavato dall'ultimo record di
STORICO_STATO. - Le caratteristiche non più disponibili vengono disattivate invece di essere eliminate.
- Prezzi e differenze di prezzo applicati vengono conservati nello storico degli ordini.
- I vincoli semplici vengono gestiti tramite PK, FK,
UNIQUE,CHECKeNOT NULL. - I vincoli più complessi vengono gestiti tramite viste, procedure e trigger.
Le principali tabelle sono:
CLIENTE
UTENTE_INTERNO
ORDINE
PRODOTTO
IMMAGINE_PRODOTTO
INGREDIENTE
RICETTA
GRUPPO_MUTUA_ESCLUSIONE
CARATTERISTICA
RIGA_ORDINE
SCELTA_CARATTERISTICA_RIGA
STORICO_STATO
Lo schema relazionale completo è documentato in:
docs/06_consegna/Documentazione_Progetto.md
Il progetto comprende:
- 14 operazioni richieste dalla specifica;
- 3 viste di supporto;
- funzioni SQL per totale ordine e tempo stimato;
- stored procedure per le operazioni con logica procedurale;
- trigger per vincoli di integrità non esprimibili direttamente nel DDL;
- dati di test.
Tra le query a cui ho lavorato direttamente:
- Query 1 — generazione del menu;
- Query 4 — calcolo di prezzo totale e tempo stimato;
- Query 11 — conteggio degli ordini attivi per stato.
- MySQL / MariaDB
- SQL
- ER Modeling
- Relational Database Design
- draw.io / diagrams.net
- PHP, HTML, CSS e JavaScript per la dashboard dimostrativa
Delivery/
├── app/
│ └── php/
├── assets/
│ ├── diagrammi/
│ └── immagini/
├── docs/
│ └── 06_consegna/
└── sql/
├── 01_schema/
├── 02_query/
├── 03_procedure/
├── 04_funzioni/
├── 05_viste/
├── 06_trigger/
└── 07_dati_test/
La specifica assegnata dal docente è disponibile qui:
La documentazione completa del progetto è disponibile nella cartella docs/.
Il README riassume le parti principali; motivazioni progettuali, vincoli, schema relazionale, query e implementazione completa sono documentati nei file del repository.

