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.