provapraticabackend/initdb/01_schema.sql

115 lines
4.2 KiB
MySQL
Raw Permalink Normal View History

2026-06-09 14:44:14 +02:00
-- ============================================================
-- Schema tabelle Gestione Rimborsi Spese Aziendali
-- ============================================================
2026-06-09 13:15:32 +02:00
USE provapratica;
2026-06-09 14:44:14 +02:00
-- ------------------------------------------------------------
-- Tabella UTENTI
-- Ruoli: DIPENDENTE | RESPONSABILE_AMMINISTRATIVO
-- ------------------------------------------------------------
2026-06-09 13:15:32 +02:00
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,
2026-06-09 14:44:14 +02:00
password_hash VARCHAR(255) NOT NULL COMMENT 'Password salvata come hash (es. bcrypt)',
ruolo ENUM('DIPENDENTE', 'RESPONSABILE_AMMINISTRATIVO')
NOT NULL DEFAULT 'DIPENDENTE',
2026-06-09 13:15:32 +02:00
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
2026-06-09 14:44:14 +02:00
2026-06-09 13:15:32 +02:00
PRIMARY KEY (utente_id),
2026-06-09 14:44:14 +02:00
UNIQUE KEY uk_utenti_email (email),
KEY idx_utenti_ruolo (ruolo)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
2026-06-09 13:15:32 +02:00
2026-06-09 14:44:14 +02:00
-- ------------------------------------------------------------
-- Tabella CATEGORIE_SPESA
-- ------------------------------------------------------------
2026-06-09 13:15:32 +02:00
CREATE TABLE IF NOT EXISTS categorie_spesa (
categoria_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
descrizione VARCHAR(150) NOT NULL,
2026-06-09 14:44:14 +02:00
2026-06-09 13:15:32 +02:00
PRIMARY KEY (categoria_id),
UNIQUE KEY uk_categorie_spesa_descrizione (descrizione)
2026-06-09 14:44:14 +02:00
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
2026-06-09 13:15:32 +02:00
2026-06-09 14:44:14 +02:00
-- ------------------------------------------------------------
-- Tabella RICHIESTE_RIMBORSO
-- Stati: IN_ATTESA | APPROVATA | RIFIUTATA | LIQUIDATA
-- ------------------------------------------------------------
2026-06-09 13:15:32 +02:00
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,
2026-06-09 14:44:14 +02:00
stato ENUM('IN_ATTESA', 'APPROVATA', 'RIFIUTATA', 'LIQUIDATA')
NOT NULL DEFAULT 'IN_ATTESA',
2026-06-09 13:15:32 +02:00
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,
2026-06-09 14:44:14 +02:00
2026-06-09 13:15:32 +02:00
PRIMARY KEY (richiesta_id),
2026-06-09 14:44:14 +02:00
CONSTRAINT fk_richieste_categoria
FOREIGN KEY (categoria_id)
REFERENCES categorie_spesa (categoria_id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT fk_richieste_dipendente
FOREIGN KEY (dipendente_id)
REFERENCES utenti (utente_id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT fk_richieste_responsabile
FOREIGN KEY (responsabile_valutazione_id)
REFERENCES utenti (utente_id)
ON UPDATE CASCADE
ON DELETE SET NULL,
CONSTRAINT chk_richieste_importo_positivo
CHECK (importo > 0),
CONSTRAINT chk_richieste_descrizione_non_vuota
CHECK (CHAR_LENGTH(TRIM(descrizione)) > 0),
CONSTRAINT chk_richieste_data_valutazione
CHECK (
data_valutazione IS NULL
OR data_valutazione >= data_inserimento
),
CONSTRAINT chk_richieste_data_liquidazione
CHECK (
data_liquidazione IS NULL
OR data_valutazione IS NULL
OR data_liquidazione >= data_valutazione
),
CONSTRAINT chk_richieste_rifiuto_motivazione
CHECK (
stato <> 'RIFIUTATA'
OR motivazione_rifiuto IS NOT NULL
),
KEY idx_richieste_stato (stato),
KEY idx_richieste_data_spesa (data_spesa),
KEY idx_richieste_dipendente (dipendente_id),
KEY idx_richieste_categoria (categoria_id),
KEY idx_richieste_data_inserimento (data_inserimento)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;