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

Access Discussion :

Synchronisation de 2 bases


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Synchronisation de 2 bases
    Bonjour,
    je suis debutant sur access et je me casse la tete depuis plusieurs jours.

    j'ai une petite base de donnee access 2016 sur un reseau local dans mon entreprise et j'ai besoin de la mettre sur le pc portable de mon technicien.
    Le probleme est que cet ordinateur n'a pas de connexion internet. Je voudrais donc qu'il puisse modifier son fichier lorsqu'il est en deplacement et que lorsqu'il revient au bureau je puisse lancer une synchro pour mettre a jour les deux bases (locale et itinerante).

    j'ai trouvé pleins d'info sur la replication mais ce n'est plus prit en charge depuis AC 2007 je crois.
    Comment faire avec AC 2016 ?

    Merci de vos reponses

    PS : je suis pourri en programmation...

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Mauvaise nouvelle, une vraie synchronisation de base de données n'est pas très simple.

    On peut simplifier le problème en faisant un "découpage" des données. C'est à dire qu'on sait qu'une personne travaille exclusivement sur une portion des données (ex : Installation d'un bâtiment particulier, d'une zone géographique).
    Les autres personnes ne modifient JAMAIS ces données.
    Dans ce cas, if suffit de supprimer toutes les données de cette "région" dans la BD centrale puis d'ajouter à la BD centrale les données de la BD du portable.

    Si tu n'es pas dans ce cas, alors il faut regarder si toutes les tables sont concernées ou seulement une partie et dans les tables concernées, regarder si tous les champs sont concernées.
    Déterminer si on va interdire les suppressions et gérer un drapeau "inactif" à la place.
    Et finalement, déterminer qui a raison en cas de conflit de mise à jour. Le critère de décision peut être aussi simple que "celui qui parle en dernier a raison" ou la BD centrale a toujours raison à des choses plus complexe selon le besoin.

    Généralement si elles n'y sont pas il faut prévoir d'ajouter aux données les informations suivantes :
    Une date et heure de dernière modification (pour les création c'est la date et l'heure de création).
    Le code de l'usager qui a fait l'opération.

    Établi tes besoins et ensuite on parlera solution.

    Regarde aussi si tu ne peux pas donner un accès distant à ton technicien (ex : LogMeIn, Remote Desktop) c'est la solution la plus facile du point de vue de l'application.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse, je me penche dessus et je reviens pour la suite.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bon, j'ai gratté sur ce que tu m'as dit.
    Le decoupage, n'est pas possible car toutes les personnes qui accederont à la base (en ligne ou hors ligne) seront susceptibles de modifier n'importe quel champ de n'importe quelle table et de creer des entrées. Par contre jamais une entree n'est supprimée de la base.

    Concernant l'acces distant, ce n'est pas possible car il tourne sur des zones pommées sans connexion reseau. Durant ces moments ou il est hors du monde technologique, il doit pouvoir modifier la base a sa guise.

    Le potentiel d'actions en ligne et hors ligne est le meme. Tout le monde va creer des nouveaux clients, ajouter des evenements (SAV, entretien, achats de produits...), modifier des clients anciens, et ce, plusieurs fois par jour.
    Donc la gestion des actions en fonction du moment de leur creation est peut etre une possibilité mais il ne faut pas qu'une information soit perdu en cas de conflit (ex : creation de 2 clients avec le meme ID).

    il faudrait peut etre que je change de SGBD.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Peut-être bien. Si tu n'as pas beaucoup d'argent à mettre là dedans, jette un œil à MySQL, qui est gratuit il me semble et qui offre la réplication.

    Ici 2 lien trouvé avec "MySQL Replication" and Google.

    http://dev.mysql.com/doc/refman/5.7/en/replication.html
    http://dev.mysql.com/doc/refman/5.7/...ion-howto.html

    Apparemment MS-SQL Server Express (Version light de MS-SQL Server) le fait aussi.

    https://technet.microsoft.com/fr-fr/...v=sql.90).aspx

    Si tu le fais avec Access, comme tu es dans le pire scénario possible, il va te falloir un journal des modifications et appliquer ces modifications au moment de la reconnexion.
    C'est un sacré boulot car il faut équiper tout tes formulaires et attraper les modifs.
    Les macros de données pourraient aider en déportant la surveillance au niveau des tables mais il ne faut pas que tu utilises de champ mémos.

    Sinon, as-tu envisagé une liaison satellitaire ?
    Ce n'est probablement pas donné mais peut-être moins que d'ajouter le journal de modif à ton application.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bon, la liaison satellitaire n'etant pas possible non plus, j'ai suivi tes conseils et je me lance dans la reconstruction de ma base sous mySQL (sacré boulot !).

    voici ce que j'ai commencé a faire avec workbench :
    Est ce que la strucuture parait correcte ?
    Et j'ai encore ma ou mes tables intervention a placer mais j'hesite.
    je ne sais pas trop comment faire, j'ai en gros 3 types d'intervention (entretien, sav, mise en service) que je peut faire sur les appareils. dois je faire une seule table intervention ou plutot 3 tables ?
    Et dois je faire que cette ou ces 3 tables soient commune a tout les appareils, ou les differencier en fonction des appareils (CAD 5 appareils x 3 tables = 15 tables de plus) ?

    pfiou... je galere un peu quand meme.


    diagrammeBD.pdf

    Code SQL : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    -- MySQL Script generated by MySQL Workbench
    -- 11/29/15 12:38:21
    -- Model: New Model    Version: 1.0
    -- MySQL Workbench Forward Engineering
     
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
     
    -- -----------------------------------------------------
    -- Schema Ideeau1
    -- -----------------------------------------------------
     
    -- -----------------------------------------------------
    -- Schema Ideeau1
    -- -----------------------------------------------------
    CREATE SCHEMA IF NOT EXISTS `Ideeau1` DEFAULT CHARACTER SET utf8 ;
    USE `Ideeau1` ;
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`client`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`client` (
      `idclient` INT NOT NULL AUTO_INCREMENT,
      `numero_client` INT NOT NULL,
      `type` VARCHAR(20) NOT NULL,
      PRIMARY KEY (`idclient`))
    ENGINE = InnoDB;
     
    CREATE UNIQUE INDEX `numero_client_UNIQUE` ON `Ideeau1`.`client` (`numero_client` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`Personne`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`Personne` (
      `idpersonne` INT NOT NULL AUTO_INCREMENT,
      `Titre` VARCHAR(3) NOT NULL,
      `Nom` VARCHAR(100) NOT NULL,
      `Prenom` VARCHAR(100) NOT NULL,
      `Commentaires` VARCHAR(255) NULL,
      `client_idclient` INT NOT NULL,
      PRIMARY KEY (`idpersonne`, `client_idclient`),
      CONSTRAINT `fk_Personne_client1`
        FOREIGN KEY (`client_idclient`)
        REFERENCES `Ideeau1`.`client` (`idclient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Personne_client1_idx` ON `Ideeau1`.`Personne` (`client_idclient` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`Contrat`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`Contrat` (
      `idContrat` INT NOT NULL AUTO_INCREMENT,
      `Souscription` DATE NOT NULL,
      `Montant` DECIMAL NOT NULL,
      `Nb_visite_an` TINYINT(3) NOT NULL,
      `Conditions` VARCHAR(255) NULL,
      PRIMARY KEY (`idContrat`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`site`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`site` (
      `idSite` INT NOT NULL AUTO_INCREMENT,
      `Description` VARCHAR(255) NULL,
      `Nom` VARCHAR(100) NULL,
      `numero_rue` SMALLINT(10) UNSIGNED NULL,
      `Adresse` VARCHAR(255) NOT NULL,
      `Code_postal` VARCHAR(5) NOT NULL,
      `Ville` VARCHAR(100) NOT NULL,
      `Complement` VARCHAR(255) NULL,
      `client_idclient` INT NOT NULL,
      `Contrat_idContrat` INT NOT NULL,
      PRIMARY KEY (`idSite`, `client_idclient`, `Contrat_idContrat`),
      CONSTRAINT `fk_site_client1`
        FOREIGN KEY (`client_idclient`)
        REFERENCES `Ideeau1`.`client` (`idclient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_site_Contrat1`
        FOREIGN KEY (`Contrat_idContrat`)
        REFERENCES `Ideeau1`.`Contrat` (`idContrat`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_site_client1_idx` ON `Ideeau1`.`site` (`client_idclient` ASC);
     
    CREATE INDEX `fk_site_Contrat1_idx` ON `Ideeau1`.`site` (`Contrat_idContrat` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`clients_has_Lieu`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`clients_has_Lieu` (
      `clients_idclients` INT NOT NULL,
      `Lieu_idLieu` INT NOT NULL,
      PRIMARY KEY (`clients_idclients`, `Lieu_idLieu`),
      CONSTRAINT `fk_clients_has_Lieu_clients`
        FOREIGN KEY (`clients_idclients`)
        REFERENCES `Ideeau1`.`Personne` (`idpersonne`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_clients_has_Lieu_Lieu1`
        FOREIGN KEY (`Lieu_idLieu`)
        REFERENCES `Ideeau1`.`site` (`idSite`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_clients_has_Lieu_Lieu1_idx` ON `Ideeau1`.`clients_has_Lieu` (`Lieu_idLieu` ASC);
     
    CREATE INDEX `fk_clients_has_Lieu_clients_idx` ON `Ideeau1`.`clients_has_Lieu` (`clients_idclients` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`Adoucisseur`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`Adoucisseur` (
      `idAdoucisseur` INT NOT NULL AUTO_INCREMENT,
      `Fabricant` VARCHAR(45) NOT NULL,
      `Type` VARCHAR(255) NOT NULL,
      `litrage` SMALLINT(5) NOT NULL,
      `Raccordement` VARCHAR(45) NULL,
      `installateur` VARCHAR(255) NULL,
      `Accessoires` VARCHAR(255) NULL,
      `installation` DATE NOT NULL,
      `Notes` VARCHAR(255) NULL,
      `site_idSite` INT NOT NULL,
      `site_client_idclient` INT NOT NULL,
      `site_Contrat_idContrat` INT NOT NULL,
      PRIMARY KEY (`idAdoucisseur`, `site_idSite`, `site_client_idclient`, `site_Contrat_idContrat`),
      CONSTRAINT `fk_Adoucisseur_site1`
        FOREIGN KEY (`site_idSite` , `site_client_idclient` , `site_Contrat_idContrat`)
        REFERENCES `Ideeau1`.`site` (`idSite` , `client_idclient` , `Contrat_idContrat`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Adoucisseur_site1_idx` ON `Ideeau1`.`Adoucisseur` (`site_idSite` ASC, `site_client_idclient` ASC, `site_Contrat_idContrat` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`PompeDoseuse`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`PompeDoseuse` (
      `idPompe` INT NOT NULL AUTO_INCREMENT,
      `Fabricant` VARCHAR(45) NOT NULL,
      `Type` VARCHAR(255) NOT NULL,
      `Produit` SMALLINT(5) NOT NULL,
      `installateur` VARCHAR(255) NULL,
      `Accessoires` VARCHAR(255) NULL,
      `installation` DATE NOT NULL,
      `Notes` VARCHAR(255) NULL,
      `site_idSite` INT NOT NULL,
      `site_client_idclient` INT NOT NULL,
      `site_Contrat_idContrat` INT NOT NULL,
      PRIMARY KEY (`idPompe`, `site_idSite`, `site_client_idclient`, `site_Contrat_idContrat`),
      CONSTRAINT `fk_PompeDoseuse_site1`
        FOREIGN KEY (`site_idSite` , `site_client_idclient` , `site_Contrat_idContrat`)
        REFERENCES `Ideeau1`.`site` (`idSite` , `client_idclient` , `Contrat_idContrat`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_PompeDoseuse_site1_idx` ON `Ideeau1`.`PompeDoseuse` (`site_idSite` ASC, `site_client_idclient` ASC, `site_Contrat_idContrat` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`UV`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`UV` (
      `idUv` INT NOT NULL AUTO_INCREMENT,
      `Fabricant` VARCHAR(45) NOT NULL,
      `Type` VARCHAR(255) NOT NULL,
      `Lampe` VARCHAR(255) NULL,
      `installateur` VARCHAR(255) NULL,
      `Accessoires` VARCHAR(255) NULL,
      `installation` DATE NOT NULL,
      `Notes` VARCHAR(255) NULL,
      `site_idSite` INT NOT NULL,
      `site_client_idclient` INT NOT NULL,
      `site_Contrat_idContrat` INT NOT NULL,
      PRIMARY KEY (`idUv`, `site_idSite`, `site_client_idclient`, `site_Contrat_idContrat`),
      CONSTRAINT `fk_UV_site1`
        FOREIGN KEY (`site_idSite` , `site_client_idclient` , `site_Contrat_idContrat`)
        REFERENCES `Ideeau1`.`site` (`idSite` , `client_idclient` , `Contrat_idContrat`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_UV_site1_idx` ON `Ideeau1`.`UV` (`site_idSite` ASC, `site_client_idclient` ASC, `site_Contrat_idContrat` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`Osmoseur`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`Osmoseur` (
      `idOsmoseur` INT NOT NULL AUTO_INCREMENT,
      `Fabricant` VARCHAR(45) NOT NULL,
      `Type` VARCHAR(255) NOT NULL,
      `Membrane` VARCHAR(255) NULL,
      `Cartouches` VARCHAR(255) NULL,
      `installateur` VARCHAR(255) NULL,
      `installation` DATE NOT NULL,
      `Notes` VARCHAR(255) NULL,
      `site_idSite` INT NOT NULL,
      `site_client_idclient` INT NOT NULL,
      `site_Contrat_idContrat` INT NOT NULL,
      PRIMARY KEY (`idOsmoseur`, `site_idSite`, `site_client_idclient`, `site_Contrat_idContrat`),
      CONSTRAINT `fk_Osmoseur_site1`
        FOREIGN KEY (`site_idSite` , `site_client_idclient` , `site_Contrat_idContrat`)
        REFERENCES `Ideeau1`.`site` (`idSite` , `client_idclient` , `Contrat_idContrat`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Osmoseur_site1_idx` ON `Ideeau1`.`Osmoseur` (`site_idSite` ASC, `site_client_idclient` ASC, `site_Contrat_idContrat` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`MaterielDivers`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`MaterielDivers` (
      `idMateriel` INT NOT NULL AUTO_INCREMENT,
      `Fabricant` VARCHAR(45) NOT NULL,
      `Type` VARCHAR(255) NOT NULL,
      `Donnees_techniques` VARCHAR(255) NULL,
      `Accessoires` VARCHAR(255) NULL,
      `installateur` VARCHAR(255) NULL,
      `installation` DATE NOT NULL,
      `Notes` VARCHAR(255) NULL,
      `site_idSite` INT NOT NULL,
      `site_client_idclient` INT NOT NULL,
      `site_Contrat_idContrat` INT NOT NULL,
      PRIMARY KEY (`idMateriel`, `site_idSite`, `site_client_idclient`, `site_Contrat_idContrat`),
      CONSTRAINT `fk_MaterielDivers_site1`
        FOREIGN KEY (`site_idSite` , `site_client_idclient` , `site_Contrat_idContrat`)
        REFERENCES `Ideeau1`.`site` (`idSite` , `client_idclient` , `Contrat_idContrat`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_MaterielDivers_site1_idx` ON `Ideeau1`.`MaterielDivers` (`site_idSite` ASC, `site_client_idclient` ASC, `site_Contrat_idContrat` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`societe`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`societe` (
      `idsociete` INT NOT NULL AUTO_INCREMENT,
      `Nom` VARCHAR(255) NOT NULL,
      `numero_rue` SMALLINT(10) UNSIGNED NULL,
      `Adresse` VARCHAR(255) NOT NULL,
      `Code_postal` VARCHAR(5) NOT NULL,
      `Ville` VARCHAR(100) NOT NULL,
      `Complement` VARCHAR(255) NULL,
      `client_idclient` INT NOT NULL,
      PRIMARY KEY (`idsociete`, `client_idclient`),
      CONSTRAINT `fk_societe_client1`
        FOREIGN KEY (`client_idclient`)
        REFERENCES `Ideeau1`.`client` (`idclient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_societe_client1_idx` ON `Ideeau1`.`societe` (`client_idclient` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`contactPro`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`contactPro` (
      `idcontactPro` INT NOT NULL AUTO_INCREMENT,
      `Fonction` VARCHAR(100) NOT NULL,
      `Service` VARCHAR(100) NULL,
      `societe_idsociete` INT NOT NULL,
      `Personne_idpersonne` INT NOT NULL,
      PRIMARY KEY (`idcontactPro`, `societe_idsociete`, `Personne_idpersonne`),
      CONSTRAINT `fk_contactPro_societe1`
        FOREIGN KEY (`societe_idsociete`)
        REFERENCES `Ideeau1`.`societe` (`idsociete`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_contactPro_Personne1`
        FOREIGN KEY (`Personne_idpersonne`)
        REFERENCES `Ideeau1`.`Personne` (`idpersonne`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_contactPro_societe1_idx` ON `Ideeau1`.`contactPro` (`societe_idsociete` ASC);
     
    CREATE INDEX `fk_contactPro_Personne1_idx` ON `Ideeau1`.`contactPro` (`Personne_idpersonne` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`Telephone`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`Telephone` (
      `idTelephone` INT NOT NULL,
      `Type` VARCHAR(45) NOT NULL,
      `Numero` INT(10) ZEROFILL NOT NULL,
      `Complement` VARCHAR(100) NULL,
      `Personne_idpersonne` INT NOT NULL,
      `Personne_client_idclient` INT NOT NULL,
      PRIMARY KEY (`idTelephone`, `Personne_idpersonne`, `Personne_client_idclient`),
      CONSTRAINT `fk_Telephone_Personne1`
        FOREIGN KEY (`Personne_idpersonne` , `Personne_client_idclient`)
        REFERENCES `Ideeau1`.`Personne` (`idpersonne` , `client_idclient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Telephone_Personne1_idx` ON `Ideeau1`.`Telephone` (`Personne_idpersonne` ASC, `Personne_client_idclient` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `Ideeau1`.`email`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `Ideeau1`.`email` (
      `idemail` INT NOT NULL,
      `adresse_email` VARCHAR(100) NOT NULL,
      `complement` VARCHAR(255) NULL,
      `Personne_idpersonne` INT NOT NULL,
      `Personne_client_idclient` INT NOT NULL,
      PRIMARY KEY (`idemail`, `Personne_idpersonne`, `Personne_client_idclient`),
      CONSTRAINT `fk_email_Personne1`
        FOREIGN KEY (`Personne_idpersonne` , `Personne_client_idclient`)
        REFERENCES `Ideeau1`.`Personne` (`idpersonne` , `client_idclient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_email_Personne1_idx` ON `Ideeau1`.`email` (`Personne_idpersonne` ASC, `Personne_client_idclient` ASC);
     
     
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

    Par avance merci

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    j'ai en gros 3 types d'intervention (entretien, sav, mise en service) que je peut faire sur les appareils. dois je faire une seule table intervention ou plutot 3 tables ?
    En fait il n'y a pas de réponse absolue à cette question.

    • Si tes champs sont identiques pour chacun des types, il faut évidement ne faire qu'une seule table.
    • Si ils sont TRÈS différents (ex : 2 champs pour 1 type, 25 pour un autre), probablement que 3 tables sont mieux.
    • Si ils sont proches (ex : ils ont une majorité de champ en commun et quelques uns spécifiques), une seule table aurait ma préférence.
      La différentiation se ferai à l'affichage en cachant les champs que je ne veux pas voir selon le type.
    • Si tu n'es ni proche, ni lointain, finalement entre les 2 tu peux adopter une solution hybride (1 table avec les champs communs et 1 table par type pour les champs spécifiques).
      Cette solution très élégantes peut être parfois difficile à vivre. Il faut concevoir des formulaires spécifiques et au final tu te trouves avec 4 tables au lieu de 1 ou 3.
      Évidement si tu prévois d'ajouter d'autres types cela peut être une solution valide.
    • La dernière approche est de faire par propriété. Tu as une table avec les informations communes, une tables des propriétés associées à chaque type et une table des valeurs de chaque propriété.
      L'idée est la même qu'avec les objets d'access. Par exemple un contrôle TextBox et Label ont des propriétés générales communes comme le nom. Mais ils ont aussi des propriétés propres (ex : .Text, .Caption).
      Quand tu crées par exemple une nouvelle mis en service, crées dans table des valeurs toutes les propriétés associées.
      C'est très souple mais il faut à chaque fois se référer à la liste des propriétés quand tu fais une interrogation. Obtenir un enregistrement complet (communs + propriétés) peut être assez pénible.


    La bonne réponse dépend donc de la diversité de tes informations et de l'exploitation que tu veux en faire.
    Dans le cas des 3 tables séparées, sortir une seule listes présentant tous les types peut être pénible mais si tu ne fais jamais cela alors ce n'est pas un problème.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Et dois je faire que cette ou ces 3 tables soient commune a tout les appareils, ou les différencier en fonction des appareils (CAD 5 appareils x 3 tables = 15 tables de plus) ?
    Là j'aurai tendance à te dire non, mon choix serait sans doute une seul table par type d'intervention mais ce que j'ai mentionné avant reste vrai,

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Synchronisation / réplication de bases
    Par Expert_PHP dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/06/2006, 02h50
  2. Synchronisation de 2 bases
    Par horalass dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 23/06/2006, 09h34
  3. [VB.net] Problème de synchronisation d'une base
    Par WriteLN dans le forum Windows Forms
    Réponses: 18
    Dernier message: 21/10/2005, 13h11
  4. Synchronisation entre 2 bases ACCESS
    Par Tchupacabra dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 15h24
  5. Synchronisation de 2 base de donnee
    Par toure32 dans le forum Bases de données
    Réponses: 7
    Dernier message: 23/12/2004, 00h09

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