USE provapratica; CREATE TABLE IF NOT EXISTS utenti ( utente_id INT UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, cognome VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL, password_hash VARCHAR(255) NOT NULL, ruolo ENUM('DIPENDENTE', 'RESPONSABILE_AMMINISTRATIVO') NOT NULL DEFAULT 'DIPENDENTE', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (utente_id), UNIQUE KEY uk_utenti_email (email) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS categorie_spesa ( categoria_id INT UNSIGNED NOT NULL AUTO_INCREMENT, descrizione VARCHAR(150) NOT NULL, PRIMARY KEY (categoria_id), UNIQUE KEY uk_categorie_spesa_descrizione (descrizione) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS richieste_rimborso ( richiesta_id INT UNSIGNED NOT NULL AUTO_INCREMENT, data_inserimento DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, data_spesa DATE NOT NULL, categoria_id INT UNSIGNED NOT NULL, importo DECIMAL(10, 2) NOT NULL, descrizione VARCHAR(500) NOT NULL, riferimento_giustificativo VARCHAR(255) NULL, stato ENUM('IN_ATTESA', 'APPROVATA', 'RIFIUTATA', 'LIQUIDATA') NOT NULL DEFAULT 'IN_ATTESA', dipendente_id INT UNSIGNED NOT NULL, data_valutazione DATETIME NULL, responsabile_valutazione_id INT UNSIGNED NULL, motivazione_rifiuto VARCHAR(500) NULL, data_liquidazione DATETIME NULL, PRIMARY KEY (richiesta_id), CONSTRAINT fk_richieste_categoria FOREIGN KEY (categoria_id) REFERENCES categorie_spesa (categoria_id), CONSTRAINT fk_richieste_dipendente FOREIGN KEY (dipendente_id) REFERENCES utenti (utente_id), CONSTRAINT fk_richieste_responsabile FOREIGN KEY (responsabile_valutazione_id) REFERENCES utenti (utente_id), CONSTRAINT chk_richieste_importo_positivo CHECK (importo > 0) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;