| Home | Escopo | Git Workflow | Design/Mockups | Configuração | Arquitetura | Gerência | BD | Qualidade | 
|---|
Sumário
- Sumário
 - Descrição
 - Modelo e provedor escolhido Texto
 - Diagrama do banco de dados
 - 
Modelagem do Banco de Dados
- Tabela User {
 - Tabela Address {
 - Tabela Institution {
 - Tabela Role {
 - Tabela Event {
 - Tabela Project {
 - Tabela Category {
 - Tabela Keyword {
 - Tabela GeneralParameters {
 - Tabela SocialNetwork {
 - Tabela Post {
 - Tabela PostLikes {
 - Tabela PostComments {
 - Tabela ProjectCategory {
 - Tabela EventCategory {
 - Tabela ProjectKeyword {
 - Tabela UsersSocialNetwork {
 
 
Descrição
O banco de dados utilizado no projeto Cosmos é baseado no PostgreSQL, um sistema de gerenciamento de banco de dados relacional. Ele oferece uma estrutura robusta para organizar e acessar os dados, garantindo consultas eficientes e escalabilidade para as diversas funcionalidades do projeto. A escolha pelo PostgreSQL foi baseada em sua simplicidade de implementação e na necessidade de gerenciar um número moderado de tabelas.
O Prisma foi utilizado como ORM (Object-Relational Mapping), permitindo a interação com o banco de dados de maneira mais fluida e eficiente, utilizando o Prisma Client para JavaScript. Isso simplifica a manipulação de dados e acelera o desenvolvimento.
- PostgreSQL
 
O PostgreSQL é uma ferramenta que atua como sistema de gerenciamento de bancos de dados relacionados. Seu foco é permitir implementação da linguagem SQL em estruturas, garantindo um trabalho com os padrões desse tipo de ordenação dos dados. Tem o papel de gerenciar os dados desses bancos de maneira organizada e eficaz, rodando e gravando todas as informações que ficam registradas nesses compartimentos. Por meio desse sistema, usuários podem executar consultas de maneira simples, sem precisar acessar diretamente o banco de dados.
Modelo e provedor escolhido Texto
[Exemplo] Foi decidido utilizar um banco de dados relacional PostgreSQL, uma vez que a aplicação não exigia um grande número de tabelas e buscava-se pela simplicidade na sua implementação.
Diagrama do banco de dados
Modelagem do Banco de Dados
O banco de dados foi modelado com o objetivo de suportar as principais funcionalidades do sistema, incluindo gerenciamento de usuários, instituições, eventos, projetos e interações sociais, como posts, comentários e curtidas.
Principais Tabelas:
GeneralParameters: Gerencia parâmetros gerais da aplicação, armazenando dados em formato JSON.
Institution: Armazena dados das instituições, incluindo nome, CNPJ, localização geográfica (latitude e longitude) e suas relações com eventos, usuários e projetos.
User: Contém os dados dos usuários, como nome, e-mail, senha e CPF/CNPJ. Cada usuário pode estar associado a uma instituição e a um papel (role) específico.
Address: Armazena os dados de endereço dos usuários.
Role: Define os diferentes papéis que os usuários podem desempenhar dentro da aplicação.
Event: Tabela responsável por armazenar informações de eventos, como título, descrição, data e localização (latitude e longitude).
Project: Armazena os projetos gerenciados pelo sistema, incluindo nome, histórico, propósito, data de início e término.
Category e Keyword: Gerenciam as categorias e palavras-chave associadas a projetos e eventos.
Post, PostLikes e PostComments: Gerenciam as interações sociais, incluindo posts feitos pelos usuários, suas curtidas e comentários.
ProjectCategory, EventCategory e ProjectKeyword: Relações de muitos para muitos entre projetos, eventos, categorias e palavras-chave.
UsersSocialNetwork: Armazena as redes sociais associadas a cada usuário.
Tabela User {
- id INT pk
 - name TEXT
 - email VARCHAR(255)
 - password VARCHAR(255)
 - phone CHAR(11)
 - cpfcnpj VARCHAR(14)
 - photoURL TEXT
 - blocked BOOLEAN
 - registrarion_number VARCHAR(50)
 - institution_id INT fk
 - role_id INT fk }
 
Tabela Address {
- id INT pk
 - user_id INT fk
 - street VARCHAR(100)
 - number VARCHAR(50)
 - complement VARCHAR(100)
 - neighborhood VARCHAR(50)
 - city VARCHAR(30)
 - state VARCHAR(30)
 - contry VARCHAR(30)
 - postalCode VARCHAR(8) }
 
Tabela Institution {
- id INT pk
 - name TEXT
 - cnpj VARCHAR(14)
 - latitude DECIMAL(9,6),
 - longitude DECIMAL(9,6)
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela Role {
- id INT pk
 - title TEXT
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela Event {
- id INT pk
 - title TEXT
 - imageURL TEXT
 - description TEXT
 - date DATETIME
 - hour DATETIME
 - isOnline BOOLEAN
 - adress TEXT
 - latitude DECIMAL(9,6),
 - longitude DECIMAL(9,6),
 - project_id INT fk
 - institution_id INT fk
 - updatedBy TEXT
 - updatedAt DATETIME }
 
Tabela Project {
- id INT pk
 - name TEXT
 - history TEXTUser {
 - id INT pk
 - name TEXT
 - email VARCHAR(255)
 - password VARCHAR(255)
 - phone CHAR(11)
 - cpfcnpj VARCHAR(14)
 - photoURL TEXT
 - blocked BOOLEAN
 - complement VARCHAR(100)
 - neighborhood
 - imageURL TEXT
 - purpose TEXT
 - contact VARCHAR(50)
 - start_date DATE
 - end_date DATE
 - status VARCHAR(30)
 - teacher_id INT fk
 - institution_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela Category {
- id INT pk
 - name TEXT
 - type INT
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela Keyword {
- id INT pk,
 - word TEXT
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela GeneralParameters {
- id INT pk,
 - parameter TEXT
 - content TEXT
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela SocialNetwork {
- id INT pk
 - name TEXT
 - icon TEXT
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela Post {
- id INT pk
 - content TEXT
 - project_id INT fk
 - event_id INT fk
 - user_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela PostLikes {
- id INT pk
 - post_id INT fk
 - user_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela PostComments {
- id INT pk
 - content TEXT
 - post_id INT fk
 - user_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela ProjectCategory {
- project_id INT fk
 - category_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela EventCategory {
- event_id INT fk
 - category_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela ProjectKeyword {
- project_id INT fk,
 - keyword_id INT fk
 - updatedAt DATETIME
 - updatedBy TEXT }
 
Tabela UsersSocialNetwork {
- user_id INT fk
 - social_network_id INT fk
 - social_network_URL TEXT
 - updatedAt DATETIME
 - updatedBy TEXT }
 
