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 :

Historisation et Trigger [9.3]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    EFREI M1
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : EFREI M1
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Historisation et Trigger
    Bonjour à tous,

    dans le cadre de mon projet en entreprise, je souhaite historiciser plusieurs tables de ma base de données.

    Après de nombreuse recherche (notamment sur ce site), ils sembleraient que j'ai besoin de faire une historisation en mode ligne. C'est à dire, enregistrer toute la ligne dans une autre table lors d'un UPDATE par exemple.
    Néanmoins, l'objet que je souhaite historiciser se répartie en plusieurs table. L'utilisateur final a accès à la base de données via une interface web. La séparation des tables est invisible pour lui, et nous sommes obligé de maintenir l'objet en plusieurs tables.

    Je manque de connaissance sur les Triggers et je souhaite un conseil sur mon choix : Trigger ou PHP pour le chargement de la base de données d'historisation.

    Lors de la modification, le PHP connait les anciennes valeurs de mon objet, et les nouvelles. Je dois mettre à jours plusieurs table d'un seul coup. Vaut-il mieux privilégier la construction de toute les requêtes en PHP (modif dans la table d'historisation, puis modif dans la table en production) ?

    OU

    Je modifie la table de production. Et je mets en place des triggers sur celle-ci pour faire la copie des anciennes valeurs dans la table d'historisation ?

    Dans l'attentes de vos réponses.
    Et merci !

    Soccent

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Toute solution applicative fonctionne de manière itérative et non ensembliste comme le fait le SGBDR.
    En cas de pluralité de ligne dans la mise à jour, votre système via PHP ne récupérerait les valeurs que d'une seule ligne... Laquelle ? Mystère !

    De plus, si vous voulez faire ceci côté applicatif, alors vous devez gérer impérativement une transaction afin que le système ne tombe pas en panne entre la mise a jour fonctionnelle et l'insertion des lignes d'historique....

    Ce n'est pas pour rien que les déclencheurs ont été inventé (en 1986 par Sybase !)

    A +Bref,
    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/ * * * * *

  3. #3
    Membre à l'essai
    Homme Profil pro
    EFREI M1
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : EFREI M1
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Je rajoute ces informations.

    Les utilisateurs modifie mon objet via un formulaire HTML. Je mets à jours ma base de données via PHP.
    C'est pour ça que je demandais ce qui était le mieux. Il me paraissait beaucoup plus simple de construire deux petites requête plutôt qu'un TRIGGER.

    Merci de ta réponse,
    SQLpro tu es partout.

    Bonne journée

  4. #4
    Membre à l'essai
    Homme Profil pro
    EFREI M1
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : EFREI M1
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Mon formulaire HTML contient environ 30 valeurs différentes que je dois updater dans 4 tables.

    Pour ce faire j'ai opté pour une transaction qui va faire 4 requêtes update. Ceci sera fait en PHP.
    Et en SQL, je mets en place les TRIGGERS nécessairent pour l'historisation de ma BDD.

    Si personne n'a de remarque sous deux jours, j'indiquerai que ce TOPIC est résolu.

  5. #5
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    J'opterais pour "le tout coté postgresql"...
    • une vue qui constitue la base du formulaire
    • un trigger INSTEAD OF INSERT UPDATE sur la vue qui s’occupera de la mise à jour des tables sous-jacentes et de l'insertion dans les tables d'historisation

    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  6. #6
    Membre à l'essai
    Homme Profil pro
    EFREI M1
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : EFREI M1
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    J'aime beaucoup cette idée.

    Merci pour cette réponse !

  7. #7
    Membre à l'essai
    Homme Profil pro
    EFREI M1
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : EFREI M1
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Du coup je pense faire :

    PHP : Transaction BEGIN
    Requête INSERT dans la vue qui regroupe tous les attributs de mon objet.


    SQL TRIGGER : INSTEAD OF INSERT UPDATE sur les 4 tables impactées

    PHP : Contrôle que tout a fonctionné,
    Transaction END


    Voilà pour résumer dans les grandes lignes.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Soccent74 Voir le message
    Du coup je pense faire :

    PHP : Transaction BEGIN
    Requête INSERT dans la vue qui regroupe tous les attributs de mon objet.


    SQL TRIGGER : INSTEAD OF INSERT UPDATE sur les 4 tables impactées

    PHP : Contrôle que tout a fonctionné,
    Transaction END


    Voilà pour résumer dans les grandes lignes.
    Vous n'avez pas besoin d'une commande BEGIN TRANSACTION. En effet tout ordre SQL unique est une transaction à part entière et le déclencheur est exécuté de manière atomique au sein de la transaction de l'ordre SQL qui l'initie (INSERT, UPDATE ou DELETE)...

    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/ * * * * *

  9. #9
    Membre à l'essai
    Homme Profil pro
    EFREI M1
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : EFREI M1
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Du coup je pars sur tout ceci.
    Merci à vous !

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

Discussions similaires

  1. Trigger Ensembliste de Alter table pour historisation.
    Par obarator dans le forum Développement
    Réponses: 8
    Dernier message: 28/10/2011, 11h35
  2. Réponses: 14
    Dernier message: 08/02/2011, 10h39
  3. Réponses: 1
    Dernier message: 02/02/2011, 15h11
  4. Trigger pour historisation de données
    Par actionthomas dans le forum Développement
    Réponses: 1
    Dernier message: 10/03/2010, 14h11
  5. Une table d'historisation en utilisant un trigger et un curseur
    Par freestyler1982 dans le forum Oracle
    Réponses: 7
    Dernier message: 21/09/2006, 21h21

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