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

MS SQL Server Discussion :

Sauvegarde des lignes supprimées d'une table


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut Sauvegarde des lignes supprimées d'une table
    Bonjour,

    je travaille avec une base de données sous SQL Server 2005.
    Mon entreprise facture à ses clients des services et des produits.

    Il y a dans la base de données les tables:
    - T_FACTURE_FAC (FAC_ID, FAC_REF, FAC_DATE, etc.)
    - T_LIG_FAC : Détails de la facture (LIF_ID, LIF_NUM, LIF_LIBELLE, FAC_ID, etc.)
    - TJ_SVC_CDE : Services commandés par le client (SVC_CDE_ID, SVC_CDE_QUTE, LIF_ID, etc.)
    - TJ_PDT_CDE: Produits commandés par le client (PDT_CDE_ID, PDT_CDE_QUTE, LIF_ID, etc.)

    Les relations entre les tables sont:
    - T_FACTURES_FAC <- FAC_ID -> T_LIG_FAC
    - T_LIG_FAC <- LIF_ID -> TJ_SVC_CDE
    - T_LIG_FAC <- LIF_ID -> TJ_PDT_CDE

    Les colonnes LIF_ID des tables TJ_SVC_CDE et TJ_PDT_CDE ont la valeur NULL lorsqu'ils ne sont pas facturés. Ainsi les services et les produits sont facturables si LIF_ID est NULL.

    Les utilisateurs doivent pouvoir supprimer les factures. Les services et les produits présents sur la facture supprimée doivent alors être facturée sur une autre facture.
    J'aimerais que les factures ne soient pas réellement supprimées de la base de données.
    Lors de la suppression, je pense procéder comme décrit ci-dessous :
    - j'ajoute à la table T_FACTURE_FAC, la colonne "FAC_SUPPRIME". La colonne FAC_SUPPRIME de la facture supprimée est mis à 1.
    - la colonne LIF_ID des services et des produits associés sont remis à NULL pour qu'ils puissent être facturés sur une autre facture.
    - Je crée une table d'historisation des produits facturés sur la facture supprimée et une autre pour les services.
    Cela donnerait:
    - TH_SVC_FAC (HIST_SVC_ID, LIF_ID, SVC_CDE_ID): L'identifiant de chaque service et du détail de la facture supprimée sont enregistrés dans cette table.
    - TH_PDT_FAC (HIST_PDT_ID, LIF_ID, PDT_CDE_ID): L'identifiant de chaque produit et du détail de la facture supprimée sont enregistrés dans cette table.

    Que pensez-vous de cette façon de procéder ? Quelle autre solution pourriez-vous me proposer ?

    Merci d'avance,
    ++

  2. #2
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    personne n'a d'idée.
    Est-ce que mon message est mal placée, ou n'est-il pas suffisamment clair ?

    Merci d'avance.
    ++

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 139
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Dsl, peux pas t'aider, je ne fais pas de dev...
    As-tu essayé de poster dans la rubrique "développement" du forum ?

    Bon courage...
    David

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    de mémoire de mes cours quand tu supprime des lignes il y a une table temporaire dans sql serveur que tu peux utiliser avec les triggers qui s'appelle "delete" il me semble.
    Donc tu peux créer un trigger qui se déclenche sur la suppression de ligne dans ta table, qui va regarder dans la table delete temporaire, récupères ses lignes et les insert dans ta table de sauvegarde.

    C'est possible je l'ai déjà fait mais j'ai pas mes cours avec moi.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    au lieu de votre colonne de suppression totalement inutile, créez un trigger INSTEAD OF DELETE et faite un report de vos lignes (de facture et de ligne de facture) dans vos tables d'historisation.

    A +

  6. #6
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    je vous remercie pour vos réponses.

    au lieu de votre colonne de suppression totalement inutile, créez un trigger INSTEAD OF DELETE et faite un report de vos lignes (de facture et de ligne de facture) dans vos tables d'historisation.
    Donc selon vous, en plus de créer des tables d'historisations TH_SVC_FAC et TH_PDT_FAC qui historient les services et les produits facturés, je devrais faire aussi deux autres tables d'historisation qui historient les factures et les détails factures. C'est bien cela ?
    N'est-il pas plus contraignant de dupliquer une table que d'ajouter une colonne ?

    Etes-vous d'accord avec ce principe d'historisation (je ne sais pas si on peut appeler ça principe) des données ?

    Merci d'avance pour vos réponses
    ++

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Qu'allez vous faire des données supprimées ? Si c'est pour les consulter de temps à autre (et rarement), mieux vaut alléger les tables de production... Autre solution : le partitionnement...

    A +

  8. #8
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    et merci pour votre réponse.
    J'avais lu que pour l'historisation, vous utilisiez un concept différent:
    http://www.developpez.net/forums/d56...ion/#post37735

    Je vais peut-être me pencher sur la solution que vous préconisez.
    Aujourd'hui, je ne souhaite historiser que le contenu de certaines tables, mais je pourrais aussi envisager de ne pas laisser dans la base d'exploitation des anciennes données qui ne sont que très très rarement demandées par l'utilisateur.

    Merci pour vos conseils.
    ++

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/02/2015, 01h22
  2. [AC-2010] Problème requête qui affiche toujours les lignes supprimées d'une tables
    Par Bou31 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/07/2013, 17h15
  3. [MPD] Sauvegarde des lignes supprimées
    Par Kropernic dans le forum Schéma
    Réponses: 10
    Dernier message: 20/12/2012, 08h15
  4. traces des enregistrements supprimées d'une table MySQL
    Par noopse dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 13/10/2009, 13h58
  5. test entre des lignes successives d'une table
    Par preskovik dans le forum Access
    Réponses: 4
    Dernier message: 22/03/2006, 08h45

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