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

Schéma Discussion :

Aide MCD pour BDD livres


Sujet :

Schéma

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Décembre 2014
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Bonsoir escartefigue,

    Je n'ai pas encore étudié la notion de trigger, il va falloir que je me documente avant de le créer.

    D'accord pour la cardinalité de PARAITRE DANS côté ouvrage, ci-dessous mon MCD mis à jour en conséquence.

    Nom : schema_ouvrages.png
Affichages : 118
Taille : 31,7 Ko

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Décembre 2014
    Messages : 42
    Points : 26
    Points
    26
    Par défaut trigger contrainte inter-association
    Bonjour à tous,

    Voici ci-dessous les triggers que j'ai écrits pour gérer les insertions, suppressions et mises à jour dans les tables PARAITRE DANS et EDITION (qui interviennent dans l'inclusion).

    Est-il possible de les écrire de manière plus concise (j'ai lu qu'on ne pouvait associer qu'un événement par moment) ?

    Sinon je ne les ai pas encore tous testés, j'espère que c'est correct.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    /* Code du trigger "Avant insertion dans PARAITRE DANS" */
    DELIMITER |
    DROP TRIGGER IF EXISTS INS_PARAITRE_DANS ;
    CREATE TRIGGER INS_PARAITRE_DANS
       BEFORE INSERT ON PARAITRE_DANS
       FOR EACH ROW
    BEGIN
       DECLARE nb INTEGER;
       SELECT COUNT(*) INTO nb
       FROM EDITION
       WHERE id_ouvrage = NEW.id_ouvrage
       AND id_editeur = NEW.id_editeur ;
       IF (nb = 0) THEN
          SIGNAL SQLSTATE "45000"
          SET MESSAGE_TEXT = "operation impossible, vous ne pouvez pas inserer
           les id dans PARAITRE_DANS alors qu'ils n'existent pas dans EDITION !" ;
       END IF;
    END |
    DELIMITER ;
     
    /* Code du trigger "Avant suppression dans EDITION" */
    DELIMITER |
    DROP TRIGGER IF EXISTS DEL_EDITION_DANS ;
    CREATE TRIGGER DEL_EDITION_DANS
       BEFORE DELETE ON EDITION
       FOR EACH ROW
    BEGIN
       DECLARE nb INTEGER;
       SELECT COUNT(*) INTO nb
       FROM PARAITRE_DANS
       WHERE id_ouvrage = OLD.id_ouvrage
       AND id_editeur = OLD.id_editeur ;
       IF (nb = 1) THEN
          SIGNAL SQLSTATE "45000"
          SET MESSAGE_TEXT = "operation impossible, vous ne pouvez pas supprimer 
          les id dans EDITION alors qu'ils existent dans PARAITRE_DANS !" ;
       END IF;
    END |
    DELIMITER ;
     
    /* Code du trigger "Avant mise à jour dans PARAITRE DANS" */
    DELIMITER |
    DROP TRIGGER IF EXISTS UPD_PARAITRE_DANS ;
    CREATE TRIGGER UPD_PARAITRE_DANS
       BEFORE UPDATE ON PARAITRE_DANS
       FOR EACH ROW
    BEGIN
       DECLARE nb INTEGER;
       SELECT COUNT(*) INTO nb
       FROM EDITION
       WHERE id_ouvrage = NEW.id_ouvrage
       AND id_editeur = NEW.id_editeur ;
       IF (nb = 0) THEN
          SIGNAL SQLSTATE "45000"
          SET MESSAGE_TEXT = "operation impossible, vous ne pouvez pas mettre a jour
           les id dans PARAITRE_DANS alors qu'ils n'existent pas dans EDITION !" ;
       END IF;
    END |
    DELIMITER ;
     
    /* Code du trigger "Avant mise à jour dans EDITION" */
    DELIMITER |
    DROP TRIGGER IF EXISTS UPD_EDITION_DANS ;
    CREATE TRIGGER UPD_EDITION_DANS
       BEFORE UPDATE ON EDITION
       FOR EACH ROW
    BEGIN
       DECLARE nb INTEGER;
       SELECT COUNT(*) INTO nb
       FROM PARAITRE_DANS
       WHERE id_ouvrage = OLD.id_ouvrage
       AND id_editeur = OLD.id_editeur ;
       IF (nb = 1) THEN
          SIGNAL SQLSTATE "45000"
          SET MESSAGE_TEXT = "operation impossible, vous ne pouvez pas mettre a jour
          les id dans EDITION alors qu'ils existent dans PARAITRE_DANS !" ;
       END IF;
    END |
    DELIMITER ;

    Merci

  3. #23
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 278
    Points : 39 524
    Points
    39 524
    Billets dans le blog
    9
    Par défaut
    Ça me semble OK, mais pour un test d'existence, il est préférable d'utiliser EXISTS plutôt qu'un comptage.
    Même si ici, la différence de performances devrait être minime, dans l'absolu, EXISTS s'arrête dès la première occurrence trouvée alors que COUNT comptera toutes les occurrences

    Pour plus de détails sur la mise en oeuvre des triggers, il est préférable de poster dans le forum consacré au SGBD choisi

    Les forums qui concernent les différents SGBD-R se trouvent ici :
    https://www.developpez.net/forums/f4/bases-donnees/

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Aide réalisation MCD pour ent. de Transport
    Par blacksoul974 dans le forum Merise
    Réponses: 0
    Dernier message: 02/12/2016, 15h07
  2. Avis Mcd + de l'aide svp pour mon PFE
    Par link25000 dans le forum Modélisation
    Réponses: 3
    Dernier message: 24/06/2011, 17h59
  3. Réponses: 1
    Dernier message: 22/06/2011, 06h45
  4. Aide pour exercice livre "Apprendre à programmer en Python" par Swinnen
    Par reivilo1982 dans le forum Général Python
    Réponses: 4
    Dernier message: 28/02/2011, 12h35
  5. Votre Aide Pour Bdd
    Par DOUDOU91 dans le forum Access
    Réponses: 1
    Dernier message: 18/06/2006, 09h33

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