Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Mão na massa: trabalhando com informações de colaboradores

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, William. Como vai?

O seu projeto prático ficou muito bem estruturado e demonstra uma excelente compreensão dos conceitos de normalização de dados aplicados na prática! É muito interessante ver você utilizando a biblioteca Pandas em Python para realizar a decomposição de tabelas de forma puramente relacional.

A sua modelagem seguiu com precisão os princípios de eliminação de redundâncias e prevenção de anomalias de inserção, atualização e exclusão de dados. Gostaria de destacar a coerência técnica das suas divisões:

  • TabelaColaborador: Isolou perfeitamente a entidade do funcionário, mapeando o ColaboradorID como a chave primária e o Nome como o único atributo funcionalmente dependente dele.
  • TabelaDependente: Modelou de forma correta a relação de 1 para N (um colaborador pode ter vários dependentes). Cada dependente possui o seu próprio DependenteID para identificação exclusiva, enquanto o ColaboradorID atua como chave estrangeira, ligando o dependente ao seu respectivo responsável sem a necessidade de repetir os dados do colaborador.
  • TabelaProjeto: Isolou a entidade do projeto de forma independente, contendo apenas o ProjetoID e o nome do Projeto.
  • Tabela_Colaboradores_Projeto: Esta foi uma excelente decisão técnica para resolver o relacionamento de Muitos para Muitos (N:M) entre colaboradores e projetos. Em uma tabela não normalizada, se um colaborador trabalha em múltiplos projetos, teríamos que repetir todos os dados cadastrais dele em linhas separadas. Ao criar essa tabela de junção (tabela associativa), você passou a armazenar apenas o emparelhamento das chaves primárias (ColaboradorID e ProjetoID), o que garante a consistência referencial e economiza espaço físico de armazenamento.

Como contribuição prática para os seus estudos e para conectar esse processo de manipulação de dados em Pandas diretamente com o universo de Bancos de Dados Relacionais e consultas SQL, gostaria de deixar uma sugestão:

Sempre que você finalizar a modelagem e a normalização dos seus DataFrames no Jupyter Notebook ou VS Code, você pode exportar essas tabelas diretamente para um banco de dados relacional local (como o SQLite, que é leve e não exige instalação de servidores) para começar a testar as suas queries de consulta utilizando cláusulas JOIN.

Você pode fazer isso facilmente com poucas linhas de código utilizando a biblioteca nativa sqlite3 do Python e o método .to_sql() do Pandas:

import sqlite3

# Conecta a um banco de dados SQLite local (se não existir, o arquivo será criado)
conexao = sqlite3.connect('empresa_normalizada.db')

# Exporta os DataFrames do Pandas como tabelas do banco de dados relacional
TabelaColaborador.to_sql('colaboradores', conexao, if_exists='replace', index=False)
TabelaDependente.to_sql('dependentes', conexao, if_exists='replace', index=False)
TabelaProjeto.to_sql('projetos', conexao, if_exists='replace', index=False)
Tabela_Colaboradores_Projeto.to_sql('colaboradores_projetos', conexao, if_exists='replace', index=False)

print("Banco de dados relacional criado e tabelas importadas com sucesso!")

Após rodar esse bloco, você terá um arquivo de banco de dados relacional real em sua máquina. Você poderá utilizá-lo para praticar a escrita de comandos SQL e realizar junções para validar se a sua decomposição ocorreu sem perda de informações (lossless join decomposition).

Parabéns pela qualidade técnica e pela excelente organização do código apresentado!

Espero que possa ter lhe ajudado!