Bonjour à tous

J'ai besoin d'une base de données pour gérer le prêt de matériels (10-15 gros maximum) ayant tous la même utilité, même s'il peuvent être de modèle ou marque différents.
Le but principal étant de savoir si du matériel est disponible pour un prêt surtout pour la semaine en cours et éventuellement la ou les suivantes et de savoir à qui il a été prêté.
Le matériel est prêté (éventuellement avec une caution), mais la durée de prêt n'est pas importante (normalement 2-3 jours maximum). La date de fin de prêt doit être celle quand le matériel est rendu plutôt que celle quand le matériel doit être rendu.
Il faut retrouver les coordonnées de l'emprunteur, pouvoir le contacter et lui demander de rapporter le matériel.

Alors j'ai créé mes tables, merci à Seabs et SQLpro pour leur aide :

Table client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE CLIENT  (client_id    INT NOT NULL PRIMARY KEY,
                      nom          CHAR(32),
                      prenom       VARCHAR(25),
                      adresse      VARCHAR(100),
                      cp           CHAR(8),
                      ville        CHAR(32),
                      tel          CHAR(20));
Table materiel:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
CREATE TABLE MATERIEL (materiel_id INT NOT NULL PRIMARY KEY,
                       modele      VARCHAR(32),
                       marque      VARCHAR(32));
Table prêt:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CREATE TABLE PRET     (pret_id     INT NOT NULL PRIMARY KEY,
                       date_debut  date NOT NULL,
                       date_fin    date,
                       client_id   INT NOT NULL,
                       materiel_id INT NOT NULL,
                       FOREIGN KEY (client_id) REFERENCES CLIENT  (client_id), 
                       FOREIGN KEY (materiel_id) REFERENCES MATERIEL (materiel_id),
                       CONSTRAINT CK_PRET_DATES CHECK ((date_fin >= date_debut) OR date_fin IS NULL));
J'aurais alors besoin d'aide pour construite la contrainte de non recouvrement de période sous forme de déclencheur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
CREATE TRIGGER E_IU_PRET BEFORE INSERT OR UPDATE
ON PRET
WHEN
   IF EXISTS(SELECT *
             FROM   PRET AS P
             WHERE  EXISTS(SELECT *
                           FROM   inserted AS i
                           WHERE  P.materiel_id = i.materiel_id
                             AND (i.date_debut BETWEEN P.date_debut AND P.date_fin OR 
                                  i.date_fin   BETWEEN P.date_debut AND P.date_fin)))
   ROLLBACK;
J'ai une erreur de syntaxe sur ou près de IF