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 Pdf {
- 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).
Pdf: Gerencia o anexo do protocolo de ação na criação de um projeto.
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
- startHour DATETIME
- endHour 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 Pdf {
- id INT pk
- fileName TEXT
- mimeType TEXT
- filePath TEXT
- project_id INT fk }
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 }