esameits24-26backend/initdb/01_schema.sql
AV77web 46f3fa6efc
All checks were successful
Deploy to VPS / build (push) Successful in 17s
Deploy to VPS / deploy (push) Successful in 18s
modifca e correzione ai commenti iniziali
2026-07-14 10:45:57 +02:00

96 lines
3.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================
-- 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;