Há um longo debate aqui, então eu gostaria de ouvir outras opiniões.
Eu tenho muitas tabelas com PK em cluster uniqueidentifier. Se essa é uma boa ideia, está fora do escopo aqui (e não vai mudar tão cedo).
Agora, o banco de dados precisa ser publicado por mesclagem e os DEVs estão defendendo o uso de uma coluna de guia de linha separada em vez de marcar a PK existente como ROWGUIDCOL.
Basicamente, eles dizem que o aplicativo nunca deve trazer para o seu domínio algo que é usado apenas por replicação (são apenas "coisas de DBA" para eles).
Do ponto de vista do desempenho, não vejo razão para adicionar uma nova coluna para fazer algo que eu poderia fazer com uma existente. Além disso, como são apenas "coisas do DBA", por que não deixar o DBA escolher?
Eu meio que entendo o ponto dos DEVs, mas ainda discordo.
Pensamentos?
EDIT: Quero apenas acrescentar que sou minoria neste debate e os DEVs que questionam minha posição são pessoas que eu respeito e confio. Esta é a razão pela qual recorri a pedir opiniões.
Também posso estar faltando alguma coisa e ter entendido mal o que eles querem dizer.
fonte
Respostas:
Eu concordo completamente. Mas ... a chave primária não é usada apenas para replicação (presumivelmente o aplicativo a usa de alguma maneira). O argumento não faz sentido neste contexto.
De qualquer forma, até onde sei, existem apenas duas maneiras para esse "material DBA" ultrapassar o limite do domínio:
Se o aplicativo estiver usando consultas que referenciam a
ROWGUIDCOL
coluna assim:Suponho que nenhuma de suas colunas ainda tenha essa propriedade, portanto o aplicativo não faria isso. (A propósito,
ROWGUIDCOL
é um conceito completamente separado da replicação. Acontece que a replicação de mesclagem o usa.)A coluna da chave primária não seria mais atualizável. Se o aplicativo estiver fazendo isso e as alterações não forem feitas para usar outro algoritmo, não há escolha a não ser adicionar uma nova coluna à tabela e, portanto, nenhuma discussão é necessária.
Além desses comportamentos, a
ROWGUIDCOL
propriedade é completamente transparente. Você pode adicioná-lo e o aplicativo nunca saberia. Qualquer tipo de cenário de replicação de dados deve ser o mais transparente possível para os aplicativos.fonte
ROWGUIDCOL
desse contexto (ou seja, não em uma declaraçãoCREATE TABLE
/ALTER TABLE
) foi preterido desde pelo menos o SQL Server 2008 R2 (procure o FeatureID 182) a favor de$ROWGUID
.Concordo. Desde que não seja necessário alterar o valor de PK, seria melhor usar a coluna uniqueidentifier existente como o rowguidcol.
fonte
"Basicamente, eles dizem que o aplicativo nunca deve trazer para o seu domínio algo que é usado apenas por replicação (são apenas" coisas de DBA "para eles)."
Mas não é usado apenas para replicação. É também (e já) o seu PK.
fonte