Ir para o conteúdo

2. Escolha do Banco de Dados Relacional

Date: 2024-05-21

Status

Aceito

Contexto

O projeto, conforme a Especificação de Requisitos (ERS), necessita de um banco de dados relacional para persistir os dados dos microserviços, começando pelo serviço de Estoque. A escolha de uma tecnologia padrão é crucial para garantir consistência no desenvolvimento, nos testes e no ambiente de produção. As principais alternativas consideradas foram SQL Server, PostgreSQL e SQLite.

Decisão

Adotaremos o SQL Server como o banco de dados relacional padrão para o projeto.

Para o ambiente de desenvolvimento local, a recomendação é executar o SQL Server em um contêiner Docker. Esta abordagem evita a instalação direta no sistema operacional, economiza espaço e garante um ambiente consistente para todos os desenvolvedores. A integração com a aplicação será feita através do provedor Microsoft.EntityFrameworkCore.SqlServer do Entity Framework Core.

Consequências

Positivas:

  • Integração Nativa: Sendo um produto da Microsoft, o SQL Server possui a integração mais fluida e documentada com o ecossistema .NET e o Entity Framework Core.
  • Ferramental Robusto: Desenvolvedores podem usar ferramentas gratuitas e poderosas como o SQL Server Management Studio (SSMS) ou a extensão oficial para Visual Studio Code.
  • Curva de Aprendizado Reduzida: É a escolha mais comum em tutoriais e documentações do .NET, o que facilita a pesquisa e a resolução de problemas para desenvolvedores iniciantes.
  • Alinhamento com o Plano: A decisão se alinha perfeitamente com o plano de ação inicial, que já previa a instalação do pacote Microsoft.EntityFrameworkCore.SqlServer.

Negativas:

  • Acoplamento ao Ecossistema Microsoft: Embora seja possível rodar em outras plataformas via Docker, a solução é menos agnóstica a sistema operacional quando comparada com alternativas como o PostgreSQL.

Alternativas Consideradas:

  • PostgreSQL: Uma alternativa open-source extremamente robusta e com excelente suporte do EF Core. Foi preterida neste momento para simplificar a configuração inicial e maximizar a sinergia com o restante da stack .NET, evitando qualquer atrito adicional para a equipe.
  • SQLite: Considerado muito simplista para o desenvolvimento de uma arquitetura de microserviços que visa simular um ambiente de produção. Seu uso será avaliado futuramente para a execução de testes unitários em memória.