Ajout des tables TB_Affectations_bateau et TB_Archives_traitees, colonne TB_Bateaux.MMSI (chantier archivage flotte, cf synthèse §32-33) - testé sur ship2net_test
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- Nouvelles tables pour le chantier "archivage flotte" (cf synthèse §32-33).
|
||||||
|
-- À exécuter sur la base ship2net (VPS), après TB_Bateaux/TB_Shipmembers.
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
-- TB_Affectations_bateau : historique des affectations boîtier (adresse MAC)
|
||||||
|
-- ↔ bateau. Au plus une ligne active (Date_fin IS NULL) par bateau et par
|
||||||
|
-- boîtier - garanti au niveau base via deux colonnes calculées ('actif'
|
||||||
|
-- devient NULL dès que Date_fin est renseignée, et MariaDB autorise
|
||||||
|
-- plusieurs NULL dans un index UNIQUE) plutôt que délégué uniquement au code.
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
CREATE TABLE `TB_Affectations_bateau` (
|
||||||
|
`Cle_primaire` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`ID_Bateau` INT UNSIGNED NOT NULL COMMENT 'Clé_primaire dans TB_Bateaux',
|
||||||
|
`Adresse_mac` VARCHAR(17) NOT NULL COMMENT 'Identité du boîtier (TB_Cartes.Adresse_mac), format XX:XX:XX:XX:XX:XX',
|
||||||
|
`Date_debut` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`Date_fin` DATETIME NULL DEFAULT NULL COMMENT 'NULL = affectation active',
|
||||||
|
`Cree_par` INT UNSIGNED NOT NULL COMMENT 'Clé_primaire dans TB_Shipmembers (ID) - l''administrateur ayant fait le geste',
|
||||||
|
`ID_Bateau_actif` INT UNSIGNED GENERATED ALWAYS AS (IF(`Date_fin` IS NULL, `ID_Bateau`, NULL)) VIRTUAL,
|
||||||
|
`Adresse_mac_actif` VARCHAR(17) GENERATED ALWAYS AS (IF(`Date_fin` IS NULL, `Adresse_mac`, NULL)) VIRTUAL,
|
||||||
|
PRIMARY KEY (`Cle_primaire`),
|
||||||
|
UNIQUE KEY `uniq_bateau_actif` (`ID_Bateau_actif`),
|
||||||
|
UNIQUE KEY `uniq_mac_actif` (`Adresse_mac_actif`),
|
||||||
|
KEY `idx_adresse_mac` (`Adresse_mac`),
|
||||||
|
CONSTRAINT `fk_affectation_bateau` FOREIGN KEY (`ID_Bateau`) REFERENCES `TB_Bateaux` (`Cle_primaire`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||||
|
CONSTRAINT `fk_affectation_shipmember` FOREIGN KEY (`Cree_par`) REFERENCES `TB_Shipmembers` (`ID`) ON DELETE RESTRICT ON UPDATE RESTRICT
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
-- TB_Archives_traitees : une ligne par archive reçue, quel que soit son
|
||||||
|
-- résultat (traitée, en quarantaine, rejetée) - fusionne ce qui avait été
|
||||||
|
-- envisagé séparément comme suivi anti-double-traitement et comme table de
|
||||||
|
-- quarantaine. L'index UNIQUE sur Nom_fichier sert lui-même de garde-fou
|
||||||
|
-- anti-double-traitement au niveau base, en complément de la vérification
|
||||||
|
-- applicative avant tout chargement (cf synthèse §32.6).
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
CREATE TABLE `TB_Archives_traitees` (
|
||||||
|
`Cle_primaire` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`Nom_fichier` VARCHAR(80) NOT NULL COMMENT 'Format : <Adresse_mac>_<Date_fichier>_<empreinte>.sql.gz.enc',
|
||||||
|
`Adresse_mac` VARCHAR(17) NOT NULL,
|
||||||
|
`ID_Bateau_resolu` INT UNSIGNED NULL COMMENT 'Déduit de TB_Affectations_bateau à la réception - NULL si aucune affectation active trouvée',
|
||||||
|
`ID_Bateau_final` INT UNSIGNED NULL COMMENT 'Renseigné une fois le traitement définitivement statué (peut différer du résolu)',
|
||||||
|
`Statut` ENUM('traitee', 'en_quarantaine_mmsi', 'en_quarantaine_sans_affectation', 'rejetee') NOT NULL,
|
||||||
|
`MMSI_recu` VARCHAR(9) NULL,
|
||||||
|
`MMSI_attendu` VARCHAR(9) NULL,
|
||||||
|
`Date_reception` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`Date_resolution` DATETIME NULL DEFAULT NULL COMMENT 'NULL tant que le statut est encore "en attente" (une des deux valeurs en_quarantaine_*)',
|
||||||
|
PRIMARY KEY (`Cle_primaire`),
|
||||||
|
UNIQUE KEY `uniq_nom_fichier` (`Nom_fichier`),
|
||||||
|
KEY `idx_adresse_mac` (`Adresse_mac`),
|
||||||
|
KEY `idx_statut` (`Statut`),
|
||||||
|
CONSTRAINT `fk_archive_bateau_resolu` FOREIGN KEY (`ID_Bateau_resolu`) REFERENCES `TB_Bateaux` (`Cle_primaire`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||||
|
CONSTRAINT `fk_archive_bateau_final` FOREIGN KEY (`ID_Bateau_final`) REFERENCES `TB_Bateaux` (`Cle_primaire`) ON DELETE RESTRICT ON UPDATE RESTRICT
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
-- TB_Bateaux.MMSI : renseigné automatiquement à la première archive reçue si
|
||||||
|
-- NULL, sert ensuite de contrôle de plausibilité (cf synthèse §32.3).
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
|
ALTER TABLE `TB_Bateaux`
|
||||||
|
ADD COLUMN `MMSI` VARCHAR(9) NULL DEFAULT NULL COMMENT 'Numéro MMSI du bateau, pour contrôle de plausibilité des archives reçues' AFTER `Nom`;
|
||||||
Reference in New Issue
Block a user