Início | Cronograma | Procedimentos | Design_de_Telas | Configuração | Arquitetura | Banco_de_Dados | Qualidade | Instruções_de_Uso |
---|
Banco de Dados
Neste projeto, estamos utilizando o banco de dados MongoDB, sendo um dos mais conhecidos e utilizados banco de dados não relacional. Este banco de dados provê uma boa escalabilidade, flexibilidade, um bom desempenho, com consultas fáceis e simples.
Sumário
Motivação
No início do projeto, foi pensado em utilizar o banco de dados MySQL, um banco de dados relacional do qual poderia ser aplicado ao projeto. Por conta de algumas constatações, optamos por fazer uso do banco de dados MongoDB. Algumas das motivações que propiciaram esta mudança foram:
- Neste projeto, não há a necessidade de se utilizar garantias ACID;
- Os dados podem ser expressos sem relação;
- A segurança de gravação não é crítica;
- A seleção dos dados é simples, e tende a ser simples;
- É provável que acelere e simplifique o processo de desenvolvimento.
Modelagem
As principais entidades do banco são: Pesquisador e Usuário.
A entidade Tag está relacionada com todas as demais entidades, ela é responsável por organizar e categorizar as demais entidades por área de estudo e conhecimento.
Esquema Conceitual
Esquema Lógico
MongoDB Atlas
MongoDB Atlas consiste em um banco de dados que permanece em constante execução na nuvem, sem a necessidade de criar um serviço local. Estamos utilizando-o neste projeto por conta da facilidade e acessibilidade deste serviço. Para mais informações, acesse: MongoDB Atlas.
Para acessar as informações de configuração do MongoDB Atlas, acesse o tópico de Configuração.
Implementação
Pela versatilidade do MongoDB, não é necessário criar as Tables ou Collections diretamente no banco de dados.
Podemos implementar arquivos Schemas, que são os arquivos dos quais contém toda a lógica necessária para que o banco de dados reconheça o formato dos dados e armazene-os de forma correta. Estes arquivos são gerados dentro do projeto de backend, para que, a cada vez que houver uma comunicação do backend com o banco de dados, o MongoDB receba as informações necessárias e saiba a maneira correta de operação.
Schemas
model Usuario {
id String @id @default(auto()) @map("_id") @db.ObjectId
nome String
username String @unique
email String @unique
senha String
genero String
dataNasc DateTime
notificacao Boolean
interesse String[]
questionariosIds String[] @db.ObjectId
questionarios Questionario[] @relation(fields: [questionariosIds], references: [id])
tags String[]
}
model Questionario {
id String @id @default(auto()) @map("_id") @db.ObjectId
titulo String
termo String
descricao String
link String
calculo String
usuariosIds String[] @db.ObjectId
usuarios Usuario[] @relation(fields: [usuariosIds], references: [id])
tags String[]
}
model Tag {
id String @id @default(auto()) @map("_id") @db.ObjectId
nome String @unique
descricao String
}
model Projeto {
id String @id @default(auto()) @map("_id") @db.ObjectId
titulo String
descricao String
estado String
tag String[]
pesquisadoresIds String[] @db.ObjectId
pesquisadores Pesquisador[] @relation(fields: [pesquisadoresIds], references: [id])
}
model Pesquisador {
id String @id @default(auto()) @map("_id") @db.ObjectId
nome String
email String @unique
descricao String
afiliacao String
tag String[]
foto String
contatos Contato[]
projetosIds String[] @db.ObjectId
projetos Projeto[] @relation(fields: [projetosIds], references: [id])
artigosIds String[] @db.ObjectId
artigos Artigo[] @relation(fields: [artigosIds], references: [id])
}
model Artigo {
id String @id @default(auto()) @map("_id") @db.ObjectId
doi Int
titulo String
descricao String
citacao String
afiliacao String
link String
tag String[]
pesquisadoresIds String[] @db.ObjectId
pesquisadores Pesquisador[] @relation(fields: [pesquisadoresIds], references: [id])
}
type Contato {
nome String
link String
}