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

Algorithmes et structures de données Discussion :

Détecter les suppression dans un fichier qui sert à alimenter une BDD


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut Détecter les suppression dans un fichier qui sert à alimenter une BDD
    Bonjour à tous,

    Un serveur maître exporte des données dans un fichier qu'il envoi à mon serveur WEB pour que je les mette à jour.

    Ma première question consiste à savoir quelle est la terminaison du verbe mettre quand je le conjugue au présent subjonctif à la première personne (que je les met... à jour)

    Ma deuxième question concerne la détection des entrées supprimées du fichier.

    Je vois pour ma part deux approches :

    1. Ajouter une colonne supplémentaire dans ma table qui contiendra un drapeau de suppression.
      en parcourant le fichier, si je trouve l'entreprise dans ma table je baisse le drapeau et je fais les traitements nécessaires pour la détection d'un ajout ou d'une mise à jour. Je fais ensuite une deuxième passe sur ma table et je supprime toutes les entreprises qui ont le drapeau levé.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      DELETE FROM Table WHERE Suppression = 1
      Il y a un truc qui me gêne dans cette approche c'est que je rajoute une colonne dans ma table qui n'a rien à voir avec mes données donc mon modèle est pourri.


    2. Autre solution, passer par une table de mouvement. Ça consiste à avoir une 2 table identique à ma table originel sauf qu'elle a la fameuse colonne en plus. Cette fois je m'en fou parce que cette table n'est pas une table de données et elle ne fait pas partie de mon modèle. Elle sert juste au traitement. Bref, à chaque fois que je reçois le fichier, je supprime et recrée (ou tronque et rempli) la table mouvement à partir de la table originelle, je décide que la 3 ième colonne a le drapeau levé par défaut, et puis même histoire que la solution 1.

      Ce qui me gêne dans cette solution c'est de devoir écraser la table à chaque fois. Je ne sais pas si MySQL fait ça rapidement ou pas. D'ailleurs, qu'est-ce qui est préférable : supprimer et copier ou tronquer et remplir ?



    Merci pour vous avis éclairés.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    3. créer une table pour modéliser le contenu du fichier, et jouer avec les JOIN pour trouver les valeurs en plus/en moins/communes entre la table de réference et la table du fichier.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Sans oublier que pour la solution 2 il faut ensuite faire l'opération inverse : supprimer la table originelle et la recréer depuis la table des mouvements (sans prendre la 3ième colonne)

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et pour a)

    "Patientez.. Je met à jour votre Base de Données"

    et en général dans les BDD c'est la solution 1 qui est implantée...

    (modifiée, car il faut garder l'original, tenir compte des modifs et les garder, plus éventuellement la suppression).

  5. #5
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Bonjour à tous et merci pour vos réponses.

    Je ne penses pas que je vais pouvoir m'en sortir avec des joins car je n'ai pas de clé primaire. Les Id ne sont pas uniques car le fichier que je reçois alimente une table de liens entre deux autres tables.

    Sinon ce document de Jeff Attwood explique visuellement comment ça pourrait marcher avec des join si les clés étaient uniques
    http://www.codinghorror.com/blog/archives/000976.html

  6. #6
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Ok j'ai pas assez réfléchis avant de poster, en fait il y a bien un moyen de détecter une suppression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     SELECT T1.ID1,
    FROM T1
    LEFT JOIN T2 
    ON T1.Id1 = T2.Id1
    WHERE T2.id1 IS NULL
    Trouvera les entrées de T1 qui ne sont pas dans T2.

    La notion de mise à jour n'est peut être pas pertinente dans mon cas (c'est une table de lien), donc en fait soit il y a une nouvelle entrée soit il n'y en a pas. Et inversement, soit une entrée existante a disparu soit elle n'a pas disparu. Je suis donc amené à faire de toute façon deux passes : une passe avec le premier bout de code, et une deuxième passe avec le même bout de code mais en intervertissant T1 et T2.

    Si quelqu'un a une meilleur idée je suis bien sure preneur.

  7. #7
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Ok je dis que des bêtises là parce que ça ne sert à rien de détecter les suppressions sur un seul ID... Je vais d'abord bien réfléchir et faire quelques tests avant de reposter :p

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

Discussions similaires

  1. Copier les éléments d'un fichier dans le fichier qui lance la macro
    Par hobine dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/11/2011, 22h27
  2. afficher les lignes d'un fichier qui ne sont pas dans lun autre fichier
    Par israellita dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 11/03/2011, 11h39
  3. Détecter les changements dans un fichier qui alimente une table
    Par yacinechaouche dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/06/2008, 17h56
  4. Réponses: 1
    Dernier message: 24/08/2007, 10h50
  5. Réponses: 4
    Dernier message: 22/12/2003, 11h12

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