Primo rilascio
This commit is contained in:
118
backend/database/schema.sql
Normal file
118
backend/database/schema.sql
Normal file
@@ -0,0 +1,118 @@
|
||||
-- Tabella per le Strutture (Sedi dell'asilo nido)
|
||||
CREATE TABLE structures (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL COMMENT 'Nome della struttura',
|
||||
address VARCHAR(255) NULL COMMENT 'Indirizzo',
|
||||
city VARCHAR(100) NULL COMMENT 'Città',
|
||||
province VARCHAR(100) NULL COMMENT 'Provincia',
|
||||
zip_code VARCHAR(10) NULL COMMENT 'CAP',
|
||||
phone VARCHAR(50) NULL COMMENT 'Numero di telefono',
|
||||
email VARCHAR(255) NULL COMMENT 'Indirizzo email',
|
||||
notes TEXT NULL COMMENT 'Note aggiuntive',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
-- Tabella per gli Insegnanti
|
||||
CREATE TABLE teachers (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
|
||||
last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
|
||||
email VARCHAR(255) UNIQUE NULL COMMENT 'Email (opzionale, ma unica se presente)',
|
||||
phone VARCHAR(50) NULL COMMENT 'Telefono',
|
||||
date_of_birth DATE NULL COMMENT 'Data di nascita',
|
||||
hire_date DATE NULL COMMENT 'Data di assunzione',
|
||||
qualifications TEXT NULL COMMENT 'Qualifiche o note',
|
||||
is_active BOOLEAN DEFAULT true COMMENT 'Indica se l''insegnante è attualmente attivo',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
-- Tabella per gli Anni Scolastici
|
||||
CREATE TABLE school_years (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL UNIQUE COMMENT 'Nome anno scolastico (es. 2024/2025)',
|
||||
start_date DATE NOT NULL COMMENT 'Data inizio anno scolastico',
|
||||
end_date DATE NOT NULL COMMENT 'Data fine anno scolastico',
|
||||
is_active BOOLEAN DEFAULT false COMMENT 'Indica se è l''anno scolastico corrente/attivo',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT chk_dates CHECK (end_date > start_date) -- Assicura che la fine sia dopo l'inizio
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
-- Tabella per i Contratti degli Insegnanti
|
||||
CREATE TABLE teacher_contracts (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
teacher_id INT NOT NULL COMMENT 'FK a teachers',
|
||||
school_year_id INT NOT NULL COMMENT 'FK a school_years',
|
||||
structure_id INT NULL COMMENT 'FK a structures (opzionale, se il contratto è specifico per una struttura)',
|
||||
contract_type VARCHAR(100) NULL COMMENT 'Tipo di contratto (es. Tempo Indeterminato, Tempo Determinato, Collaborazione)',
|
||||
start_date DATE NOT NULL COMMENT 'Data inizio validità contratto',
|
||||
end_date DATE NULL COMMENT 'Data fine validità contratto (NULL se indeterminato)',
|
||||
weekly_hours DECIMAL(5, 2) NULL COMMENT 'Ore settimanali previste',
|
||||
salary DECIMAL(10, 2) NULL COMMENT 'Stipendio lordo (mensile/annuale a seconda delle policy)',
|
||||
notes TEXT NULL COMMENT 'Note aggiuntive sul contratto',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (teacher_id) REFERENCES teachers(id) ON DELETE CASCADE, -- Se elimino un insegnante, elimino i suoi contratti
|
||||
FOREIGN KEY (school_year_id) REFERENCES school_years(id) ON DELETE RESTRICT, -- Non posso eliminare un anno scolastico se ha contratti
|
||||
FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL, -- Se elimino una struttura, il contratto rimane ma senza struttura associata
|
||||
UNIQUE KEY unique_teacher_year (teacher_id, school_year_id) -- Un insegnante può avere un solo contratto per anno scolastico? (Da valutare)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
-- Tabella per i Bambini
|
||||
CREATE TABLE children (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
|
||||
last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
|
||||
date_of_birth DATE NOT NULL COMMENT 'Data di nascita',
|
||||
enrollment_date DATE NOT NULL COMMENT 'Data di iscrizione',
|
||||
structure_id INT NULL COMMENT 'FK a structures (struttura di appartenenza principale)',
|
||||
parent1_name VARCHAR(200) NULL COMMENT 'Nome Genitore 1 / Contatto Principale',
|
||||
parent1_phone VARCHAR(50) NULL COMMENT 'Telefono Genitore 1',
|
||||
parent1_email VARCHAR(255) NULL COMMENT 'Email Genitore 1',
|
||||
parent2_name VARCHAR(200) NULL COMMENT 'Nome Genitore 2 / Contatto Secondario',
|
||||
parent2_phone VARCHAR(50) NULL COMMENT 'Telefono Genitore 2',
|
||||
parent2_email VARCHAR(255) NULL COMMENT 'Email Genitore 2',
|
||||
address VARCHAR(255) NULL COMMENT 'Indirizzo residenza',
|
||||
city VARCHAR(100) NULL COMMENT 'Città residenza',
|
||||
notes TEXT NULL COMMENT 'Note (allergie, esigenze particolari, etc.)',
|
||||
is_active BOOLEAN DEFAULT true COMMENT 'Indica se l''iscrizione è attualmente attiva',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL -- Se elimino struttura, il bambino rimane ma senza struttura
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
-- Tabella per le Definizioni dei Turni Standard
|
||||
CREATE TABLE shift_definitions (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL UNIQUE COMMENT 'Nome del turno (es. Mattina, Pomeriggio)',
|
||||
start_time TIME NOT NULL COMMENT 'Orario di inizio previsto',
|
||||
end_time TIME NOT NULL COMMENT 'Orario di fine previsto',
|
||||
notes TEXT NULL COMMENT 'Note aggiuntive',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
-- Potremmo aggiungere un flag 'is_default' o 'is_active' se necessario
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
-- Tabella per gli Utenti (Admin, Operator)
|
||||
CREATE TABLE users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL COMMENT 'Nome e Cognome utente',
|
||||
email VARCHAR(255) NOT NULL UNIQUE COMMENT 'Email per login',
|
||||
password VARCHAR(255) NOT NULL COMMENT 'Password hashata',
|
||||
role ENUM('admin', 'operator') NOT NULL DEFAULT 'operator' COMMENT 'Ruolo utente',
|
||||
structure_id INT NULL COMMENT 'FK a structures (se operatore è legato a una struttura specifica)',
|
||||
is_active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
-- Aggiungi qui le altre tabelle (actual_shifts, etc.)
|
||||
-- man mano che le definiamo.
|
||||
-- Aggiungi qui le altre tabelle (children, shifts, users, etc.)
|
||||
-- man mano che le definiamo.
|
||||
Reference in New Issue
Block a user