Vous n'êtes pas identifié(e).

#1 14/11/2011 15:57:38

baradji
Membre

Utilisation de clés primaires dans plusieurs bases de donnees

Bonjour,
je ne sais pas comment remedier a mon probleme.

dans mon entreprise, on a des roulottes qui vont dans des zones ou ils n'existent pas de connexion internet.
sur chaque roulotte, on a installé une application avec une base de donnees postgresql pour saisir des donnees sur le terrain.
et au bureau, j'ai la base de donnees centrale avec mon application web que je developpe au jour le jour en tenant compte des besoins de l'entreprise.
Cette base de donnees contient a un moment donnees des informations que les bases sur les roulottes ne contient pas et vis versa.

mon problemes se resume en un mot : connent interchanger les données entre ces differentes entités en un click sans saisir a la main?

Pour l'instant, j'utilise dans certaines tables des clés primaire auto-increment, ce qui crée un probleme quand je recupere les données provenant des roulottes pour les inserer dans ma base ou vis versa.
j'ai reflechi beaucoup sur le probleme, et je suis arrivé qu'il ne faut pas utilisé de clé auto-increment dans ma base de données contenant 30 tables.
et voici la solution que j'ai immaginé: utiliser comme clé: NUMERO_ANNEE-MOIS-JOUR-HEURE-MINUTE-SECONDE

dans la roulotte 3 par exemple:un exemple de clé serait: r3_20111113085122
Je souhaite utiliser cette composition de clé pour remplacer toute les cles auto-increments.

Je souhaite avoir vos avis et suggestions.

MERCI

Hors ligne

#2 14/11/2011 16:15:51

gleu
Administrateur

Re : Utilisation de clés primaires dans plusieurs bases de donnees

Certainement pas très rapide d'avoir une clé primaire sous forme de chaîne. Personnellement, j'en resterais à la colonne autoincrémentée avec une colonne d'identifiant de roulotte. La clé primaire sera créée sur les deux colonnes. Ce sera à mon avis plus simple et plus performant. Pour faire simple, ça donnerait ceci :

CREATE TABLE t1 (id_roulotte integer, id_interne_roulotte serial, ...autres colonnes..., primary key (id_roulotte, id_interne_roulotte));

Un INSERT dans la roulotte 3 se ferait ainsi :

INSERT INTO t1 (id_roulotte integer, id_interne_roulotte serial, ...autres colonnes...) VALUES (3, DEFAULT, ... autres valeurs);

Un INSERT dans la roulotte 4 se ferait ainsi :

INSERT INTO t1 (id_roulotte integer, id_interne_roulotte serial, ...autres colonnes...) VALUES (4, DEFAULT, ... autres valeurs);

etc.


Guillaume.

Hors ligne

#3 14/11/2011 18:11:37

Marc Cousin
Membre

Re : Utilisation de clés primaires dans plusieurs bases de donnees

Il y a une autre variante, à mon avis, avec une seule colonne (donc plus compacte):


CREATE SEQUENCE seq_test ;
CREATE TABLE test (a text default 'r1' || nextval('seq_test'));

=# INSERT INTO test values(default);
INSERT 0 1
=# SELECT * from test;
  a  
-----
 r11

On peut aussi imaginer au lieu d'une concaténation faire une somme (par exemple numéro_roulotte * 10000000000 + sequence).


Marc.

Hors ligne

#4 15/11/2011 16:07:35

baradji
Membre

Re : Utilisation de clés primaires dans plusieurs bases de donnees

Salut,
J'ai testé la methode de Gleu hier sur des tables, ca semble aller, mais le probleme se situe sur les cles etrangers ou il ya assez de redondances de id_roulotte.
je vais aussi tester le methode de Marc qui me semble aussi interessant et qui est proche de ma solution que j'ai proposé.

Hors ligne

Pied de page des forums