-- 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.