Bonjour Ludovic,
Vous avez une association de plusieurs à plusieurs entre les produits et les bâtiments. Appelons LOCALISATION la table d’association :
N.B. Ce diagramme a été réalisé avec MySQL Workbench.
Script de création des tables :
USE temp ;
DROP TABLE IF EXISTS LOCALISATION ;
DROP TABLE IF EXISTS PRODUIT ;
DROP TABLE IF EXISTS BATIMENT ;
CREATE TABLE BATIMENT
(
id_batiment INT NOT NULL AUTO_INCREMENT
, nom_batiment VARCHAR(64) NOT NULL
, CONSTRAINT BATIMENT_PK PRIMARY KEY (id_batiment)
) ;
CREATE TABLE PRODUIT
(
id_produit INT NOT NULL AUTO_INCREMENT
, reference VARCHAR(12) NOT NULL
, nom_produit VARCHAR(64) NOT NULL
, prix_unitaire INT NOT NULL
, seuil_reappro INT NOT NULL
, CONSTRAINT PRODUIT_PK PRIMARY KEY (id_produit)
) ;
-- -----------------------------------------------------
-- Table LOCALISATION
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS LOCALISATION
(
id_produit INT NOT NULL
, id_batiment INT NOT NULL
, quantite INT NOT NULL
, CONSTRAINT LOCALISATION_PK PRIMARY KEY (id_produit, id_batiment)
, CONSTRAINT LOCALISATION_BATIMENT_FK FOREIGN KEY (id_batiment)
REFERENCES BATIMENT (id_batiment)
, CONSTRAINT LOCALISATION_PRODUIT_FK FOREIGN KEY (id_produit)
REFERENCES PRODUIT (id_produit)
) ;
INSERT INTO BATIMENT (nom_batiment) values ('bat 1'), ('bat 2') , ('bat 3') ;
SELECT * FROM BATIMENT ;
INSERT INTO PRODUIT (reference, nom_produit, prix_unitaire, seuil_reappro)
values ('p1', 'produit 1', 100, 10), ('p2', 'produit 2', 200, 20), ('p3', 'produit 3', 300, 30) ;
SELECT * FROM PRODUIT ;
INSERT INTO LOCALISATION (id_produit, id_batiment, quantite)
values (1, 3, 15), (1, 2, 25), (2, 1, 5), (2, 3, 7), (3, 1, 30) ;
SELECT * FROM LOCALISATION ;
Au résultat :
id_batiment nom_batiment
----------- ------------
1 bat 1
2 bat 2
3 bat 3
id_produit reference nom_produit prix_unitaire seuil_reappro
---------- --------- ----------- ------------- -------------
1 p3 produit 3 300 30
2 p2 produit 2 200 20
1 p1 produit 1 100 10
id_produit id_batiment quantite
---------- ----------- --------
1 2 25
1 3 15
2 1 5
2 3 7
3 1 30
Partager