| [Home](home) | [Gerência](gerencia) | [Processo](processo) | [Design/Mockups](design_mockups) | [Configuração](configuracao) | [Arquitetura](arquitetura) | [Código](codigo) | [_Banco de Dados_](banco_dados) | [Utilização](utilizacao) | | :----------: | :------------------: | :------------------: | :------------------------------: | :--------------------------: | :------------------------: | :--------------: | :-----------------------------: | :----------------------: | # Banco de Dados ## Descrição Antes de iniciar a modelagem do banco de dados do projeto, foi realizado um estudo do contexto da equipe e das tecnologias possíveis que poderiam ser utilizadas. Em primeiro lugar, foi feita uma enquete com todos os integrantes do time a respeito de seus conhecimentos técnicos, incluindo conhecimentos sobre banco de dados. Com base nos resultados dessa enquete, percebeu-se que seria mais adequado, quando se tratando da curva de aprendizado, utilizar um banco de dados relacional, uma vez que este tipo de tecnologia é algo abordado nas disciplinas do curso de Engenharia de Software. Além disso, durante os encontros síncronos da equipe, foram discutidas as duas possibilidades de banco de dados (relacional e não-relacional), e a equipe chegou à conclusão de que o modelo relacional seria o ideal para este projeto, tendo em vista que existem muitas relações diretas entre as entidades e que os dados não se repetem com frequência. Assim, optou-se por utilizar o PostgreSQL, pois este é um banco de simples utilização e para o qual existe bastante material didático disponível. ## Sumário - [Modelagem](#modelagem) - [Esquema Conceitual](#esquema-conceitual) - [Esquema Lógico](#esquema-lógico) - [Implementação](#implementação) - [Knex](#knex) ## Modelagem ### Esquema Conceitual ### Esquema Lógico ## Implementação ### Knex Para a interação com o banco de dados, optou-se por utilizar o Knex como _query builder_, de forma a tornar o código menos dependente de um banco de dados específico e a facilitar as consultas e alterações no esquema do banco de dados. #### _Migrations_ com Knex No projeto são utilizadas _migrations_ para auxiliar no versionamento das alterações no esquema do banco de dados que são feitas. Para cada uma dessas alterações (ex.: criação de nova tabela ou inserção em um tabela), deve ser criado um arquivo de _migration_ a partir de um dos comandos abaixo: ```sh npx knex migrate:make nome_da_migration -x ts ``` Neste arquivo, estarão criados por padrão dois métodos vazios: _up_ e _down_. O método _up_ é executado para aplicar esta atualização no esquema do banco, enquanto o método _down_ é executado para desfazer esta atualização, retornando para uma versão anterior do esquema. Assim, seguindo o exemplo da nova tabela, no método _up_ deve ser construída uma sentença para criar esta tabela, enquanto o método _down_ seria utilizado para remover esta tabela. Para atualizar o banco de dados a partir das _migrations_, execute um dos dois comandos abaixo. ```sh npx knex migrate:latest ``` #### Materiais para estudos sobre Knex - - ### Configurando o banco de dados No projeto, a instância PostgreSQL é executada em um container Docker, em um banco de dados chamado "autis". Para criar este container e executar o banco em um ambiente de desenvolvimento (localmente) ou em um ambiente de homologação, bem como para derrubar este container, basta realizar os passos abaixo: - Certificar que você possui o Docker instalado: - Windows: - Linux: - Executar [estes scripts](https://tools.ages.pucrs.br/autis/autis-backend/-/tree/main/scripts) presentes no repositório de Backend. Além disso, para visualizar as tabelas do banco de dados, recomenda-se utilizar um cliente SQL tal como o [DBeaver Community](https://dbeaver.io/download/) ou o [Beekeeper Studio](https://www.beekeeperstudio.io/get) e se conectar ao banco.