Création de keys numériques basées sur des noms d'objects uniques dans une database sur plusieurs systèmes?

J'ai une database qui utilise des keys de text uniques pour relier entre les objects. Par exemple, lorsque les users sont insérés, ils sont insérés avec la key de text "{date} – {système} – {user}" où chaque élément de la key est alphanumérique. Ceci est ensuite vérifié par rapport à une table de search pour voir si elle existe, sinon elle est insérée dans une table et une key d'entier auto-incrémentée est créée. Sinon, la même key entière est réutilisée.

Ensuite, si un atsortingbut unique de cet user est inséré, il est mis en correspondance et affecté à la key numérique de l'user en tant que key étrangère. Par exemple, un document unique à cet user est inséré avec une key d'user "{date} – {système} – {user}" et une key de text unique pour le document "{date} – {system} – {user- {document } "à partir de laquelle une key entière est générée.

De cette façon, il existe une key numérique associant ces deux inputs et le document possède une key unique pour y attacher des attributes. Ceux-ci sont utilisés dans diverses requêtes.

Le problème est que les keys, bien sûr, ne sont pas les mêmes d'un système à l'autre, selon la manière et le moment où les éléments ont été insérés. Donc, ma première pensée était d'utiliser un hash comme key générée, mais int et bigint sont assez limités, je pense.

Je ne sais pas comment le server SQL va gérer de longues strings de hachage pour les foreign keys, j'ai lu qu'il ne le fait pas bien en termes de performances. Sinon, je pourrais juste utiliser le text qui crée la key elle-même.

Comment voulez-vous vous assurer que les keys int, bigint ou ssortingng (si plausibles) sont uniques sur tous les systèmes, en supposant que la key de text est unique? Un hachage? Un GUID? Comment les collisions de hachage pourraient-elles être traitées si une key binary bigint (63 bits?) Était utilisée, voire pas du tout?

Merci!

John, vous pourriez, si possible, repenser l'architecture de votre key, car c'est la situation idéale pour utiliser un GUID pour une key. De cette façon, vous pouvez générer la key unique pour n'importe quel user sur n'importe quel système et être 99.999999999999 …….% garanti qu'il n'y aura pas d'affrontements. Et ce n'est que 16 octets aussi. Vous pouvez toujours conserver votre structure de key existante sous la forme d'une autre colonne, mais uniquement à d'autres fins, pour ne pas identifier ou rendre unique un logging. Ce que je suggère ne sera que le cas si votre application utilise cette information pour effectuer certaines tâches, sinon, se débarrasser complètement.

La bonne chose à propos de l'utilisation d'un GUID comme une key dans ce scénario, c'est qu'il est indépendant de la plate-forme, à savoir. vous pouvez l'utiliser sur Oracle, SQL Server, Unix, Windows ….