USE temp ;
DROP TABLE IF EXISTS PUB_MAG ;
DROP TABLE IF EXISTS PUB_CLI ;
DROP TABLE IF EXISTS COMMENTAIRE ;
DROP TABLE IF EXISTS PUBLICATION ;
DROP TABLE IF EXISTS EVENEMENT ;
DROP TABLE IF EXISTS CLIENT ;
DROP TABLE IF EXISTS MAGASIN ;
DROP TABLE IF EXISTS VENDEUR ;
DROP TABLE IF EXISTS UTILISATEUR ;
-------------------------------------------------------------------------------------------------
CREATE TABLE UTILISATEUR
(
utilisateur_id INT NOT NULL,
username VARCHAR(64) NOT NULL,
mail VARCHAR(64) NOT NULL,
password VARCHAR(64) NOT NULL,
CONSTRAINT UTILISATEUR_PK PRIMARY KEY (utilisateur_id)
) ;
CREATE TABLE VENDEUR
(
utilisateur_id INT NOT NULL,
CONSTRAINT VENDEUR_PK PRIMARY KEY (utilisateur_id),
CONSTRAINT VENDEUR_UTILISATEUR_FK FOREIGN KEY (utilisateur_id)
REFERENCES UTILISATEUR (utilisateur_id)
) ;
CREATE TABLE MAGASIN
(
utilisateur_id INT NOT NULL,
magasin_id INT NOT NULL,
magasin_nom VARCHAR(64) NOT NULL,
CONSTRAINT MAGASIN_PK PRIMARY KEY (utilisateur_id, magasin_id),
CONSTRAINT MAGASIN_VENDEUR_FK FOREIGN KEY (utilisateur_id)
REFERENCES VENDEUR (utilisateur_id) ON DELETE CASCADE
) ;
CREATE TABLE CLIENT
(
utilisateur_id INT NOT NULL,
CONSTRAINT CLIENT_PK PRIMARY KEY (utilisateur_id),
CONSTRAINT CLIENT_UTILISATEUR_FK FOREIGN KEY (utilisateur_id)
REFERENCES UTILISATEUR (utilisateur_id) ON DELETE CASCADE
) ;
CREATE TABLE EVENEMENT
(
utilisateur_id INT NOT NULL,
datum DATETIME NOT NULL,
CONSTRAINT EVENEMENT_PK PRIMARY KEY (utilisateur_id),
CONSTRAINT EVENEMENT_CLIENT_FK FOREIGN KEY (utilisateur_id)
REFERENCES CLIENT (utilisateur_id) ON DELETE CASCADE
) ;
CREATE TABLE PUBLICATION
(
utilisateur_id INT NOT NULL,
publication_id INT NOT NULL,
publication_date DATETIME NOT NULL,
publication_libelle VARCHAR(255) NOT NULL,
CONSTRAINT PUBLICATION_PK PRIMARY KEY (utilisateur_id, publication_id),
CONSTRAINT PUBLICATION_UTILISATEUR_FK FOREIGN KEY (utilisateur_id)
REFERENCES UTILISATEUR (utilisateur_id)
) ;
CREATE TABLE COMMENTAIRE
(
utilisateur_id INT NOT NULL,
publication_id INT NOT NULL,
commentaire_id INT NOT NULL,
commentaire_date DATE NOT NULL,
commentaire_texte VARCHAR(255) NOT NULL,
CONSTRAINT COMMENTAIRE_PK PRIMARY KEY (utilisateur_id, publication_id, commentaire_id),
CONSTRAINT COMMENTAIRE_PUBLICATION_FK FOREIGN KEY (utilisateur_id, publication_id)
REFERENCES PUBLICATION (utilisateur_id, publication_id) ON DELETE CASCADE
) ;
CREATE TABLE PUB_CLI
(
utilisateur_id INT NOT NULL,
publication_id INT NOT NULL,
CONSTRAINT PUB_CLI_PK PRIMARY KEY (utilisateur_id, publication_id),
CONSTRAINT PUB_CLI_CLIENT_FK FOREIGN KEY (utilisateur_id)
REFERENCES CLIENT (utilisateur_id) ON DELETE CASCADE,
CONSTRAINT PUB_CLI_PUBLICATION_FK FOREIGN KEY (utilisateur_id, publication_id)
REFERENCES PUBLICATION (utilisateur_id, publication_id) ON DELETE CASCADE
) ;
CREATE TABLE PUB_MAG
(
utilisateur_id INT NOT NULL,
publication_id INT NOT NULL,
magasin_id INT NOT NULL,
CONSTRAINT PUB_MAG_PK PRIMARY KEY (utilisateur_id, publication_id),
CONSTRAINT PUB_MAG_MAGASIN_FK FOREIGN KEY (utilisateur_id, magasin_id)
REFERENCES MAGASIN (utilisateur_id, magasin_id),
CONSTRAINT PUB_MAG_PUBLICATION_FK FOREIGN KEY (utilisateur_id, publication_id)
REFERENCES PUBLICATION (utilisateur_id, publication_id)
) ;
DELIMITER GO
CREATE TRIGGER VENDEUR_EXCLUSION_INSERT BEFORE INSERT ON VENDEUR
FOR EACH ROW
BEGIN
SET @Kount = (SELECT COUNT(*) FROM CLIENT WHERE utilisateur_id = NEW.utilisateur_id) ;
IF @Kount > 0 THEN
SET @Erreur = CONCAT('Le vendeur d''identifiant "', NEW.utilisateur_id, '" existe déjà en tant que client. Rejet.') ;
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = @Erreur ;
END IF ;
END
GO
CREATE TRIGGER CLIENT_EXCLUSION_INSERT BEFORE INSERT ON CLIENT
FOR EACH ROW
BEGIN
SET @Kount = (SELECT COUNT(*) FROM VENDEUR WHERE utilisateur_id = NEW.utilisateur_id) ;
IF @Kount > 0 THEN
SET @Erreur = CONCAT('Le client d''identifiant "', NEW.utilisateur_id, '" existe déjà en tant que vendeur. Rejet.') ;
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = @Erreur ;
END IF ;
END
GO
CREATE TRIGGER PUB_MAG_EXCLUSION_INSERT BEFORE INSERT ON PUB_MAG
FOR EACH ROW
BEGIN
SET @Kount = (SELECT COUNT(*) FROM PUB_CLI WHERE utilisateur_id = NEW.utilisateur_id) ;
IF @Kount > 0 THEN
SET @Erreur = CONCAT('La publication pour le vendeur d''identifiant "', NEW.utilisateur_id, '" existe déjà en tant que publication d''un client. Rejet.') ;
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = @Erreur ;
END IF ;
END
GO
CREATE TRIGGER PUB_CLI_EXCLUSION_INSERT BEFORE INSERT ON PUB_CLI
FOR EACH ROW
BEGIN
SET @Kount = (SELECT COUNT(*) FROM PUB_MAG WHERE utilisateur_id = NEW.utilisateur_id) ;
IF @Kount > 0 THEN
SET @Erreur = CONCAT('La publication pour le client d''identifiant "', NEW.utilisateur_id, '" existe déjà en tant que publication d''un vendeur. Rejet.') ;
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = @Erreur ;
END IF ;
END
GO
DELIMITER ;
INSERT INTO UTILISATEUR (utilisateur_id, username, mail, password) VALUES
(1, 'Tryphon Tournesol', 'tryphon@moulinsart.be', '********')
, (2, 'Fernand Naudin', 'fernand@citron.fr', '********')
, (3, 'Archibald Haddock', 'haddock@moulinsart.be', '********')
, (4, 'Raoul Volfoni', 'raoul@pamplemousse.fr', '********')
, (5, 'Paul Volfoni', 'paulo@pamplemousse.fr', '********')
, (6, 'Antoine Delafoy', 'antoine@mandarine.fr', '********')
, (7, 'Séraphin Lampion', 'seraphin@dvp.be', '********')
;
INSERT INTO VENDEUR (utilisateur_id) VALUES
(2), (4), (5), (6)
;
INSERT INTO MAGASIN (utilisateur_id, magasin_id, magasin_nom) VALUES
(2, 1, 'Chez Fernand')
, (2, 2, 'Le clapier')
, (2, 3, 'Au bon coin')
, (2, 4, 'Chez Mimile')
, (4, 1, 'La Closerie')
, (4, 2, 'Chez René')
, (4, 3, 'Vive la vie')
, (5, 1, 'La cave à Irène')
, (5, 2, 'Le Villon')
, (6, 1, 'Pique à seaux')
, (6, 2, 'Atout pique')
;
INSERT INTO CLIENT (utilisateur_id) VALUES
(1), (3), (7)
;
INSERT INTO EVENEMENT (utilisateur_id, datum) VALUES
(1, '2016-01-05')
, (3, '2016-02-29')
, (7, '2016-01-05')
;
-- vérif exclusion CLIENT - VENDEUR
INSERT INTO CLIENT (utilisateur_id) VALUES (2), (6) ;
INSERT INTO VENDEUR (utilisateur_id) VALUES (3), (7) ;
-- Publications
INSERT INTO PUBLICATION (utilisateur_id, publication_id, publication_date, publication_libelle) VALUES
(1, 1, '1939-08-11', 'Gtande course de lions landais')
, (1, 2, '1939-11-17', 'Etude en sous-sol mineur')
, (2, 1, '1938-07-15', 'Le centenaire de la brosse à reluire')
, (2, 2, '1938-07-22', 'Libérez les ballons captifs !')
;
INSERT INTO PUB_CLI (utilisateur_id, publication_id) VALUES
(1, 1), (1, 2)
;
INSERT INTO PUB_MAG (utilisateur_id, publication_id, magasin_id) VALUES
(2, 1, 2), (2, 2, 1)
;
-- vérif exclusion PUB_CLI - PUB_MAG
INSERT INTO PUB_CLI (utilisateur_id, publication_id) VALUES (2, 1) ;
INSERT INTO PUB_MAG (utilisateur_id, publication_id, magasin_id) VALUES (1, 1, 2) ;
Partager