Je migre une database MS Access backend vers SQL Server. Le client frontal restra pour le moment une application Access (environ 30k lignes de code).
L'objective est de permettre éventuellement la synchronisation de la database sur plusieurs servers (sans utiliser la réplication, mais probablement le framework de synchronisation).
Actuellement, toutes les keys primaires dans les tables Access sont des substituts d'entiers auto-incrémentés.
Je ne parle pas du process de migration, mais de savoir si je devrais utiliser GUID ou une autre codification pour le PK (je sais que je pourrais split la plage de numéros sur les servers, mais je ne veux pas faire cela et permettre au PK d'être créé sur le client si nécessaire, par exemple en mode hors ligne).
GUID
Pro:
Les inconvénients:
Schéma de codification personnalisé
Je pensais que peut-être un schéma utilisant un code plus uniforme comme PK éviterait la pénalité de performance et, surtout, assurerait que le PK rest utilisable dans les controls de formulaire si nécessaire (et ne nécessite pas ces conversions vers / de string).
Mon idée d'un schéma de codification serait le long d'un code de 10 caractères divisé en:
O
, 0
, 1
, I
raison de leur similitude (au cas où nous aurions besoin de manipuler manuellement ces PK, par exemple pendant le debugging). Pro:
Les inconvénients:
Donc, devrais-je utiliser GUID ou un autre schéma pour mon PK?
pas facile à manipuler dans Access, surtout quand on les utilise comme filters pour les sous-formulaires ou dans les controls.
-> Access a GUID comme Number-> Replication Identificator. Nous avons une application dans Access avec chaque PK comme GUID et nous n'avons aucun problème avec les filters (et avec les filters pour les sous-images aussi).
dégrader les performances INSERT en raison de leur caractère random.
-> Si vous avez un problème de performance basé sur ceci, vous pouvez avoir un index de cluster sur une autre colonne (horodatage par exemple). Mais le server MSSQL a deux fonctions pour générer de nouvelles valeurs GUID – "newid ()" et "newsequenceid ()". Les deuxièmes methods – comme son nom l'indique – génèrent de nouvelles valeurs en séquence, de sorte que le problème de performance d'insertion ne doit pas se produire.
a plus d'une représentation: string, forme canonique, binary qui doit être converti.
-> son "PRO" à mes yeux :). Mais pour les users-développeurs et les users-admins est dans Access et MSSQL représenté et consommé sous forme de string ..
Le GUID est dans le kernel "seulement" le nombre 128bit. Je ne pense pas que vous devriez vous soucier de l'efectivité des JOINs sur les colonnes GUID. Les colonnes GUID de jointure sont beaucoup plus efficaces que les conditions sur les colonnes de text par exemple.
Je ne fais pas de hink Le schéma de codification Custom est une bonne idée, car vous devez résoudre beaucoup de choses. D'autre part, le GUID est utilisé de manière standard et les outils sont prêts à l'utiliser.
Combien de dossiers prévoyez-vous? Bigint n'est-il pas assez gros? Jusqu'à 9,223,372,036,854,775,807 loggings (si vous n'incluez pas les négatifs)
Si c'est seulement pour les insertions, et pas de sélections sur datatables, optez pour n'importe quel schéma, (je dirais toujours bigint ou GUID / uniqueidentifier). Si vous avez besoin de faire des sélections, un int, ou bigint est beaucoup plus rapide que GUID ou tout autre PK personnalisé.