Compartilhar via


referência de método do tipo de dados hierarchyid

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

O tipo de dados hierarchyid é um tipo de dados do sistema de tamanho variável. Use hierarchyid para representar posição em uma hierarquia. Uma coluna de tipo hierarchyid não representa automaticamente uma árvore. Cabe ao aplicativo gerar e atribuir valores hierarchyid de forma que a relação desejada entre linhas seja refletida nos valores.

Um valor do tipo de dados hierarchyid representa uma posição em uma hierarquia de árvore. Os valores para hierarchyid têm as seguintes propriedades:

  • Extremamente compacto: o número médio de bits necessários para representar um nó em uma árvore com n nós depende do fanout médio (o número médio de filhos de um nó). Para pequenos fanouts (0-7), o tamanho é de cerca de 6 * logA n bits, onde A é o fanout médio. Um nó em uma hierarquia organizacional de 100.000 pessoas com um fanout médio de seis níveis leva cerca de 38 bits. Isso é arredondado para 40 bits, ou 5 bytes, para armazenamento.

  • A comparação está em ordem de profundidade primeiro: dado dois valores hierárquicosa e b, a<b significa um vem antes de b em uma passagem de profundidade primeiro da árvore. Índices em tipos de dados hierarchyid estão na ordem de profundidade e os nós próximos uns dos outros em uma passagem de profundidade são armazenados próximos um ao outro. Por exemplo, os filhos de um registro são armazenados adjacentes àquele registro. Para obter mais informações, consulte dados hierárquicos (SQL Server).

  • Suporte para inserções e exclusões arbitrárias: usando o método GetDescendant , é sempre possível gerar um irmão à direita de qualquer nó determinado, à esquerda de qualquer nó determinado ou entre dois irmãos. A propriedade de comparação é mantida quando um número arbitrário de nós é inserido ou excluído da hierarquia. A maioria das inserções e exclusões preserva a propriedade de densidade. No entanto, as inserções entre dois nós produzem valores hierárquicos com uma representação um pouco menos compacta.

  • A codificação é limitada a 892 bytes: Portanto, nós que têm muitos níveis em sua representação para caber em 892 bytes não podem ser representados pelo tipo hierarchyid .

O tipo hierarchyid está disponível para clientes CLR (Common Language Runtime) como o SqlHierarchyId tipo de dados.

Remarks

O tipo hierarchyid logicamente codifica informações sobre um único nó em uma árvore hierárquica codificando o caminho da raiz da árvore ao nó. Esse caminho é representado logicamente como uma sequência de rótulos de nós de todos os filhos visitados depois da raiz. Uma barra inicia a representação e um caminho que visita apenas a raiz é representado por uma barra única. Para níveis abaixo da raiz, cada rótulo é codificado como uma sequência de inteiros separados por pontos.

A comparação entre filhos é executada comparando-se as sequências de inteiros separados por pontos na ordem alfabética. Cada nível é seguido por uma barra. Portanto, uma barra separa os pais de seus filhos. Por exemplo, são caminhos de hierarchyid válidos, respectivamente, de tamanhos 1, 2, 2, 3 e 3 níveis:

  • /
  • /1/
  • /0.3.-7/
  • /1/3/
  • /0.1/0.2/

Podem ser inseridos nós em qualquer local. Nós inseridos depois /1/2/ , mas antes /1/3/ podem ser representados como /1/2.5/. Os nós inseridos antes 0 têm a representação lógica como um número negativo. Por exemplo, um nó que vem antes /1/1/ pode ser representado como /1/-1/. Nós não podem ter zeros à esquerda. Por exemplo, /1/1.1/ é válido, mas /1/1.01/ não é válido. Para evitar erros, insira nós usando o método GetDescendant.

Conversão de tipo de dados

O tipo de dados hierarchyid pode ser convertido em outros tipos de dados, da seguinte maneira:

Atualizar bancos de dados

