2010-08-16 21 views
0

Je tente de créer un numéro de commande à utiliser par les clients. Je vais avoir plusieurs machines qui n'ont pas accès à la même base de données (donc je ne peux pas utiliser les clés primaires et générer un identifiant unique).Génération de numéros de commande - Etre unique sur plusieurs machines - Graine de chaîne unique

Je vais avoir une chaîne unique que je pourrais utiliser pour une graine pour un algorithme qui va générer un numéro d'identification alphanumérique unique pour le numéro de commande. Je ne veux pas utiliser cette chaîne unique comme numéro de commande car son contenu ne serait pas approprié en apparence pour un client à utiliser pour le numéro de commande.

Serait-il possible de combiner l'utilisation d'un GUID & ma chaîne unique avec un algorithme pour créer un numéro de commande unique? Ouvert à toutes suggestions.

Répondre

1

Si vous avez un nombre relativement petit de machines et que chacun peut avoir son propre fichier de configuration ou réglage, vous pouvez assigner une lettre à chaque machine (A, B, C ...) et ensuite ajouter la lettre sur le numéro de commande, qui pourrait simplement être un entier auto-incrémenté dans chaque DB.

-à-dire

Starting each database ID at 1000: 
1001A // First order on database A 
1001B // First order on database B 
1001C // First order on database C 
1002A // Second order on database A 
1003A // Third order on database A 
1004A // etc... 
1002B 
1002C 

Votre table de commande dans chaque base de données aurait une colonne d'ID (entier) et identifiant "machine" (caractère A, B, C ...) donc au cas où vous aviez besoin de combiner DB en un, chaque commande serait toujours unique.

0

Utilisez simplement un guide droit. Ils prennent en compte l'adresse mac de l'interface réseau pour la rendre unique à cette machine.

http://en.wikipedia.org/wiki/Uuid

0

Vous pouvez utiliser ids et comme une clé primaire si vous générer leur identifiant à partir d'une procédure stockée (ou peut-être dans Oracle en utilisant une séquence).

Ce que vous devez faire est de générer chaque machine dans une plage différente, par ex. machine a de 1 à 1million, machine B de 1000001 à 2000000 etc.

0

Vous dites que vous avez une chaîne unique qui ne serait pas «appropriée» à montrer aux clients.

Si c'est seulement inapproprié et pas nécessaire, c'est-à-dire lié à la sécurité/à la confidentialité, vous pouvez simplement le transformer d'une manière ou d'une autre. Un exemple simple serait Rot13

Mais en général, je suggérerais aussi d'utiliser UUID (mais la version 4) pour les nombres aléatoires. La probabilité de générer des doublons est extrêmement faible et il existe des bibliothèques pour de nombreux langages de programmation disponibles.