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 :

probl�me Trigger sur table unique [Fait]


Sujet :

SQL Proc�dural MySQL

  1. #1
    Membre �prouv� Avatar de speedev
    Profil pro
    D�veloppeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Par d�faut probl�me Trigger sur table unique
    Bonjour,

    Est-il possible de faire ceci ?
    Seule matable est concern�e par les op�rations.

    Exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER montrigger AFTER INSERT ON matable
    FOR EACH ROW 
    BEGIN 
        UPDATE matable SET NEW.monchamp=NEW.autrechamp-4;
    END;
    "NEW.monchamp" est un champ "vide" � l'insertion mais apr�s l'insertion je souhaite qu'il prenne directement la valeur modif�e d'un "autrechamp".


    Merci.

  2. #2
    R�dacteur/Mod�rateur

    Avatar de Antoun
    Homme Profil pro
    Architecte d�cisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte d�cisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par d�faut
    Normalement, on ferait plut�t �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    CREATE TRIGGER montrigger BEFORE INSERT ON matable
    FOR EACH ROW 
        SET NEW.monchamp = NEW.autrechamp - 4 ;

  3. #3
    Membre �prouv� Avatar de speedev
    Profil pro
    D�veloppeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Par d�faut
    Ok j'ignorais cette possibilit�, je vais essayer merci !

    Tant qu'on y est, ceci reste jouable avec ta syntaxe ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    CREATE TRIGGER montrigger BEFORE INSERT ON matable
    FOR EACH ROW 
        SET NEW.monchamp = NEW.autrechamp - (SELECT coalesce(sum(other),0) FROM autretable WHERE bidule=autre) ;

  4. #4
    R�dacteur/Mod�rateur

    Avatar de Antoun
    Homme Profil pro
    Architecte d�cisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte d�cisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par d�faut
    Tant que ta sous-requ�te ne renvoie qu'une seule ligne, �a doit le faire.

    Au passage, tout �a est une scandaleuse d�normalisation

  5. #5
    Membre �prouv� Avatar de speedev
    Profil pro
    D�veloppeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Par d�faut
    Au passage, tout �a est une scandaleuse d�normalisation
    Au passage tu peux m'expliquer ce que tu veux dire ?
    Je n'ai pas compris ce qui �tait une "scandaleuse d�normalisation" ?

  6. #6
    R�dacteur/Mod�rateur

    Avatar de Antoun
    Homme Profil pro
    Architecte d�cisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte d�cisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par d�faut
    La normalisation exige (entre autres) qu'on ne stocke dans la base que des donn�es �l�mentaires et non des donn�es calcul�es. Par exemple, ta colonne qui est toujours �gale � une autre colonne moins 4 ne devrait pas exister (en termes de normalisation - tu peux avoir de bonnes raisons de le faire quand m�me, notamment pour des questions de perf).

  7. #7
    Membre �prouv� Avatar de speedev
    Profil pro
    D�veloppeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Par d�faut
    Ok.
    Actuellement c'est pour des raisons de perf effectivement, il s'agit de mettre � jour des stocks automatiquement.
    Des Vues SQL �taient trop lourdes � manipuler.
    Des traitements PHP auraient �t� trop imposants et difficile � maintenir.

    J'ai choisi les triggers...mais c'est la premi�re fois que j'en manipule.

  8. #8
    R�dacteur/Mod�rateur

    Avatar de Antoun
    Homme Profil pro
    Architecte d�cisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte d�cisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par d�faut
    Citation Envoy� par speedev Voir le message

    J'ai choisi les triggers...mais c'est la premi�re fois que j'en manipule.
    Fais un voeu

    Il ne faudrait pas cr�er les m�mes triggers sur le BEFORE UPDATE ?

  9. #9
    Membre �prouv� Avatar de speedev
    Profil pro
    D�veloppeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Par d�faut
    Fais un voeu
    Je fais le v�u que �a marche

    Il ne faudrait pas cr�er les m�mes triggers sur le BEFORE UPDATE ?
    Non (mais pour r�pondre implicitement � ta remarque oui j'ai d�j� remarqu� les subtilit�s des triggers qui demandent � penser plus d'une fois � leur utilisation ).

    Merci

  10. #10
    R�dacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de donn�es / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Expert bases de donn�es / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par d�faut
    Le probl�me c'est qu'un trigger est BEAUCOUP plus couteux en g�n�ral qu'un simple SELECT m�me avec des calculs. C'est pourquoi cette soit-disante d�normalisation dont le but est un gain de performances risque fort d'�tre une perte de performances. En effet toute mise � jour est transactionn�e (donc �crite dans le JT) alors qu'un SELECT ne l'est pas !

    En tout �tat de cause, avant de d�normaliser on commence par normaliser, puis on met le mod�le � l'�preuve de la mont� en charge (par exemple en populant les tables avec quelques centaines de milliers de lignes et en lan�ant plusieurs dizaines d'utilisateur simultan�s). La on compare et si un gain r�el, mesurable et significatif est obtenu alors on peut consid�rer comme b�n�fique la d�normalistion.

    Discussion r�currente que nous avons depuis des ann�es ici m�me :
    http://www.developpez.net/forums/d62...isation-table/

    A +
    Fr�d�ric Brouard - SQLpro - ARCHITECTE DE DONN�ES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : mod�lisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre �prouv� Avatar de speedev
    Profil pro
    D�veloppeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Par d�faut
    J'ai fais des mont�es en charge avec Jmeter (apache) et c'est pourquoi je suis pass� sur des triggers. Le soucis �tait li� � une vues SQL tenant � jour les stocks de produits en vente sur le site. Cette vue �tait excessivement gourmande pour le serveur SQL et de fa�on exponentielle en fonction de la quantit� d'utilisateurs connect�s (logique).
    Les triggers ont imm�diatement r�solus le probl�me.

    Mon soucis se pose plus sur la stabilit� des triggers et � la maintenance de l'appli lorsque ces derniers d�connent (je n'ai pas trouv� encore de solution pratique pour contr�ler les triggers).

  12. #12
    R�dacteur/Mod�rateur

    Avatar de Antoun
    Homme Profil pro
    Architecte d�cisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte d�cisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par d�faut
    Citation Envoy� par SQLpro Voir le message
    Le probl�me c'est qu'un trigger est BEAUCOUP plus couteux en g�n�ral qu'un simple SELECT m�me avec des calculs. C'est pourquoi cette soit-disante d�normalisation dont le but est un gain de performances risque fort d'�tre une perte de performances. En effet toute mise � jour est transactionn�e (donc �crite dans le JT) alors qu'un SELECT ne l'est pas !
    Parler de performance en g�n�ral ne veut rien dire. Une d�normalisation comme celle-ci am�liore les performance du SELECT au d�triment de celles de l'INSERT. �a peut donc �tre pertinent ou non selon le profil d'utilisation.

Discussions similaires

  1. Probl�me trigger sur plusieurs tables
    Par thomasaurelien dans le forum PL/SQL
    R�ponses: 5
    Dernier message: 24/01/2012, 19h26
  2. R�ponses: 1
    Dernier message: 08/07/2009, 09h37
  3. Probl�me select sur table/vue x$ksppsv
    Par LBO72 dans le forum Administration
    R�ponses: 4
    Dernier message: 25/03/2009, 09h07
  4. Probl�me Trigger sur Mysql 5
    Par madousn dans le forum SQL Proc�dural
    R�ponses: 8
    Dernier message: 14/08/2008, 09h20
  5. Probl�me trigger sur ajout
    Par envie2noichi dans le forum SQL Proc�dural
    R�ponses: 1
    Dernier message: 12/07/2007, 13h35

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