Home | Escopo e Cronograma | Processo | Design/Mockups | Configuração | Arquitetura | Código | BD | Qualidade | Utilização |
---|
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
Implementaçã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
}
Configurando o Mongo Atlas
É preciso criar uma conta em MongoDB Atlas para criar e configurar um banco de dados na nuvem.