Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 2011
-
30 mai 2005 à 10:05
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 2011
-
31 mai 2005 à 09:16
Salut tout le monde,
voila ne souhaitant plus utiliser les compteurs auto-incrementer pour mes primary key (car je souhaite pouvoir intégrer dans une même BDD les Bdds de différents site et donc pour éviter les pbs de synchronisation..), je voudrais utiliser les GUID (ou unique identifier)
Seulement voila les choses que j'ai vue disais qu'il fallait générer au niveau programme le guid et faire l'insert avec le guid générer.
Moi je souhaiterais une solution plus simple, cad que la BDD ce charge de générer le guid (comme elle le fait pour les compteurs autoincrementer), la chose est -elle possible ???
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 201114 30 mai 2005 à 12:10
moui et non
cette méthode permettrait effectivement que cela fonctionne un temps...
mais il y arrivera forcement un jour ou le compteur d'un des sites arrivera au niveau du compteur d'un autre site...je pense notamanet à une gestion des mouvements de stocks qui est enormenent solicite de maniere journaliere...
et la c la cata...
après reflexion, je pense que nous allons gérer X base de données bien séparés avec réplication sur les différents sites et remontés d'infos , etc...
la chose semble plus pratique et ainsi nous eviterons les pb de synchro de BDD, et ou d'optimisation sans monter une usine pour mettre en place les guid :o)
Le probleme de la synchrosation est que la procédure stockée
si la synchro est faite par la meme procedure stockée -->
deux appels a newid() --> enregistrements différents.
Si tu compares les bases et que tes ordres insert de synchro ont les memes UID
tu n'auras pas de problemes.
Le deuxieme probleme, est surtout que si tu enregistres un ensemble
d'enregistrements il faut aller en base pour retrouver les valeurs des
GUID inserés.
Ex. pour les tables pointants sur elles meme comme les arbres.
C'est à toi de voir.
Soit tu mets les GUID dans les procs stocks et la les perf sont nmoindres, sinon
dans le programme et la le nombre de requetes peut etre optimale.
shaiulud
Messages postés404Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention15 juillet 201422 30 mai 2005 à 11:51
Il ne me semble pas possible de le faire nativement.
En effet que se soit MySQL, SQL Server, Oracle, Sybase, PostgreSQL, Access.
Le clé autoincrémentale ou séquence sont de la forme (valeur max+1).
de plus l'utilisation d'un identifiant "unique" généré doit être fait avec une méthode qui garantisse bien l'unicité de la clé (càd sans collision) sous peine d'avoir une clé en double.
Peut être devrai tu revoir tes séquences pour définir une valeur de départ pour chaque base afin de ne pas avoir de doublon. (propriété IDENTITY(nbDepart, 1))
par ex:
ALTER TABLE nomTable ADD
column_b INT IDENTITY(10000, 1)
CONSTRAINT column_b_pk PRIMARY KEY
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 201114 31 mai 2005 à 09:16
ok merci je vais explorer cette voie :o)
et tester ce newid..
rine ne m'empeche de faire 2 procedure stockee, une pour l'utilisation "courante" qui fait appel a la fonction newid() et une pour la synchro qui prend les données tel quel et roule..