Il y a un débat de longue haleine ici, alors j'aimerais entendre d'autres opinions.
J'ai de nombreuses tables avec PK en cluster uniqueidentifier. Que ce soit une bonne idée est hors de portée ici (et cela ne changera pas de sitôt).
Maintenant, la base de données doit être publiée par fusion et les DEV préconisent l'utilisation d'une colonne distincte de rowguid au lieu de marquer le PK existant comme ROWGUIDCOL.
Fondamentalement, ils disent que l'application ne doit jamais introduire dans son domaine quelque chose qui est utilisé uniquement par la réplication (ce n'est que du "DBA stuff" pour eux).
Du point de vue des performances, je ne vois aucune raison pour laquelle je devrais ajouter une nouvelle colonne pour faire quelque chose que je pourrais faire avec une colonne existante. De plus, comme il ne s'agit que de "trucs DBA", pourquoi ne pas laisser le DBA choisir?
Je comprends en quelque sorte le point des DEV, mais je ne suis toujours pas d'accord.
Pensées?
EDIT: Je veux juste ajouter que je suis minoritaire dans ce débat et que les DEV qui remettent en question ma position sont des gens que je respecte et en qui j'ai confiance. C'est la raison pour laquelle j'ai eu recours à des avis.
Il se peut aussi que je manque quelque chose et que j'aie mal compris leur point.
la source
Réponses:
Je suis complètement d'accord. Mais ... la clé primaire n'est pas seulement utilisée pour la réplication (probablement l'application l'utilise d' une manière ou d' une autre). L'argument n'a aucun sens dans ce contexte.
Dans tous les cas, à ma connaissance, il n'y a que 2 façons pour que ce "truc DBA" franchisse la limite du domaine:
Si l'application utilise des requêtes qui référencent la
ROWGUIDCOL
colonne comme ceci:Je suppose qu'aucune de vos colonnes n'a encore cette propriété, donc l'application ne le ferait pas. (Soit dit en passant,
ROWGUIDCOL
est un concept complètement distinct de la réplication. Il se trouve que la réplication de fusion l'utilise.)La colonne de clé primaire ne serait plus modifiable. Si l'application fait cela et qu'aucune modification ne sera apportée pour utiliser un autre algorithme, il n'y a pas d' autre choix que d'ajouter une nouvelle colonne à la table, et donc aucune discussion n'est nécessaire.
Outre ces comportements, la
ROWGUIDCOL
propriété est complètement transparente. Vous pouvez l'ajouter et l'application ne le saura jamais. Tout type de scénario de réplication de données doit être aussi transparent que possible pour les applications.la source
ROWGUIDCOL
dans ce contexte (c'est-à-dire pas dans une instructionCREATE TABLE
/ALTER TABLE
) est déconseillée depuis au moins SQL Server 2008 R2 (recherche de FeatureID 182) en faveur de$ROWGUID
.Je suis d'accord. Tant qu'il n'est pas nécessaire que la valeur PK puisse changer, il serait préférable d'utiliser la colonne uniqueidentifier existante comme rowguidcol.
la source
"Fondamentalement, ils disent que l'application ne doit jamais introduire dans son domaine quelque chose qui est utilisé uniquement par la réplication (c'est seulement" des trucs DBA "pour eux)."
Mais il n'est pas utilisé uniquement pour la réplication. C'est aussi (et déjà) votre PK.
la source