Quando um banco de dados é atualizado para uma versão mais recente do SQL Server, o novo assembly e o tipo de dados hierarchyid são instalados automaticamente. Regras do supervisor de atualização detectam qualquer tipo de usuário ou assemblies com nomes conflitantes. O supervisor de atualização aconselha renomear qualquer assembly conflitante e renomear qualquer tipo conflitante ou usar nomes de duas partes no código para se referir a esse tipo de usuário pré-existente.

Se uma atualização de banco de dados detectar um assembly de usuário com nome conflitante, ele renomeará automaticamente esse assembly e colocará o banco de dados no modo suspeito.

Se um tipo de usuário com nome conflitante existir durante a atualização, nenhuma etapa especial será efetuada. Após a atualização, o tipo de usuário antigo e o novo tipo de sistema existem. O tipo de usuário só está disponível por meio de nomes de duas partes.

Usar colunas hierarchyid em tabelas replicadas

Podem ser usadas colunas do tipo hierarchyid em qualquer tabela replicada. Os requisitos para seu aplicativo dependem de a replicação ser unidirecional ou bidirecional e das versões de SQL Server utilizadas.

Replicação unidirecional

A replicação unidirecional inclui replicação de instantâneo, replicação transacional e replicação de mesclagem na qual as alterações não são feitas no Assinante. O modo de funcionamento das colunas hierachyid com a replicação unidirecional depende da versão do SQL Server executada pelo Assinante.

  • Um Editor do SQL Server pode replicar colunas hierachyid para um Assinante do SQL Server da mesma versão sem considerações especiais.

  • Um Publicador do SQL Server deve converter colunas hierarchyid para replicá-las em um Assinante que esteja executando o SQL Server Compact ou uma versão anterior do SQL Server. O SQL Server Compact e versões anteriores do SQL Server não dão suporte a colunas hierarchyid . Se você estiver usando uma dessas versões, ainda poderá replicar dados para um Assinante. Para tanto, você deve definir uma opção de esquema ou o nível de compatibilidade de publicação (para replicação de mesclagem) a que a coluna pode ser convertida para um tipo de dados compatível.

Em ambos os cenários há suporte a filtragem de colunas. Isso inclui a filtragem de colunas hierarchyid. Há suporte para filtragem de linha, desde que o filtro não inclua uma coluna hierarchyid .

Replicação bidirecional

Replicação bidirecional inclui replicação transacional com assinaturas de atualização, replicação transacional ponto a ponto e replicação de mesclagem, nas quais não são feitas alterações no Assinante. A replicação permite configurar uma tabela com colunas hierarchyid para replicação bidirecional. Observe os requisitos e considerações a seguir.

  • O Publicador e todos os Assinantes devem estar executando a mesma versão, no SQL Server 2016 (13.x) ou em uma versão posterior.

  • A replicação replica os dados como bytes e não executa nenhuma validação para garantir a integridade da hierarquia.

  • A hierarquia das alterações feitas na origem (Assinante ou Publicador) não é mantida quando são replicadas para o destino.

  • Os valores das colunas hierarchyid podem ter representações binárias idênticas em todos os bancos de dados. Conflitos podem ocorrer na replicação bidirecional quando a lógica do aplicativo gera independentemente a mesma hierarquia para entidades diferentes. Portanto, o mesmo valor poderia ser gerado no Editor e Assinante, mas poderia ser aplicado a linhas diferentes. A replicação não verifica essa condição e não há nenhuma maneira interna de particionar valores de coluna hierarchyid como há para IDENTITY colunas. Os aplicativos devem usar restrições ou outros mecanismos para evitar tais conflitos não detectados.

  • É possível que as linhas inseridas no Assinante possam ficar órfãs. A linha pai da linha inserida pode ser excluída no Publicador. Isso resulta em um conflito não detectado quando a linha do Assinante é inserida no Editor.

  • Os filtros de coluna não podem filtrar colunas hierarchyid não anuláveis. As inserções do Assinante falham porque não há nenhum valor padrão para a coluna hierarchyid no Publicador.

  • Há suporte para filtragem de linha, desde que o filtro não inclua uma coluna hierarchyid .