2026-07-12 03:11:09 +02:00
|
|
|
|
-- ============================================================
|
2026-07-14 10:31:30 +02:00
|
|
|
|
-- Schema tabelle – esameits24-26 (Academy aziendale)
|
|
|
|
|
|
-- Allineato alle API: /utenti, /corsi, /assegnazioni-corsi, /statistiche
|
2026-07-14 10:45:57 +02:00
|
|
|
|
-- @author: "villari.andrea@libero.it"
|
|
|
|
|
|
-- @version:"1.0.0 2026-07-14"
|
2026-07-12 03:11:09 +02:00
|
|
|
|
-- ============================================================
|
|
|
|
|
|
|
2026-07-12 04:09:54 +02:00
|
|
|
|
USE `esameits24-26`;
|
2026-07-12 03:11:09 +02:00
|
|
|
|
|
|
|
|
|
|
-- ------------------------------------------------------------
|
2026-07-14 10:31:30 +02:00
|
|
|
|
-- Tabella UTENTE
|
|
|
|
|
|
-- Ruoli: Dipendente | Referente Academy
|
2026-07-12 03:11:09 +02:00
|
|
|
|
-- ------------------------------------------------------------
|
2026-07-12 18:17:31 +02:00
|
|
|
|
CREATE TABLE IF NOT EXISTS utente (
|
2026-07-14 10:31:30 +02:00
|
|
|
|
UtenteID INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
2026-07-12 18:17:31 +02:00
|
|
|
|
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)',
|
2026-07-14 10:31:30 +02:00
|
|
|
|
Ruolo ENUM('Dipendente', 'Referente Academy') NOT NULL DEFAULT 'Dipendente',
|
2026-07-12 18:17:31 +02:00
|
|
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
2026-07-12 03:11:09 +02:00
|
|
|
|
|
2026-07-12 18:17:31 +02:00
|
|
|
|
PRIMARY KEY (UtenteID),
|
2026-07-14 10:31:30 +02:00
|
|
|
|
UNIQUE KEY uk_utente_email (Email),
|
|
|
|
|
|
KEY idx_utente_ruolo (Ruolo)
|
2026-07-12 03:11:09 +02:00
|
|
|
|
) ENGINE=InnoDB
|
|
|
|
|
|
DEFAULT CHARSET=utf8mb4
|
|
|
|
|
|
COLLATE=utf8mb4_unicode_ci;
|
|
|
|
|
|
|
2026-07-14 10:31:30 +02:00
|
|
|
|
-- ------------------------------------------------------------
|
|
|
|
|
|
-- 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;
|
2026-07-12 03:11:09 +02:00
|
|
|
|
|
2026-07-14 10:31:30 +02:00
|
|
|
|
-- ------------------------------------------------------------
|
|
|
|
|
|
-- 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;
|