Published on

December 16, 2022

Compreendendo Árvores no SQL Server

As listas de funcionários em organizações são frequentemente mantidas em planilhas ou tabelas de banco de dados que registram o número, nome, cargo e assim por diante de cada funcionário. No entanto, consultar e analisar os relacionamentos entre os funcionários pode ser desafiador com essas tabelas. Neste artigo, exploraremos como representar e consultar dados hierárquicos usando o conceito de árvores no SQL Server.

O que é uma Árvore?

Na ciência da computação, uma árvore é um tipo de grafo onde existe um caminho único entre dois nós. No contexto do SQL Server, uma árvore pode ser representada usando uma relação pai-filho entre registros em uma tabela. Cada registro tem um registro pai, exceto pelo nó superior que tem um pai NULL. Essa estrutura hierárquica nos permite organizar e analisar dados de maneira semelhante a uma árvore.

Representando uma Árvore no SQL Server

Para representar uma árvore no SQL Server, podemos usar uma tabela com colunas como NodeId, Node e ParentId. A coluna NodeId serve como um identificador único para cada nó, a coluna Node armazena os dados associados a cada nó e a coluna ParentId estabelece a relação pai-filho entre os nós.

Por exemplo, vamos considerar uma tabela chamada “Funcionário” com colunas “IdFuncionario”, “Nome” e “IdGerente”. A coluna “IdGerente” faz referência ao “IdFuncionario” do gerente de cada funcionário. Ao consultar essa tabela, podemos construir uma estrutura semelhante a uma árvore que representa a hierarquia organizacional.

Consultando uma Árvore no SQL Server

Uma vez que tenhamos representado uma árvore no SQL Server, podemos realizar várias consultas e análises nos dados hierárquicos. Por exemplo, podemos recuperar todos os funcionários que trabalham sob um determinado gerente, direta ou indiretamente, percorrendo a árvore a partir do nó do gerente.

Além disso, podemos calcular métricas como a proporção de funcionários para relatórios diretos para gerentes em diferentes níveis da hierarquia. Isso pode ser alcançado utilizando as propriedades de profundidade e altura de cada nó na árvore.

Código de Exemplo

Aqui está um trecho de código de exemplo que demonstra como representar e consultar uma árvore no SQL Server:

CREATE TABLE Funcionario (
    IdFuncionario INT PRIMARY KEY,
    Nome VARCHAR(50),
    IdGerente INT REFERENCES Funcionario(IdFuncionario)
);

-- Consultar todos os funcionários sob um determinado gerente
WITH HierarquiaFuncionario AS (
    SELECT IdFuncionario, Nome, IdGerente, 0 AS Nivel
    FROM Funcionario
    WHERE IdFuncionario = @IdGerente
    UNION ALL
    SELECT f.IdFuncionario, f.Nome, f.IdGerente, hf.Nivel + 1
    FROM Funcionario f
    INNER JOIN HierarquiaFuncionario hf ON f.IdGerente = hf.IdFuncionario
)
SELECT IdFuncionario, Nome, Nivel
FROM HierarquiaFuncionario;

-- Calcular a proporção de funcionários para relatórios diretos para gerentes em diferentes níveis
WITH MetricasFuncionario AS (
    SELECT f.IdFuncionario, f.Nome, COUNT(d.IdFuncionario) AS RelatoriosDiretos
    FROM Funcionario f
    LEFT JOIN Funcionario d ON f.IdFuncionario = d.IdGerente
    GROUP BY f.IdFuncionario, f.Nome
)
SELECT f.IdFuncionario, f.Nome, f.RelatoriosDiretos, f.RelatoriosDiretos / (m.RelatoriosDiretos + 1) AS Proporcao
FROM MetricasFuncionario f
INNER JOIN MetricasFuncionario m ON f.IdFuncionario = m.IdFuncionario - 1;

Ao utilizar expressões de tabela comuns (CTEs) e consultas recursivas, podemos percorrer facilmente a árvore e realizar análises complexas nos dados hierárquicos.

Conclusão

Árvores são um conceito poderoso no SQL Server que nos permite representar e consultar dados hierárquicos. Ao entender como representar uma árvore em uma tabela e utilizar consultas recursivas, podemos realizar várias análises nos dados hierárquicos. Seja analisando hierarquias organizacionais ou representando outros tipos de relacionamentos hierárquicos, as árvores fornecem uma solução flexível e eficiente no SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.