Je pondère mes options pour les clés primaires entières pouvant être utilisées dans la réplication multi-maître. (Je suis vendu à l'aide de clés entières au lieu de GUID)clé primaire entière pour la réplication
Le meilleur que je peux trouver est d'avoir les données les plus significatives en premier et ayant le dernier numéro de serveur: par exemple. facture 1 sur le serveur 1 = 101 facture 1 sur le serveur 2 = 102 où la partie non serverno (de InvoiceNo) provient d'un numéro de db générateur
algorithmiquement: gen_id (INVOICENO_GEN, 1) * 100 + serverno et vous pouvez obtenir le numéro de serveur en regardant à la fois la valeur et mathématiquement.
Ce qui laisse de la place pour 99 serveurs tout en restant court et lisible et n'entrera pas en collision. L'utilisation de ce schéma et de la colonne de taille entière normale ferait les lignes max (21 474 836) ou si bigint est utilisé plusieurs milliards.
par exemple les clés de table de la facture se présente comme suit:
Server 1
101
201
301
401
Server 2
102
202
302
402
Donc, ma question est la suivante: toutes les critiques ou les défauts que j'ai oublié?
La base de données est Firebird.
Je ne voudrais pas introduire une clé composite pour cela. Pour un, les clés composites sont un PITA à traiter, et il ne semble pas qu'il s'intéresse réellement à la mise en relation de ces données en fonction des informations supplémentaires. –
La plupart de notre code et les bibliothèques que nous utilisons sont optimisés pour une utilisation avec une seule clé primaire. Donc, une clé primaire composite est la "bonne" réponse du point de vue de la base de données, mais pas du point de vue du développement. – AngelBlaZe
juste pour clarifier nous aurons une colonne serverno aussi bien à des fins d'interrogation. Nous n'avons pas de colonne invoiceno (sans le serverno) car c'est ce que nous voulons imprimer sur les factures, les recherches, etc. – AngelBlaZe