Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Globo Aplausos Wiki Globo Aplausos Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Globo Aplausos
  • Globo Aplausos WikiGlobo Aplausos Wiki
  • Wiki
  • Banco de Dados

Banco de Dados · Changes

Page history
docs: banco de dados authored Sep 04, 2023 by Felipe Freitas Silva's avatar Felipe Freitas Silva
Hide whitespace changes
Inline Side-by-side
Banco-de-Dados.md
View page @ e622bf90
| [Home](home) | [**Escopo**](escopo) | [Processo](processo) | [Design/Mockups](design_mockups) | [Configuração](configuracao) | [Arquitetura](arquitetura) | [Gerência](gerencia) | [Código](codigo) | [BD](Banco de Dados) | [Qualidade](qualidade) | [Frontend](frontend) | [Backend](backend) |
| :----------: | :-------------------------------: | :------------------: | :--------------: | :--------------------------: | :--------------------: | :------------------------: | :--------------: | :---------------: | :--------------------: | :---------------: | :--------------------: |
\ No newline at end of file
| [Home](home) | [Escopo](escopo) | [Processo](processo) | [Design/Mockups](design_mockups) | [Configuração](configuracao) | [Arquitetura](arquitetura) | [Gerência](gerencia) | [Código](codigo) | [**BD**](Banco-de-Dados) | [Qualidade](qualidade) | [Frontend](frontend) | [Backend](backend) |
| :----------: | :-------------------------------: | :------------------: | :--------------: | :--------------------------: | :--------------------: | :------------------------: | :--------------: | :---------------: | :--------------------: | :---------------: | :--------------------: |
![Static Badge](https://img.shields.io/badge/Banco_de_dados-Relacional-blue)
[![MySQL](https://shields.io/badge/MySQL-lightgrey?logo=mysql&logoColor=white&labelColor=blue)](https://www.mysql.com/)
- [Descrição](#descrição)
- [Modelo e provedor escolhido (MySQL)](#modelo-e-provedor-escolhido-mysql)
- [Diagrama do Banco de Dados](#diagrama-do-banco-de-dados)
- [Configuração do Prisma](#configuração-do-prisma)
- [Utilização do Prisma](#utilização-do-prisma)
- [Arquivos e pastas no diretório prisma/](#arquivos-e-pastas-no-diretório-prisma)
- [Comandos úteis (definidos no *package.json*):](#comandos-úteis-definidos-no-packagejson)
- [Outros](#outros)
## Descrição
Esta seção da documentação visa apresentar o banco de dados utilizado no projeto, bem como sua configuração e utilização. O banco de dados utilizado no projeto é o [MySQL](https://mysql.com), e o ORM utilizado para a conexão com o banco de dados é o [Prisma](https://prisma.io). O banco de dados é utilizado para armazenar os dados da aplicação, como usuários, projetos, tarefas, etc.
## Modelo e provedor escolhido (MySQL)
O modelo de banco de dados escolhido para o projeto foi o relacional, devido a sua simplicidade e facilidade de implementação. Ainda, o modelo relacional é o modelo mais utilizado atualmente, e é o modelo que a equipe possui mais experiência e conhecimento.
Após definido o modelo, foi necessário escolher o provedor de banco de dados que seria utilizado e, sem muita discussão, optou-se por utilizar o MySQL ao invés de, por exemplo. Ele é um dos bancos de dados mais utilizados atualmente, e é também um dos bancos de dados mais utilizados pela equipe, o que facilita a manutenção e o desenvolvimento do projeto.
## Diagrama do Banco de Dados
![Relational MySQL Schema](uploads/schema.png)
## Configuração do Prisma
Para melhor manutenção do banco de dados e de seus componentes, optou-se por utilizar o [**Prisma**](https://www.prisma.io/) como ORM (Object Relational Mapping) para o projeto. O Prisma é uma ferramenta que permite a criação de um banco de dados através de um schema, e a partir deste schema, o Prisma gera um cliente que pode ser utilizado para realizar as operações de CRUD no banco de dados.
Para fazer a instalação inicial do prisma, é necessário rodar o seguinte comando no terminal do backend do projeto:
```
npm install @prisma/cli --save-dev
```
Após a instalação, é necessário rodar o seguinte comando para inicializar o prisma no projeto:
```
npx prisma init
```
Este comando irá criar uma pasta chamada prisma, com um arquivo chamado schema.prisma, que será o arquivo que irá conter o schema do banco de dados. O schema do banco de dados é definido através de um modelo de dados, que é uma linguagem declarativa própria do Prisma. É neste arquivo que iremos definir as tabelas do banco de dados, bem como seus atributos, relacionamentos e, principalmente, a conexão com o banco de dados e o provedor de banco de dados que será utilizado.
Para definir a conexão com o banco de dados, é necessário definir a url de conexão com o banco de dados no arquivo schema.prisma, na variável `DATABASE_URL`. Esta variável é definida no arquivo `.env`, que deve ser criado na raiz do projeto.
```prisma
// file: schema.prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
```
O arquivo `.env` deve seguir a estrutura do arquivo `.env.example`, e deve conter a url de conexão com o banco de dados, que deve seguir o seguinte padrão:
```
mysql://<user>:<password>@host:port/schema_name
```
Por exemplo:
```
mysql://root:senha@localhost:3306/globoaplausos
```
Após definida a URL de conexão e montado o schema no arquivo schema.prisma, é necessário rodar o seguinte comando para que o Prisma crie as tabelas no banco de dados:
```
npx prisma migrate dev --name init
```
Para criar também os usuários e outros componentes "padrão" da aplicação há um arquivo que contém os dados que serão inseridos no banco de dados. O arquivo de seed do projeto é o `seed.ts`, que está localizado na pasta `prisma/seed.ts`, e pode ser executado através do comando:
```
npx prisma db seed --preview-feature
```
Após a execução do comando, o Prisma irá inserir os dados no banco de dados, e o banco de dados estará pronto para ser utilizado.
## Utilização do Prisma
### Arquivos e pastas no diretório prisma/
- `migrations`: Esta pasta contém as migrações do banco de dados. Saiba mais sobre elas na documentação: https://pris.ly/d/understanding-migrations
- `*/migration.sql`: Este arquivo contém as instruções SQL que são executadas quando você executa a migração.
- `migration_lock.toml`: Este arquivo contém o estado da migração. Não deve ser editado manualmente.
- `schema.prisma`: Este arquivo contém o seu schema. Saiba mais sobre ele na documentação: https://pris.ly/d/prisma-schema
- `seed.ts`: Este arquivo contém o script que preenche o banco de dados com dados. Você pode executá-lo executando `npm run prisma:update`
### Comandos úteis (definidos no *package.json*):
Depois de editar o arquivo schema.prisma, você precisa atualizar a biblioteca Prisma Client
```sh
npm run prisma:format
```
Se houveram mudanças no schema.prisma, você precisa gerar uma nova migração:
```sh
npm run prisma:update
```
Se você quiser conferir que a migração está correta, você pode utilizar o Prisma Studio, que é uma ferramenta que permite visualizar e editar os dados do banco de dados. Para iniciar o Prisma Studio, execute o seguinte comando:
```sh
npm run prisma
```
## Outros
Para mais informações sobre configuração de ambiente e servidor de banco de dados, acesse a seção de [configuração](configuracao) da documentação.
Clone repository
  • Analytics
  • Arquitetura
  • Backend
  • Banco de Dados
  • Codigo
  • Configuracao
  • Design_Mockups
  • Escopo
  • Frontend
  • Processo
  • Qualidade
  • gerencia
  • Home