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 :

Site de sondage [MCD]


Sujet :

Schéma

  1. #21
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    Salut,

    Merci c'est corrigé sur mes fichiers!

    Du coup, grâce au lien que tu m'as donné, j'ai crée 2 triggers comme ceci :

    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
    DELIMITER //
    CREATE TRIGGER `siteSondages`.`tre_idProposition`
      BEFORE INSERT ON Proposition 
      FOR EACH ROW
    BEGIN
      DECLARE num INTEGER;
      IF (NEW.idProposition IS NULL OR NEW.idProposition = 0) THEN
        SET num =  
        (
          SELECT COALESCE(MAX(idProposition), 0) + 1
          FROM Proposition
          WHERE idSondage = NEW.idSondage
        );
        SET NEW.idProposition= num;
      END IF;
    END//
     
    DELIMITER //
    CREATE TRIGGER `siteSondages`.`tre_idCommentaire`
      BEFORE INSERT ON Commentaire
      FOR EACH ROW
    BEGIN
      DECLARE num INTEGER;
      IF (NEW.idCommentaire IS NULL OR NEW.idCommentaire = 0) THEN
        SET num =  
        (
          SELECT COALESCE(MAX(idCommentaire), 0) + 1
          FROM Commentaire
          WHERE idAuteur = NEW.idAuteur
    	  AND idSondage = NEW.idSondage
        );
        SET NEW.idCommentaire = num;
      END IF;
    END//

    Je les ai écrit a la fin de mon fichier SQL, mais lors de l'importation de ce dernier,
    MySQL me renvoie l'erreur suivante sur la ligne "FROM Proposition" du premier trigger.
    #1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
    Malgré quelques recherches, j'ai toujours pas trouvé pourquoi.

    Désolé de t’embêter une fois de plus.

  2. #22
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 903
    Points
    30 903
    Billets dans le blog
    16
    Par défaut
    Hello jégé,


    Et avec un DROP IF EXISTS TRIGGER avant chaque CREATE TRIGGER ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #23
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    Je les ai rajoutés mais rien ne change.

    Je joins ci-dessus le fichier, si tu as le temps d'y jeter un oeil.
    Fichiers attachés Fichiers attachés

  4. #24
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 903
    Points
    30 903
    Billets dans le blog
    16
    Par défaut
    J'ai fait un test. Pour ne plus avoir de code d'erreur, étonnament, dans le trigger, il faut mettre le nom de la table en lettres capitales :

    BEFORE INSERT ON PROPOSITION

    En plus, ce qui paraît logique, il faut faire suivre le DROP TRIGGER d'un COMMIT.


    Ça marche aussi chez vous ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #25
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    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
    DROP TRIGGER IF EXISTS `siteSondages`.`tre_idProposition`;
    DELIMITER //
    CREATE TRIGGER `siteSondages`.`tre_idProposition`
      BEFORE INSERT ON PROPOSITION
      FOR EACH ROW
    BEGIN
      DECLARE num INTEGER;
      IF (NEW.idProposition IS NULL OR NEW.idProposition = 0) THEN
        SET num =  
        (
          SELECT COALESCE(MAX(idProposition), 0) + 1
          FROM PROPOSITION
          WHERE idSondage = NEW.idSondage
        );
        SET NEW.idProposition= num;
      END IF;
    END//
     
    DROP TRIGGER IF EXISTS `siteSondages`.`tre_idCommentaire`;*/
    DELIMITER //
    CREATE TRIGGER `siteSondages`.`tre_idCommentaire`
      BEFORE INSERT ON COMMENTAIRE
      FOR EACH ROW
    BEGIN
      DECLARE num INTEGER;
      IF (NEW.idCommentaire IS NULL OR NEW.idCommentaire = 0) THEN
        SET num =  
        (
          SELECT COALESCE(MAX(idCommentaire), 0) + 1
          FROM COMMENTAIRE
          WHERE idAuteur = NEW.idAuteur
    	  AND idSondage = NEW.idSondage
        );
        SET NEW.idCommentaire = num;
      END IF;
    END//

    Merci.
    Mais malheureusement, toujours la même erreur, malgré les majuscules.
    Bien embêtant tout ça.

    En plus, ce qui paraît logique, il faut faire suivre le DROP TRIGGER d'un COMMIT.
    C'est à dire ?

  6. #26
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 903
    Points
    30 903
    Billets dans le blog
    16
    Par défaut
    Un COMMIT en gros, entérine la mise à jour physique des données des tables (suite à INSERT, UPDATE, DELETE), y-compris celles du catalogue : au moins, une fois le commit effectif, vous êtes certain que le DROP est effectif lui aussi et que le trigger est effacé du catalogue. A défaut, il y est toujours inscrit et une instruction CREATE trigger connaîtra des déboires (trigger déjà existant), les opérations n'étant alors effectives qu'en fin de transaction (cela dit, les SGBD n'ont pas tous forcément le même comportement) .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     DROP TRIGGER IF EXISTS `siteSondages`.`tre_idProposition`; 
    
     COMMIT ;
    
    DELIMITER //
    
    CREATE TRIGGER `siteSondages`.`tre_idProposition`
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #27
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 903
    Points
    30 903
    Billets dans le blog
    16
    Par défaut
    La fin du fichier que l'ai soumis sas erreur (je ne lésine pas sur les commits...) :

    Code : 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
    CREATE TABLE IF NOT EXISTS COMMENTAIRE (
      idAuteur INT UNSIGNED NOT NULL,
      idSondage INT UNSIGNED NOT NULL,
      idCommentaire INT UNSIGNED NOT NULL,
      contenu TEXT NOT NULL,
      dateEnvoi DATETIME NOT NULL,
      PRIMARY KEY (idAuteur, idSondage, idCommentaire),
      INDEX fk_COMMENTAIRE_UTILISATEUR1_idx (idAuteur ASC),
      INDEX fk_COMMENTAIRE_SONDAGE1_idx (idSondage ASC),
      CONSTRAINT fk_COMMENTAIRE_UTILISATEUR1
        FOREIGN KEY (idAuteur)
        REFERENCES UTILISATEUR (idUtilisateur)
        ON DELETE CASCADE
        ON UPDATE NO ACTION,
      CONSTRAINT fk_COMMENTAIRE_SONDAGE1
        FOREIGN KEY (idSondage)
        REFERENCES SONDAGE (idSondage)
        ON DELETE CASCADE
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    
    COMMIT ;
    
     DROP TRIGGER IF EXISTS tre_idProposition; 
     DROP TRIGGER IF EXISTS tre_idCommentaire;
    
    COMMIT ;
    
    DELIMITER //
    CREATE TRIGGER tre_idProposition
      BEFORE INSERT ON PROPOSITION 
      FOR EACH ROW
    BEGIN
      DECLARE num INTEGER;
      IF (NEW.idProposition IS NULL OR NEW.idProposition = 0) THEN
        SET num = 
        (
          SELECT COALESCE(MAX(idProposition), 0) + 1
          FROM PROPOSITION
           WHERE idSondage = NEW.idSondage
        );
        SET NEW.idProposition= num;
      END IF;
    END//
    
    DELIMITER ;
    
    
    DELIMITER //
    
    CREATE TRIGGER tre_idCommentaire
      BEFORE INSERT ON COMMENTAIRE
      FOR EACH ROW
    BEGIN
      DECLARE num INTEGER;
      IF (NEW.idCommentaire IS NULL OR NEW.idCommentaire = 0) THEN
        SET num =  
        (
          SELECT COALESCE(MAX(idCommentaire), 0) + 1
          FROM COMMENTAIRE
          WHERE idAuteur = NEW.idAuteur
    	  AND idSondage = NEW.idSondage
        );
        SET NEW.idCommentaire = num;
      END IF;
    END//
    -- */
    
    DELIMITER ;
    
    
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #28
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    Merci, ça fonctionne.

    A moi de jouer maintenant.
    Un grand merci pour tout fsmrel!

  9. #29
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 903
    Points
    30 903
    Billets dans le blog
    16
    Par défaut
    Bon vent Jégé34, ce fut un plaisir !

    François
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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

Discussions similaires

  1. [2.x] Site de sondage
    Par jillthe1 dans le forum Symfony
    Réponses: 3
    Dernier message: 11/04/2013, 15h46
  2. www.kinikki.com : Site de sondage, libre et collaboratif
    Par Aurélien GENDRE dans le forum Mon site
    Réponses: 0
    Dernier message: 04/03/2012, 20h24
  3. [Site Web] Sondages-Fous
    Par Arkolos dans le forum Mon site
    Réponses: 5
    Dernier message: 10/05/2009, 14h16
  4. Mettre un sondage sur un site Web
    Par perchman dans le forum Débuter
    Réponses: 6
    Dernier message: 06/06/2008, 21h32

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