69 lines
3 KiB
MySQL
69 lines
3 KiB
MySQL
|
|
-- ============================================================
|
||
|
|
-- Migrazione manuale per database già inizializzati
|
||
|
|
-- Eseguire se il volume MySQL esisteva prima dell'aggiornamento schema Academy.
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
USE `esameits24-26`;
|
||
|
|
|
||
|
|
-- Allinea enum ruoli utente (se la tabella esisteva con valori precedenti)
|
||
|
|
ALTER TABLE utente
|
||
|
|
MODIFY Ruolo ENUM('Dipendente', 'Referente Academy') NOT NULL DEFAULT 'Dipendente';
|
||
|
|
|
||
|
|
UPDATE utente SET Ruolo = 'Referente Academy' WHERE Ruolo IN ('Amministratore', 'Refernete Academy');
|
||
|
|
UPDATE utente SET Ruolo = 'Dipendente' WHERE Ruolo = 'Operatore';
|
||
|
|
|
||
|
|
-- Catalogo corsi
|
||
|
|
CREATE TABLE IF NOT EXISTS corso (
|
||
|
|
CorsoID INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
Titolo VARCHAR(200) NOT NULL,
|
||
|
|
Descrizione TEXT NULL,
|
||
|
|
Categoria VARCHAR(100) NOT NULL,
|
||
|
|
DurataOre SMALLINT UNSIGNED NOT NULL,
|
||
|
|
Obbligatorio TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
Attivo TINYINT(1) NOT NULL DEFAULT 1,
|
||
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (CorsoID),
|
||
|
|
KEY idx_corso_categoria (Categoria),
|
||
|
|
KEY idx_corso_attivo (Attivo),
|
||
|
|
CONSTRAINT chk_corso_durata_ore CHECK (DurataOre > 0)
|
||
|
|
) ENGINE=InnoDB
|
||
|
|
DEFAULT CHARSET=utf8mb4
|
||
|
|
COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- Assegnazioni corsi
|
||
|
|
CREATE TABLE IF NOT EXISTS assegnazione_corso (
|
||
|
|
AssegnazioneID INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
CorsoID INT UNSIGNED NOT NULL,
|
||
|
|
DipendenteID INT UNSIGNED NOT NULL,
|
||
|
|
DataAssegnazione DATE NOT NULL,
|
||
|
|
DataScadenza DATE NOT NULL,
|
||
|
|
Stato ENUM('Assegnato', 'Completato', 'Scaduto', 'Annullato') NOT NULL DEFAULT 'Assegnato',
|
||
|
|
DataCompletamento DATE NULL,
|
||
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (AssegnazioneID),
|
||
|
|
KEY idx_assegnazione_corso (CorsoID),
|
||
|
|
KEY idx_assegnazione_dipendente (DipendenteID),
|
||
|
|
KEY idx_assegnazione_stato (Stato),
|
||
|
|
KEY idx_assegnazione_data_assegnazione (DataAssegnazione),
|
||
|
|
KEY idx_assegnazione_data_scadenza (DataScadenza),
|
||
|
|
CONSTRAINT fk_assegnazione_corso
|
||
|
|
FOREIGN KEY (CorsoID) REFERENCES corso (CorsoID)
|
||
|
|
ON UPDATE CASCADE ON DELETE RESTRICT,
|
||
|
|
CONSTRAINT fk_assegnazione_dipendente
|
||
|
|
FOREIGN KEY (DipendenteID) REFERENCES utente (UtenteID)
|
||
|
|
ON UPDATE CASCADE ON DELETE RESTRICT,
|
||
|
|
CONSTRAINT chk_assegnazione_scadenza
|
||
|
|
CHECK (DataScadenza >= DataAssegnazione),
|
||
|
|
CONSTRAINT chk_assegnazione_completamento
|
||
|
|
CHECK (DataCompletamento IS NULL OR DataCompletamento >= DataAssegnazione),
|
||
|
|
CONSTRAINT chk_assegnazione_completato
|
||
|
|
CHECK (
|
||
|
|
(Stato = 'Completato' AND DataCompletamento IS NOT NULL)
|
||
|
|
OR (Stato <> 'Completato' AND DataCompletamento IS NULL)
|
||
|
|
)
|
||
|
|
) ENGINE=InnoDB
|
||
|
|
DEFAULT CHARSET=utf8mb4
|
||
|
|
COLLATE=utf8mb4_unicode_ci;
|