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

Langage SQL Discussion :

Faire un "merge" entre 2 db, avec master-detail


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut Faire un "merge" entre 2 db, avec master-detail
    Bonjour,

    Dans mon application j'ai besoin d'insérer/mettre à jour des tables dans une DB locale à partir de tables d'une autre DB (que j'ATTACH); le gros problème c'est que j'ai des relations master-detail sur ces tables et que je dois donc conserver les liens ou les mettre à jour si il y a eu modification.

    Si j'ai des données présentes dans les 2 DB, j'utilise un champ "DateModification" pour vérifier si les données de la DB externe sont plus récentes, et si c'est le cas je dois mettre à jour dans la DB locale. Si des données sont présentes seulement dans la DB externe, je dois les insérer dans la DB locale...

    Pour faire simple, je veux faire l'équivalent de ce qui est présenté ici:
    http://www.auisoft.com/sqlmerger/How...master-detail/
    mais pas en utilisant une application externe mais avec mon propre code SQL.

    Avez-vous des pistes SVP ? J'ai cherché partout, ça n'a pas l'air d'être un problème fréquent !?

    Je précise: ce sont des DBs SQLite.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 434
    Points
    28 434
    Par défaut
    Pourrais tu nous donner une idée de la structure des tables que tu veux mettre à jour ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Oui bien sûr. Les deux DB contiennent des tables "Evenements" et "Evenements_Matchs" de même structure, Evenements est la table master, Evenements_Matchs la table detail:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    CREATE TABLE "Evenements" (
    	"ID" INTEGER PRIMARY KEY NOT NULL,
    	"LotofootID" INTEGER NOT NULL,
    	"Annee" INTEGER NOT NULL,
    	"Numero" INTEGER NOT NULL,
    	"DateModification" DATETIME,
    	"EtatMaj" INTEGER,
    	"NbMatchs" INTEGER,
    	"DebutValidation" DATETIME,
    	"FinValidation" DATETIME,
    	"ResultatsPublies" BOOL NOT NULL,
    	"RapportsPublies" BOOL NOT NULL,
    	"DateLimitePaiement" DATETIME,
    	"NiveauPremierRang" INTEGER,
    	UNIQUE ("LotofootID", "Annee", "Numero")
    );
     
    CREATE TABLE "Evenements_Matchs" (
    	"EvenementID" INTEGER NOT NULL,
    	"NumMatch" INTEGER NOT NULL,
    	"Equipe1" VARCHAR,
    	"Equipe2" VARCHAR,
    	"Cote1" REAL,
    	"CoteN" REAL,
    	"Cote2" REAL,
    	"Resultat" INTEGER,
    	PRIMARY KEY("EvenementID", "NumMatch"),
    	FOREIGN KEY("EvenementID") REFERENCES "Evenements"("ID")
    );
    Dans l'exemple ci-dessous, les ID 178 et 179 dans la dbLocale doivent être mis à jour par les lignes 1 et 2 de la dbExterne car DateModification est plus récente; les lignes 3 à 5 doivent être insérées dans la dbLocale car ces événements n'y sont pas encore. Les données des tables Evenements_Matchs doivent être synchronisées de la même façon.






  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Au fait, ce problème me donne envie de reconsidérer la conception de mes tables, je me dis qu'en utilisant des clés naturelles au lieu des clés "surrogate" actuelles, ça me simplifierait grandement les choses ?

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