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

SQL Procédural MySQL Discussion :

Réalisation de triggers sur MySQL


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2017
    Messages : 17
    Par défaut Réalisation de triggers sur MySQL
    Bonjour à tous

    Je poste un message ici car j'aurais besoin d'un peu d'aide
    Je réalise actuellement une base de données sur MySQL (schéma ci-dessous). Les tables et liaisons sont déjà créées dans MySQL. Cependant, j'aimerais réaliser deux triggers/déclencheurs.
    Les objectifs de ceux-ci :
    Le premier : le client a dix points sur sa carte dès qu'il effectue une commande d'une valeur de 50 euros par exemple. (donc, à chaque fois qu'un article acheté est encodé au sein de la base de données, les points correspondants s'ajoutent dans la colonne de l'entité "carte de fidélité" sur le schéma de la base de données).
    Le deuxième : à chaque fois que 100 points seraient atteints sur la carte de fidélité, le client reçoit une réduction de 10% sur sa prochaine commande.

    Je m'en sors lorsque le trigger porte sur deux tables. Cependant, je suis complètement perdue quand il faut faire des jointures de plusieurs tables au sein d'un trigger.

    Quelqu'un pourrait-il m'orienter sur la façon dont je doit procéder ou du moins qu'elles seraient les jointures que je devrais faire pour que celui-ci fonctionne.

    Merci d'avance.

    Nom : Capture forum.PNG
Affichages : 520
Taille : 24,2 Ko

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 876
    Par défaut
    Salut Mélie98.

    L'idée d'utiliser les déclencheurs (trigger) pour appliquer une réduction sur la prochaine commande, ne peut pas fonctionner. Pourquoi ?
    Parce que vous avez besoin d'un point de validation de la prochaine commande du client.
    Et cela ne peut se faire que d'une manière applicative.

    Autrement dit, dans votre modélisation de la base de données, on ne sait pas quand la commande est terminée.
    Et cela ne peut pas se traduire par l'insertion d'une ligne dans une quelconque table de votre base de données.

    Reprenons les différents points :

    1) Quand augmentez-vous ce nombre de points sur la carte de fidélité ?

    A priori, cela va se faire quand le client à payé sa dernière commande, mais pas avant, sinon ce n'est pas logique.
    Lors de la mise à jour de cette table (la carte de fidélité), on peut déclencher un quelconque traitement. Oui, mais pour faire quoi avec ?

    En toute logique, la réduction devrait se mettre sur la prochaine commande, sauf qu'elle n'existe pas encore.

    Donc NON, vous ne pouvez pas utiliser un déclencheur (trigger) lors de la mise à jour des points sur la carte de fidélité.
    Autrement dit, ce n'est pas le bon déclencheur.

    2) je suppose que les règles donnant des réductions sur les prochaines commandes ne se résument pas à ceux deux là.
    Donc pourquoi ne pas créer une table avec toutes les règles que vous désirez appliquer ?
    Genre :
    --> identifiant numérique de type auto incrémenté allant de 1 à N.
    --> seuil en point du déclenchement de la réduction.
    --> montant minimum de la commande où doit s'appliquer la réduction.

    Il faudra que votre table soit ordonnée afin que les grosses réductions s'appliquent en premier.
    C'est logique, le client préfère voir s'appliquer la réduction à 10% plutôt que celle à 5%. quand elle se présente.

    Dans ce cas là, c'est une procédure stockée qui va gérer l'application "réduction" sur la prochaine commande.

    3) quand va-t-on déclencher ce traitement ?
    A priori, cela devra se faire quand le client a validé sa commande.
    Donc il manque une étape qui n'est pas visible dans la modélisation de votre base de données.

    Et comme je l'ai dit ci-dessus, cela se fera d'une manière applicative.

    4) l'idée de faire un ou plusieurs déclencheurs pourrait être une bonne idée, mais au final, vous constatez que c'est inapplicable.
    D'abord, il vous fait connaitre le moment où la commande est définitive.
    Ensuite, l'application de la réduction aura pour conséquence de modifier plusieurs lignes de votre base de données :
    --> on retranche le nombre de points de la carte de fidélité si la réduction est appliquée.
    --> on applique le taux de la réduction sur le montant total de la facture, quand on connait définitivement le détail de la commande.

    5) ce qui me dérange dans votre modélisation, c'est que je ne sais pas où ranger le taux de cette réduction.
    La mettre dans la table "commandes_des_clients" serait une bonne idée, oui mais voilà, dans 99% des commandes, la colonnes serait vide (à NULL).
    Donc c'est une mauvaise idée.
    A priori, je pense qu'il manque une table des factures dans votre modélisation.

    Je pense que vous devriez poser la problématique de votre modélisation dans le forum consacré à cela.

    @+

  3. #3
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2017
    Messages : 17
    Par défaut
    Merci beaucoup pour votre réponse

    Je viens de ré-organiser ma BDD de la manière suivante :
    - à chaque type d'article est rattaché un nombre de points (// colonne "nombre de points" dans article)
    exemple : 1 robe = 10 points
    - le total des points par commande est calculé dans la colonne "nombre de points" dans l'entité "commandes des clients";
    - dans "commandes des clients", il y a également un champ dans lequel est calculé le prix total de chaque commande ;
    - dans l'entité "client", la colonne "nombre de point calcule l'ensemble des points par client (en faisant la somme des points de toutes les commandes d'un même client).

    L'objectif du trigger que je veux créer :
    J'aimerai que, dès que le client atteint ou dépasse les 100 points, il bénéficie d'une réduction de 20% sur le prix total de sa dernière commande. Autrement dit, si, dans la colonne "nombre de point" dans l'entité client, la valeur devient égale ou supérieur à 100, alors on diminue la valeur de 20% dans "prix total" de l'entité "commandes des clients".

    J'ai commencé à écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    create trigger REDUCTION
    after update of nombre _de_points on CLIENTS
    for each row 
    when (old.nombre_de_points < 100 and new.nombre_de_point >=100)
    begin 
    ...
    end ;
    J'aimerais de l'aide sur la partie que je dois écrire entre "begin" et "end" en sachant que je voudrais y exprimer la réduction qui s'opère sur le champ "prix total" dans commande.

    Merci d'avance Nom : à afficher.PNG
Affichages : 934
Taille : 25,8 Ko

Discussions similaires

  1. mySql : trigger sur une vue qui référence plusieurs tables
    Par charlesS dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/02/2012, 14h50
  2. Triggers sur BDD MySQL de Free
    Par Superleo2999 dans le forum MySQL
    Réponses: 4
    Dernier message: 14/05/2010, 19h13
  3. Probléme Trigger sur Mysql 5
    Par madousn dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 14/08/2008, 09h20
  4. Trigger syntaxe sur MySQL
    Par Sekigawa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/06/2008, 11h39
  5. Pb sur la création d'un trigger dans MySql
    Par NoiBe dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 29/03/2007, 08h08

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