IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Gestion prêt de matériels


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut Gestion prêt de matériels
    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

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    1. Un trigger doit faire référence à une fonction, voir la doc de CREATE TRIGGER.

    2. Plutôt que ROLLBACK dans un trigger (qui d'ailleurs n'est pas possible), il faut utiliser RAISE ERROR.

    3. IF n'est pas une instruction SQL ou même un opérateur SQL. C'est du procédural à utiliser dans les fonctions.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    1. J'ai regardé la doc de CREATE TRIGGER et c'est bien pour cela que je viens ici demander de l'aide. Car si j'avais tout compris je ne serais pas là.

    2. C'est un expert SGBD & SQL du forum Développez.com qui m'a donné ces informations à adapter (et donc voir 1.). Ayant fouillé pour obtenir des informations, j'étais parti pour du SQLite et puis finalement PostgreSQL pour des questions de souplesse et de limites de SQLite. Pour ce qui est de TRIGGER je n'ai pas tout compris et j'avais un peu de mal avec cette histoire de fonction. Je comprends mieux cette histoire de déclencheur qui appelle une fonction...

    3. Merci pour l'aide, je sais maintenant que ce n'est pas comme ça qu'il faut procéder, et qu'il va falloir que je me remette plus sérieusement dans SQL et la modélisation pour résoudre mon problème. J'ai juste des notions de bases en SQL, ça va être l'occasion de s'enrichir...

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Donc, si j'ai bien compris, il faut créer un TRIGGER qui appelle une fonction quand le programme veut ajouter ou de modifier des données de la table.

    Dans la base, on crée le Trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TRIGGER nom_trigger BEFORE INSERT OR UPDATE
    ON PRET
    EXECUTE PROCEDURE ma_fonction()
    Dans le programme Python, on crée la fonction appelée par le trigger pour vérifier la disponibilité du matériel.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    J'ai résolu mon problème, merci pour les informations.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des interruptions matérielles et logicielles
    Par Eric_03 dans le forum Administration système
    Réponses: 1
    Dernier message: 17/03/2015, 15h04
  2. Gestion de prêt de matériel : quels outils?
    Par sandro11 dans le forum Débuter
    Réponses: 1
    Dernier message: 07/11/2014, 22h13
  3. [Toutes versions] Gestion de projet / matériel
    Par AurelienC38 dans le forum Modélisation
    Réponses: 19
    Dernier message: 31/07/2013, 11h12
  4. Gestion des ressources matérielles
    Par BigBulle dans le forum Project
    Réponses: 1
    Dernier message: 11/12/2008, 19h31
  5. Un peu de philo - conception de tables pr gestion de prêts
    Par mariobedard dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/02/2005, 22h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo