db-update-2020-09-08.sql 2.03 KB
-- Ajout d'une nouvelle table projets

use database;

-- On execute TOUT ou RIEN, c'est plus simple
START TRANSACTION;

-- Creation de la table projets
CREATE TABLE projets (
  id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
  nom varchar(45) NOT NULL UNIQUE,
  description text NULL,
  groupes_thematique_id int(11) NULL,
  chef_science_id int(11) NULL,
  chef_projet_id int(11) NULL,
  date_start date NULL,
  date_stop date NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
-- Si on voulait plutôt pointer les FK sur users(username) au lieu de users(id) :
-- chef_science_id varchar(45) NULL
-- chef_projet_id varchar(45) NULL 


-- Ajout des contraintes d’unicité sur la (les) clé de la table users : nom, mais aussi username (ca serait mieux que nom)
-- Dans tous les cas, cette contrainte d’unicité se justifie, mais elle est aussi NECESSAIRE si on veut que ces champs soient
-- des clés (primaires) de la table users et que des FK puissent pointer dessus
ALTER TABLE users ADD UNIQUE(username);
ALTER TABLE users ADD UNIQUE(nom);


-- Ajout des contraintes FK pour cette table
ALTER TABLE projets
	ADD CONSTRAINT fk_projets_groupes_thematique_id FOREIGN KEY(groupes_thematique_id) REFERENCES groupes_thematiques(id) on DELETE set null,
	ADD CONSTRAINT fk_projets_chef_science_id FOREIGN KEY(chef_science_id) REFERENCES users(id) on DELETE no ACTION,
	ADD CONSTRAINT fk_projets_chef_projet_id FOREIGN KEY(chef_projet_id) REFERENCES users(id) on DELETE no ACTION;
-- TODO: on pourrait aussi utiliser le champ username au lieu de id (modif future ?) :
	-- ADD CONSTRAINT fk_projets_chef_science_id FOREIGN KEY(chef_science_id) REFERENCES users(username) on DELETE no ACTION,
	-- ADD CONSTRAINT fk_projets_chef_projet_id FOREIGN KEY(chef_projet_id) REFERENCES users(username) on DELETE no ACTION;


-- Ajout dans la table materiels d’une FK vers cette nouvelle table
ALTER TABLE materiels
    ADD projet_id INT( 11 ) NULL after groupes_metier_id,
    ADD CONSTRAINT fk_materiels_projet_id FOREIGN KEY (projet_id) REFERENCES projets(id) on DELETE set null;


COMMIT;