Diagrama¶
Notação usada: Peter Chen
Entidades¶
Tabela de users:¶
Essa tabela é fundamental para controle de acesso e gerenciamento de perfis na plataforma.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, UNIQUE, PRIMARY KEY |
Identificador único do usuário, gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome completo do usuário. |
username |
VARCHAR(255) |
NOT NULL, UNIQUE |
Nome de usuário exclusivo, usado para login. Não pode conter espaços e deve ser único. |
password |
VARCHAR(255) |
NOT NULL |
Senha do usuário. |
VARCHAR(255) |
NOT NULL, UNIQUE |
Endereço de e-mail exclusivo do usuário. |
|
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que o registro foi criado. |
updated_at |
TIMESTAMP |
Data e hora da última atualização do registro. |
|
description |
TEXT |
Descrição ou biografia do usuário. |
|
institution |
TEXT |
Instituição a que o usuário está associado. |
|
birthday |
TIMESTAMP |
NOT NULL |
Data de nascimento do usuário. |
cpf |
VARCHAR(255) |
UNIQUE |
Cadastro de Pessoa Física (CPF) do usuário. |
confirmed_at |
TIMESTAMP |
Data e hora em que o e-mail foi confirmado pelo usuário. |
|
confirmation_sent_at |
TIMESTAMP |
Data e hora em que a confirmação do e-mail foi enviada. |
|
deleted_at |
TIMESTAMP |
Data e hora em que o registro foi marcado como excluído . |
|
active |
BOOLEAN |
Indica se o usuário está ativo ou inativo. |
|
reactivated_at |
TIMESTAMP |
Data e hora em que o usuário foi reativado após estar inativo. |
|
user_stats_id |
INTEGER |
NOT NULL, UNIQUE, FK(user_stats) |
Estabelece a relação entre um usuário e seu conjunto de estatísticas de atividades, que está armazenado na tabela user_stats. |
Tabela user_stats:¶
Essa tabela permite o acompanhamento do engajamento e atividades de cada usuário.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY |
Identificador único para as estatísticas do usuário, gerado automaticamente. |
score |
NUMERIC |
NOT NULL |
Pontuação acumulada do usuário baseada em atividades na plataforma. |
likes |
INTEGER |
Número de “likes” que o usuário deu em conteúdos de outros usuários. |
|
likes_received |
INTEGER |
Quantidade de “likes” recebidos pelo conteúdo do usuário. |
|
follows |
INTEGER |
Número de perfis que o usuário segue. |
|
followers |
INTEGER |
Quantidade de seguidores que o usuário tem. |
|
collections |
INTEGER |
Número de coleções de conteúdo criadas pelo usuário. |
|
submitted_resources |
INTEGER |
Quantidade de recursos submetidos pelo usuário para a plataforma. |
|
approved_resources |
INTEGER |
Número de recursos submetidos pelo usuário que foram aprovados. |
|
reviewd_resources |
INTEGER |
Quantidade de recursos revisados pelo usuário. |
|
comments |
INTEGER |
Número de comentários feitos pelo usuário em conteúdos da plataforma. |
Tabela resources¶
Essa tabela é essencial para organizar e gerenciar os recursos educacionais disponibilizados na plataforma.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY, UNIQUE |
Identificador único do recurso, gerado automaticamente. |
bucket_key |
VARCHAR(255) |
UNIQUE |
Chave exclusiva que identifica o recurso no sistema de armazenamento. |
link |
VARCHAR(255) |
Link externo para o recurso (se houver). |
|
thumbnail |
VARCHAR(255) |
URL da imagem de miniatura do recurso. |
|
name |
VARCHAR(255) |
NOT NULL |
Nome do recurso educacional. |
author |
VARCHAR(255) |
NOT NULL |
Nome do autor do recurso. |
description |
TEXT |
Descrição detalhada do recurso educacional. |
|
created_at |
TIMESTAMP |
Data e hora em que o recurso foi criado no sistema. |
|
updated_at |
TIMESTAMP |
Data e hora da última atualização do recurso. |
|
submited_at |
TIMESTAMP |
Data e hora em que o recurso foi submetido para aprovação. |
|
published_at |
TIMESTAMP |
Data e hora em que o recurso foi publicado e disponibilizado aos usuários. |
|
deleted_at |
TIMESTAMP |
Data e hora em que o recurso foi excluído. |
|
user_id |
INTEGER |
UNIQUE, NOT NULL, FK(users.id) |
Chave estrangeira que faz referência a tabela users; Define o criador do recurso. |
object_type_id |
INTEGER |
UNIQUE, NOT NULL, FK(object_types.id) |
Chave estrangeira que faz referência a tabela object_type; Define o tipo de objeto educacional do recurso. |
license_id |
INTEGER |
UNIQUE, NOT NULL, FK(licenses.id) |
Chave estrangeira que faz referência a tabela licenses. Indica a licença associada ao recurso, descrevendo como ele pode ser utilizado ou distribuído. |
resource_stats_id |
INTEGER |
NOT NULL, UNIQUE, FK(user_stats) |
Estabelece a relação entre um recurso e seu conjunto de estatísticas de atividades, que está armazenado na tabela resource_stats. |
Tabela resource_stats¶
Essas estatísticas permitem acompanhar o engajamento e a popularidade de cada recurso educacional.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
INTEGER |
NOT NULL, UNIQUE, PRIMARY KEY |
Identificador único das estatísticas de um recurso educacional. |
user_id |
INTEGER |
NOT NULL |
Identificador do usuário relacionado ao recurso. |
views |
INTEGER |
Número de visualizações que o recurso recebeu. |
|
download |
INTEGER |
Quantidade de downloads do recurso. |
|
likes |
INTEGER |
Número de “likes” que o recurso recebeu dos usuários. |
|
shares |
INTEGER |
Número de vezes que o recurso foi compartilhado. |
|
score |
NUMERIC |
Pontuação acumulada do recurso com base nas interações (likes, views, etc.). |
Tabela collections¶
A tabela de coleções armazena informações sobre agrupamentos de recursos educacionais criados pelos usuários. Essa tabela permite que os usuários organizem e compartilhem recursos em grupo personalizados.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, UNIQUE, PRIMARY KEY |
Identificador único da coleção, gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome da coleção. |
description |
TEXT |
Descrição detalhada da coleção. |
|
is_private |
BOOLEAN |
Indica se a coleção é privada ou pública. |
|
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que a coleção foi criada. |
updated_at |
TIMESTAMP |
Data e hora da última atualização na coleção. |
|
deleted_at |
TIMESTAMP |
Data e hora em que a coleção foi marcada como excluída. |
|
thumbnail |
VARCHAR(255) |
URL da imagem que representa visualmente a coleção. |
|
user_id |
INTEGER |
NOT NULL, UNIQUE, FK(users.id) |
Criador da coleção. Associa cada coleção a um usuário específico na plataforma. |
colletion_stats_id |
INTEGER |
NOT NULL, UNIQUE, FK(user_stats) |
Estabelece a relação entre uma coleção e seu conjunto de estatísticas de atividades, que está armazenado na tabela collection_stats. |
Tabela collection_stats¶
A tabela de estatísticas da coleção armazena dados sobre o desempenho e a interação dos usuários com as coleções de recursos educacionais. Essas estatísticas permitem monitorar a popularidade e o engajamento das coleções, ajudando a entender como os usuários interagem com os recursos agrupados.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, UNIQUE, PRIMARY KEY |
Identificador único das estatísticas da coleção, gerado automaticamente. |
views |
INTEGER |
Número de visualizações que a coleção recebeu. |
|
downloads |
INTEGER |
Número de downloads dos itens da coleção. |
|
likes |
INTEGER |
Número de “likes” que a coleção recebeu. |
|
shares |
INTEGER |
Número de vezes que a coleção foi compartilhada. |
|
score |
NUMERIC |
Pontuação atribuída à coleção com base nas interações (likes, views, etc.). |
|
follows |
INTEGER |
Número de usuários que seguem ou acompanham a coleção. |
Tabela subjects¶
A tabela de subjects armazena os nomes das disciplinas ou áreas de conhecimento associadas aos recursos educacionais na plataforma. Essa tabela serve para classificar e organizar os recursos educacionais por área, facilitando a busca e o acesso a conteúdos específicos relacionados a diferentes campos do conhecimento.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY, UNIQUE |
Identificador único da matéria gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome da matéria, como “Matemática” ou “Língua Portuguesa”. |
Tabela licenses¶
A tabela de licenses armazena informações sobre as licenças aplicáveis aos conteúdos (recursos) postados pelos usuários na plataforma. Essa tabela é essencial para garantir que os usuários compreendam as condições de uso dos recursos.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY |
Identificador único da licença gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome da licença |
descrição |
TEXT |
Descrição detalhada sobre a licença e suas permissões/restrições. |
|
url |
VARCHAR(255) |
URL que aponta para a página da licença. |
Tabela languages¶
A tabela de languages armazena informações sobre as línguas disponíveis na plataforma. Essa tabela é útil para categorizar e identificar o idioma dos recursos educacionais postados pelos usuários, facilitando a busca e a organização do conteúdo.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY, UNIQUE |
Identificador único da linguagem gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome da linguagem. |
code |
VARCHAR(10) |
NOT NULL, UNIQUE |
Código da linguagem (ex: pt(Português), fr(Francês), etc…). |
Tabela educational_stages¶
A tabela de educational_stages armazena as diferentes níveis associados aos recursos educacionais na plataforma.Essa tabela é usada para categorizar recursos conforme o nível de ensino, como Ensino Fundamental I, Ensino Fundamental II, Ensino Médio, entre outros.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY |
Identificador único da etapa educacional, gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome da etapa educacional |
Tabela object_types¶
A tabela de object_types armazena os diferentes tipos de objetos que podem ser associados aos recursos educacionais na plataforma. Esta tabela permite a categorização dos recursos de acordo com o tipo de mídia ou formato, como vídeo, documento, imagem, entre outros.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY |
Identificador único do tipo de objeto, gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome do tipo de objeto. |
Tabela submission¶
A tabela submission contém a avaliação de submissões de recursos educacionais, os quais podem ser aceitos ou rejeitados, justificando essa decisão. Além disso, ela vincula as submissões a um conjunto fixo de perguntas e registra os momentos no ciclo de vida de uma submissão, como a criação e a resposta.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY |
Identificador único da submissão. |
is_accepted |
BOOLEAN |
NOT NULL |
Indica se a submissão foi aceita ou não. |
justification |
TEXT |
Justificativa para o resultado da avaliação (aceitação ou rejeição). |
|
resource_id |
INTEGER |
NOT NULL, FOREIGN KEY(resources.id) |
Referência ao |
submitter_id |
INTEGER |
NOT NULL, FOREIGN KEY(users.id) |
Referência ao |
curator_id |
INTEGER |
FOREIGN KEY(users.id) |
Referência ao |
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que a submissão foi criada. |
updated_at |
TIMESTAMP |
Data e hora da última atualização da submissão. |
|
answered_at |
TIMESTAMP |
Data e hora em que a submissão foi respondida (aceita ou rejeitada). |
|
q1 |
BOOLEAN |
Resposta à primeira pergunta da avaliação. |
|
q2 |
BOOLEAN |
Resposta à segunda pergunta da avaliação. |
|
q3 |
BOOLEAN |
Resposta à terceira pergunta da avaliação. |
|
q4 |
BOOLEAN |
Resposta à quarta pergunta da avaliação. |
Tabela complaints¶
A tabela Complaints armazena as denúncias feitas pelos usuários relacionadas a diferentes tipos de objetos (usuário, coleção, ou recurso). Ela registra o estado da denúncia, que pode estar pendente (não visto), aceita ou rejeitada, e inclui uma descrição fornecida pelo denunciante. Além disso, a tabela rastreia quando a denúncia foi feita e quando foi avaliada, bem como o motivo específico da denúncia, selecionado a partir de uma lista enumerada.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY |
Identificador único da denúncia. |
state |
ENUM |
NOT NULL |
Estado do item: ‘active’ , ‘inactive’, ‘under_review’. |
description |
TEXT |
Motivo detalhado da denúncia. |
|
denoucer_id |
INTEGER |
NOT NULL, FOREIGN KEY(users.id) |
Referência ao |
resource_id |
INTEGER |
FOREIGN KEY(resources.id) |
id do recurso denunciado. |
collection_id |
INTEGER |
FOREIGN KEY(collections.id) |
id da coleção denunciada. |
user_id |
INTEGER |
FOREIGN_KEY(users.id) |
id do usuário denunciado. |
evaluated_at |
TIMESTAMP |
Data e hora em que a denúncia foi avaliada. |
|
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que a denúncia foi criada. |
q1 |
BOOLEAN |
Resposta à primeira pergunta da avaliação. |
|
q2 |
BOOLEAN |
Resposta à segunda pergunta da avaliação. |
|
q3 |
BOOLEAN |
Resposta à terceira pergunta da avaliação. |
|
q4 |
BOOLEAN |
Resposta à quarta pergunta da avaliação. |
Tabela roles¶
Essa tabela define diferentes papéis que podem ser atribuídos aos usuários, ajudando a controlar permissões e acesso a diferentes partes do sistema.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
PRIMARY KEY, NOT NULL |
Identificador único da função. |
name |
VARCHAR(255) |
NOT NULL, UNIQUE |
Nome da função (por exemplo, student, teacher, submitter…). |
description |
TEXT |
Descrição detalhada do papel dessa função. |
|
created_at |
TIMESTAMP WITHOUT TIME ZONE |
NOT NULL |
Data e hora de criação da função. |
updated_at |
TIMESTAMP WITHOUT TIME ZONE |
Data e hora da última atualização da função. |
Tabela items¶
A tabela items armazena informações sobre os itens disponíveis na plataforma, incluindo seu nome, preço, descontos, descrições e tipo.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
BIGINT |
PRIMARY KEY, NOT NULL |
Identificador único do item. |
name |
VARCHAR(255) |
NOT NULL |
Nome do item. |
price |
NUMERIC |
Preço do item. |
|
discount |
NUMERIC |
Desconto aplicado ao item. |
|
description |
TEXT |
Descrição detalhada do item. |
|
is_active |
BOOLEAN |
Estado do item, ativo ou inativo. |
|
created_at |
TIMESTAMP WITHOUT TIME ZONE |
NOT NULL |
Data e hora de criação do item. |
updated_at |
TIMESTAMP WITHOUT TIME ZONE |
NOT NULL |
Data e hora da última atualização do item. |
Tabela achievements¶
A tabela achievements armazena informações sobre conquistas que os usuários podem obter.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
PRIMARY KEY, NOT NULL |
Identificador único da conquista. |
name |
VARCHAR(255) |
NOT NULL |
Nome da conquista. |
description |
TEXT |
Descrição detalhada da conquista. |
|
reward_experience |
NUMERIC |
Quantidade de experiência concedida ao completar a conquista. |
|
reward_points |
NUMERIC |
Pontos de recompensa concedidos ao completar a conquista. |
|
state |
ENUM |
NOT NULL |
estado do item: ‘active’ , ‘inactive’, ‘under_review’. |
repeatable |
INTEGER |
NOT NULL |
Número de vezes que a conquista pode ser repetida. |
is_resettable |
BOOLEAN |
NOT NULL |
Define se a conquista é sazonal e pode ser redefinida. |
created_at |
TIMESTAMP WITHOUT TIME ZONE |
NOT NULL |
Data e hora de criação da conquista. |
updated_at |
TIMESTAMP WITHOUT TIME ZONE |
NOT NULL |
Data e hora da última atualização da conquista. |
Tabela notifications¶
A tabela notifications registra as notificações geradas por ações realizadas na plataforma, informando os usuários sobre interações relacionadas a recursos educacionais, coleções ou outros usuários.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
PRIMARY KEY, NOT NULL |
Identificador único da notificação. |
action_id |
INTEGER |
NOT NULL, FOREIGN KEY(actions.id) |
ID da ação realizada, referenciando a tabela de ações. |
actor_user_id |
INTEGER |
NOT NULL, FOREIGN KEY(users.id) |
ID do usuário que realizou a ação. |
target_user_id |
INTEGER |
FOREIGN KEY(users.id) |
ID do usuário que foi o alvo da ação, se aplicável. |
target_resource_id |
INTEGER |
FOREIGN KEY(resources.id) |
ID do recurso educacional que foi o alvo da ação, se aplicável. |
target_collection_id |
INTEGER |
FOREIGN KEY(collections.id) |
ID da coleção que foi o alvo da ação, se aplicável. |
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que a notificação foi criada. |
updated_at |
TIMESTAMP |
Data e hora da última atualização da notificação. |
Tabela institutions¶
A tabela institutions armazena informações sobre instituições, incluindo nome, localização (estado e cidade), permitindo o gerenciamento e a identificação dessas entidades em um sistema.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
PRIMARY KEY, NOT NULL |
Identificador único da instituição. |
name |
VARCHAR(255) |
NOT NULL |
Nome da instituição. |
uf |
VARCHAR(2) |
Unidade Federativa (estado) da instituição. |
|
city |
VARCHAR(255) |
Cidade onde a instituição está localizada. |
|
cep |
VARCHAR(10) |
Código de Endereçamento Postal da instituição. |
|
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que a instituição foi criada. |
updated_at |
TIMESTAMP |
Data e hora da última atualização da instituição. |
Tabela actions¶
A tabela actions armazena informações sobre diferentes ações que os usuários podem realizar.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
id |
SERIAL |
NOT NULL, PRIMARY KEY, UNIQUE |
Identificador único da ação gerado automaticamente. |
name |
VARCHAR(255) |
NOT NULL |
Nome da ação (ex: curtir, compartilhar, baixar, etc.). |
created_at |
TIMESTAMP |
NOT NULL |
Data e hora em que a ação foi criada. |
updated_at |
TIMESTAMP |
Data e hora da última atualização da ação. |
Relações¶
Tabela intermediária follow¶
Tabela intermediária entre tabela users e a própria tabela users.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
follower_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária collection_likes¶
Tabela intermediária entre tabela users e a própria tabela users.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
follower_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária resource_languagues¶
Tabela intermediária entre tabela resources e tabela languages.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
resource_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
language_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária user_items¶
Tabela intermediária entre tabela users e tabela items.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
item_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária user_achievements¶
Tabela intermediária entre tabela users e tabela achievements.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
achievement_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária user_roles¶
Tabela intermediária entre tabela users e tabela roles.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
role_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária user_institutions¶
Tabela intermediária entre users e institutions.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
institution_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela `institution |
Tabela intermediária resource_likes¶
Tabela intermediária entre tabela users e tabela resources. Tabela rastreia qual usuário deu like no recurso.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
resource_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária resource_subjects¶
Tabela intermediária entre tabela users e tabela resources. Tabela rastreia qual usuário deu like no recurso.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
user_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
resource_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária resource_educational_stages¶
Tabela intermediária entre resources e tablea educational_stages.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
resource_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
educational_stage_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
Tabela intermediária collection_resources¶
Tabela intermediária entre tabela collections e tabela resources.
Atributo |
Tipo |
Restrições |
Descrição |
---|---|---|---|
collection_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
resource_id |
INTEGER |
NOT NULL, FOREIGN KEY |
Referência ao identificador único da tabela |
SQL¶
-- Criar tabela de instituições
CREATE TABLE institutions (
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL,
uf VARCHAR(2),
city VARCHAR(255),
cep VARCHAR(10),
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP
);
-- Criar tabela de estatísticas de usuários
CREATE TABLE user_stats (
id SERIAL PRIMARY KEY,
score NUMERIC NOT NULL,
likes INTEGER,
likes_received INTEGER,
follows INTEGER,
followers INTEGER,
collections INTEGER,
submitted_resources INTEGER,
approved_resources INTEGER,
reviewed_resources INTEGER,
comments INTEGER
);
-- Criar tabela de usuários
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
description TEXT,
institution TEXT,
birthday TIMESTAMP NOT NULL,
cpf VARCHAR(255) UNIQUE,
confirmed_at TIMESTAMP,
confirmation_sent_at TIMESTAMP,
deleted_at TIMESTAMP,
active BOOLEAN,
reactivated_at TIMESTAMP,
user_stats_id INTEGER NOT NULL UNIQUE,
CONSTRAINT fk_user_stats FOREIGN KEY (user_stats_id)
REFERENCES user_stats(id)
);
-- Criar tabela de disciplinas
CREATE TABLE subjects (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL
);
-- Criar tabela de licenças
CREATE TABLE licenses (
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL,
descricao TEXT,
url VARCHAR(255)
);
-- Criar tabela de línguas
CREATE TABLE languages (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
code VARCHAR(10) NOT NULL UNIQUE
);
-- Criar tabela de etapas educacionais
CREATE TABLE educational_stages (
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL
);
-- Criar tabela de tipos de objetos
CREATE TABLE object_types (
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL
);
-- Criar tabela de estatísticas de recursos
CREATE TABLE resource_stats (
id INTEGER PRIMARY KEY UNIQUE NOT NULL,
user_id INTEGER NOT NULL,
views INTEGER,
download INTEGER,
likes INTEGER,
shares INTEGER,
score NUMERIC
);
-- Criar tabela de recursos
CREATE TABLE resources (
id SERIAL PRIMARY KEY UNIQUE,
bucket_key VARCHAR(255) UNIQUE,
link VARCHAR(255),
thumbnail VARCHAR(255),
name VARCHAR(255) NOT NULL,
author VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
submitted_at TIMESTAMP,
published_at TIMESTAMP,
deleted_at TIMESTAMP,
user_id INTEGER NOT NULL UNIQUE,
object_type_id INTEGER NOT NULL UNIQUE,
license_id INTEGER NOT NULL UNIQUE,
resource_stats_id INTEGER NOT NULL UNIQUE,
CONSTRAINT fk_user FOREIGN KEY (user_id)
REFERENCES users(id),
CONSTRAINT fk_object_type FOREIGN KEY (object_type_id)
REFERENCES object_types(id),
CONSTRAINT fk_license FOREIGN KEY (license_id)
REFERENCES licenses(id),
CONSTRAINT fk_resource_stats FOREIGN KEY (resource_stats_id)
REFERENCES resource_stats(id)
);
-- Criar tabela de estatísticas da coleção
CREATE TABLE collection_stats (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
views INTEGER,
downloads INTEGER,
likes INTEGER,
shares INTEGER,
score NUMERIC,
follows INTEGER
);
-- Criar tabela de coleções
CREATE TABLE collections (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
is_private BOOLEAN,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP,
thumbnail VARCHAR(255),
user_id INTEGER NOT NULL UNIQUE,
collection_stats_id INTEGER NOT NULL UNIQUE,
CONSTRAINT fk_user FOREIGN KEY (user_id)
REFERENCES users(id),
CONSTRAINT fk_collection_stats FOREIGN KEY (collection_stats_id)
REFERENCES collection_stats(id)
);
-- Criar tabela de submissões
CREATE TABLE submissions (
id SERIAL PRIMARY KEY NOT NULL,
is_accepted BOOLEAN NOT NULL,
justification TEXT,
resource_id INTEGER NOT NULL,
submitter_id INTEGER NOT NULL,
curator_id INTEGER,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP,
answered_at TIMESTAMP,
q1 BOOLEAN,
q2 BOOLEAN,
q3 BOOLEAN,
q4 BOOLEAN,
CONSTRAINT fk_resource FOREIGN KEY (resource_id)
REFERENCES resources(id),
CONSTRAINT fk_submitter FOREIGN KEY (submitter_id)
REFERENCES users(id),
CONSTRAINT fk_curator FOREIGN KEY (curator_id)
REFERENCES users(id)
);
CREATE TYPE review_state AS ENUM ('active', 'inactive', 'under_review');
-- Criar tabela de denúncias
CREATE TABLE complaints (
id SERIAL PRIMARY KEY NOT NULL,
state review_state NOT NULL DEFAULT 'under_review',
description TEXT,
denoucer_id INTEGER NOT NULL,
resource_id INTEGER,
collection_id INTEGER,
user_id INTEGER,
evaluated_at TIMESTAMP,
created_at TIMESTAMP NOT NULL,
q1 BOOLEAN,
q2 BOOLEAN,
q3 BOOLEAN,
q4 BOOLEAN,
CONSTRAINT fk_denoucer FOREIGN KEY (denoucer_id)
REFERENCES users(id),
CONSTRAINT fk_resource FOREIGN KEY (resource_id)
REFERENCES resources(id),
CONSTRAINT fk_collection FOREIGN KEY (collection_id)
REFERENCES collections(id),
CONSTRAINT fk_user FOREIGN KEY (user_id)
REFERENCES users(id)
);
-- Criar tabela de papéis
CREATE TABLE roles (
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL UNIQUE,
description TEXT,
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
updated_at TIMESTAMP WITHOUT TIME ZONE
);
-- Criar tabela de conquistas
CREATE TABLE achievements (
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
reward_experience NUMERIC,
reward_points NUMERIC,
state review_state NOT NULL DEFAULT 'under_review',
repeatable INTEGER NOT NULL,
is_resettable BOOLEAN NOT NULL,
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
);
-- Criar tabela de itens
CREATE TABLE items (
id BIGINT PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL,
price NUMERIC,
discount NUMERIC,
description TEXT,
is_active BOOLEAN,
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
);
-- Criar tabela de ações
CREATE TABLE actions (
id SERIAL NOT NULL PRIMARY KEY UNIQUE,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP
);
-- Criar tabela de notificações
CREATE TABLE notifications (
id SERIAL PRIMARY KEY NOT NULL,
action_id INTEGER NOT NULL,
actor_user_id INTEGER NOT NULL,
target_user_id INTEGER,
target_resource_id INTEGER,
target_collection_id INTEGER,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP,
CONSTRAINT fk_action FOREIGN KEY (action_id)
REFERENCES actions(id),
CONSTRAINT fk_actor_user FOREIGN KEY (actor_user_id)
REFERENCES users(id),
CONSTRAINT fk_target_user FOREIGN KEY (target_user_id)
REFERENCES users(id),
CONSTRAINT fk_target_resource FOREIGN KEY (target_resource_id)
REFERENCES resources(id),
CONSTRAINT fk_target_collection FOREIGN KEY (target_collection_id)
REFERENCES collections(id)
);
CREATE TABLE followers (
user_id INTEGER NOT NULL,
follower_id INTEGER NOT NULL
);
CREATE TABLE collection_likes (
user_id INTEGER NOT NULL,
collection_id INTEGER NOT NULL
);
CREATE TABLE resource_languages (
resource_id INTEGER NOT NULL,
language_id INTEGER NOT NULL
);
CREATE TABLE user_items (
id SERIAL NOT NULL PRIMARY KEY UNIQUE,
user_id INTEGER NOT NULL,
item_id INTEGER NOT NULL
);
CREATE TABLE user_achievements (
id SERIAL NOT NULL PRIMARY KEY UNIQUE,
user_id INTEGER NOT NULL,
achievement_id INTEGER NOT NULL
);
CREATE TABLE user_roles (
user_id INTEGER NOT NULL,
role_id INTEGER NOT NULL
);
CREATE TABLE user_institutions (
user_id INTEGER NOT NULL,
institution_id INTEGER NOT NULL
);
CREATE TABLE resource_likes (
user_id INTEGER NOT NULL,
resource_id INTEGER NOT NULL
);
CREATE TABLE resource_subjects (
user_id INTEGER NOT NULL,
resource_id INTEGER NOT NULL
);
CREATE TABLE resource_educational_stages (
resource_id INTEGER NOT NULL,
educational_stage_id INTEGER NOT NULL
);
CREATE TABLE collection_resources (
collection_id INTEGER NOT NULL,
resource_id INTEGER NOT NULL
);