-- ============================================================================ -- TB_Generations_bateau : suit, pour chaque bateau, la base MariaDB -- actuellement "active" (ship2net_bateau__) et l'historique -- des générations précédentes, jamais supprimées (cf synthèse §35). -- Même technique qu'TB_Affectations_bateau pour garantir au plus une -- génération active par bateau, au niveau base. -- ============================================================================ CREATE TABLE `TB_Generations_bateau` ( `Cle_primaire` INT UNSIGNED NOT NULL AUTO_INCREMENT, `ID_Bateau` INT UNSIGNED NOT NULL COMMENT 'Clé_primaire dans TB_Bateaux', `Numero_generation` INT UNSIGNED NOT NULL COMMENT 'Démarre à 1 pour chaque bateau, incrémenté à chaque nouvelle génération', `Nom_base` VARCHAR(80) NOT NULL COMMENT 'ship2net_bateau__', `Motif` ENUM('creation_initiale', 'factory', 'restauration') NOT NULL, `Date_debut` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `Date_fin` DATETIME NULL DEFAULT NULL COMMENT 'NULL = génération active', `ID_Bateau_actif` INT UNSIGNED GENERATED ALWAYS AS (IF(`Date_fin` IS NULL, `ID_Bateau`, NULL)) VIRTUAL, PRIMARY KEY (`Cle_primaire`), UNIQUE KEY `uniq_bateau_actif` (`ID_Bateau_actif`), UNIQUE KEY `uniq_bateau_numero` (`ID_Bateau`, `Numero_generation`), UNIQUE KEY `uniq_nom_base` (`Nom_base`), CONSTRAINT `fk_generation_bateau` FOREIGN KEY (`ID_Bateau`) REFERENCES `TB_Bateaux` (`Cle_primaire`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; -- Traçabilité : dans quelle génération une archive a été chargée. ALTER TABLE `TB_Archives_traitees` ADD COLUMN `ID_Generation` INT UNSIGNED NULL DEFAULT NULL COMMENT 'Renseigné une fois la génération résolue - cf TB_Generations_bateau' AFTER `ID_Bateau_final`, ADD CONSTRAINT `fk_archive_generation` FOREIGN KEY (`ID_Generation`) REFERENCES `TB_Generations_bateau` (`Cle_primaire`) ON DELETE RESTRICT ON UPDATE RESTRICT;