96 lines
3.9 KiB
SQL
96 lines
3.9 KiB
SQL
-- ============================================================
|
||
-- Schema tabelle – esameits24-26 (Academy aziendale)
|
||
-- Allineato alle API: /utenti, /corsi, /assegnazioni-corsi, /statistiche
|
||
-- @author: "villari.andrea@libero.it"
|
||
-- @version:"1.0.0 2026-07-14"
|
||
-- ============================================================
|
||
|
||
USE `esameits24-26`;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- Tabella UTENTE
|
||
-- Ruoli: Dipendente | Referente Academy
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS utente (
|
||
UtenteID INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
Nome VARCHAR(100) NOT NULL,
|
||
Cognome VARCHAR(100) NOT NULL,
|
||
Email VARCHAR(255) NOT NULL,
|
||
PasswordHash VARCHAR(255) NOT NULL COMMENT 'Password salvata come hash (es. bcrypt)',
|
||
Ruolo ENUM('Dipendente', 'Referente Academy') 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 (UtenteID),
|
||
UNIQUE KEY uk_utente_email (Email),
|
||
KEY idx_utente_ruolo (Ruolo)
|
||
) ENGINE=InnoDB
|
||
DEFAULT CHARSET=utf8mb4
|
||
COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- Tabella CORSO (catalogo Academy)
|
||
-- ------------------------------------------------------------
|
||
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;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- Tabella ASSEGNAZIONE_CORSO
|
||
-- Stati: Assegnato | Completato | Scaduto | Annullato
|
||
-- ------------------------------------------------------------
|
||
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;
|