Home | Escopo e Cronograma | Processo | Design/Mockups | Configuração | Arquitetura | Código | BD | Qualidade | Utilização | Contratos |
---|
Banco de Dados
Descrição
A modelagem, documentação e organização do banco de dados se situará nessa seção.
Sumário
Modelagem
Esquema Conceitual
Através do esquema conceitual é possível melhor entender as relações entre as tabelas, podemos ver, por exemplo, que um Course tem zero ou mais Degree associados à ele como descrito na realação entre eles.
Outra informação interessante que este modelo nos dá é que pode ser que um estudante siga vários professores, assim como pode não haver nenhum aluno seguindo nenhum professor. Ou o h_index que é só presente no professor e, por isso, foi feita uma especialização de usuário para aluno e professores.
Nós começamos a ver algumas regras de negócio já através desse esquema conceitual que vai nos ajudar e guiar a nossa implementação futuramente.
Esquema Lógico
O esquema lógico nos traz informações mais relacionadas a implementação no banco de fato. Então, a nomenclatura das foreign keys, colunas automáticas de updatedAt e createdAt já são facilmente vistas aqui.
Implementação
-- MySQL Script generated by MySQL Workbench -- Tue Apr 5 00:06:38 2022 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- Schema mydb
-- Schema ucon
-- Schema ucon
CREATE SCHEMA IF NOT EXISTS ucon
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ;
USE ucon
;
-- Table ucon
.courses
CREATE TABLE IF NOT EXISTS ucon
.courses
(
id
INT NOT NULL AUTO_INCREMENT,
course
VARCHAR(255) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
PRIMARY KEY (id
),
UNIQUE INDEX course
(course
ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.degree_types
CREATE TABLE IF NOT EXISTS ucon
.degree_types
(
id
INT NOT NULL AUTO_INCREMENT,
degreeType
VARCHAR(255) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
PRIMARY KEY (id
),
UNIQUE INDEX degreeType
(degreeType
ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.genders
CREATE TABLE IF NOT EXISTS ucon
.genders
(
id
INT NOT NULL AUTO_INCREMENT,
gender
VARCHAR(64) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
PRIMARY KEY (id
),
UNIQUE INDEX gender
(gender
ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.users
CREATE TABLE IF NOT EXISTS ucon
.users
(
id
INT NOT NULL AUTO_INCREMENT,
email
VARCHAR(255) NOT NULL,
password
VARCHAR(255) NOT NULL,
full_name
VARCHAR(64) NOT NULL,
lattes_id
VARCHAR(255) NULL DEFAULT NULL,
birth_date
DATETIME NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
genderId
INT NOT NULL,
PRIMARY KEY (id
),
UNIQUE INDEX email
(email
ASC) VISIBLE,
INDEX genderId
(genderId
ASC) VISIBLE,
CONSTRAINT users_ibfk_1
FOREIGN KEY (genderId
)
REFERENCES ucon
.genders
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.teachers
CREATE TABLE IF NOT EXISTS ucon
.teachers
(
h_index
INT NULL DEFAULT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
userId
INT NOT NULL,
PRIMARY KEY (userId
),
CONSTRAINT teachers_ibfk_1
FOREIGN KEY (userId
)
REFERENCES ucon
.users
(id
)
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.educational_institutions
CREATE TABLE IF NOT EXISTS ucon
.educational_institutions
(
id
INT NOT NULL AUTO_INCREMENT,
eductionalInstitution
VARCHAR(255) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
PRIMARY KEY (id
),
UNIQUE INDEX eductionalInstitution
(eductionalInstitution
ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.degrees
CREATE TABLE IF NOT EXISTS ucon
.degrees
(
id
INT NOT NULL AUTO_INCREMENT,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
teacherId
INT NOT NULL,
courseId
INT NOT NULL,
degreeTypeId
INT NOT NULL,
educationalInstitutionId
INT NOT NULL,
PRIMARY KEY (id
),
INDEX teacherId
(teacherId
ASC) VISIBLE,
INDEX courseId
(courseId
ASC) VISIBLE,
INDEX degreeTypeId
(degreeTypeId
ASC) VISIBLE,
INDEX educationalInstitutionId
(educationalInstitutionId
ASC) VISIBLE,
CONSTRAINT degrees_ibfk_1
FOREIGN KEY (teacherId
)
REFERENCES ucon
.teachers
(userId
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT degrees_ibfk_2
FOREIGN KEY (courseId
)
REFERENCES ucon
.courses
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT degrees_ibfk_3
FOREIGN KEY (degreeTypeId
)
REFERENCES ucon
.degree_types
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT degrees_ibfk_4
FOREIGN KEY (educationalInstitutionId
)
REFERENCES ucon
.educational_institutions
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.experiences
CREATE TABLE IF NOT EXISTS ucon
.experiences
(
id
INT NOT NULL AUTO_INCREMENT,
role
VARCHAR(64) NOT NULL,
location
VARCHAR(64) NOT NULL,
from
DATETIME NOT NULL,
to
DATETIME NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
userId
INT NOT NULL,
PRIMARY KEY (id
),
INDEX userId
(userId
ASC) VISIBLE,
CONSTRAINT experiences_ibfk_1
FOREIGN KEY (userId
)
REFERENCES ucon
.users
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.projects
CREATE TABLE IF NOT EXISTS ucon
.projects
(
id
INT NOT NULL AUTO_INCREMENT,
name
VARCHAR(64) NOT NULL,
description
VARCHAR(255) NOT NULL,
openned
TINYINT(1) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
teacherId
INT NOT NULL,
PRIMARY KEY (id
),
INDEX teacherId
(teacherId
ASC) VISIBLE,
CONSTRAINT projects_ibfk_1
FOREIGN KEY (teacherId
)
REFERENCES ucon
.teachers
(userId
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.opportunities
CREATE TABLE IF NOT EXISTS ucon
.opportunities
(
id
INT NOT NULL AUTO_INCREMENT,
type
VARCHAR(64) NOT NULL,
description
VARCHAR(255) NOT NULL,
semesterStart
INT NULL DEFAULT NULL,
semesterEnd
INT NULL DEFAULT NULL,
openned
TINYINT(1) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
projectId
INT NOT NULL,
PRIMARY KEY (id
),
INDEX projectId
(projectId
ASC) VISIBLE,
CONSTRAINT opportunities_ibfk_1
FOREIGN KEY (projectId
)
REFERENCES ucon
.projects
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.students
CREATE TABLE IF NOT EXISTS ucon
.students
(
semester
INT NULL DEFAULT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
userId
INT NOT NULL,
courseId
INT NOT NULL,
eductionalInstitutionId
INT NOT NULL,
PRIMARY KEY (userId
),
INDEX courseId
(courseId
ASC) VISIBLE,
INDEX eductionalInstitutionId
(eductionalInstitutionId
ASC) VISIBLE,
CONSTRAINT students_ibfk_1
FOREIGN KEY (userId
)
REFERENCES ucon
.users
(id
)
ON UPDATE CASCADE,
CONSTRAINT students_ibfk_2
FOREIGN KEY (courseId
)
REFERENCES ucon
.courses
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT students_ibfk_3
FOREIGN KEY (eductionalInstitutionId
)
REFERENCES ucon
.educational_institutions
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.matches
CREATE TABLE IF NOT EXISTS ucon
.matches
(
id
INT NOT NULL AUTO_INCREMENT,
from
VARCHAR(1) NOT NULL,
status
VARCHAR(32) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
opportunityId
INT NOT NULL,
studentId
INT NOT NULL,
PRIMARY KEY (id
),
INDEX opportunityId
(opportunityId
ASC) VISIBLE,
INDEX studentId
(studentId
ASC) VISIBLE,
CONSTRAINT matches_ibfk_1
FOREIGN KEY (opportunityId
)
REFERENCES ucon
.opportunities
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT matches_ibfk_2
FOREIGN KEY (studentId
)
REFERENCES ucon
.students
(userId
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.messages
CREATE TABLE IF NOT EXISTS ucon
.messages
(
id
INT NOT NULL AUTO_INCREMENT,
message
VARCHAR(512) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
matchId
INT NOT NULL,
authorId
INT NOT NULL,
PRIMARY KEY (id
),
INDEX matchId
(matchId
ASC) VISIBLE,
INDEX authorId
(authorId
ASC) VISIBLE,
CONSTRAINT messages_ibfk_1
FOREIGN KEY (matchId
)
REFERENCES ucon
.matches
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT messages_ibfk_2
FOREIGN KEY (authorId
)
REFERENCES ucon
.users
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.research_areas
CREATE TABLE IF NOT EXISTS ucon
.research_areas
(
id
INT NOT NULL AUTO_INCREMENT,
researchArea
VARCHAR(64) NOT NULL,
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
PRIMARY KEY (id
),
UNIQUE INDEX researchArea
(researchArea
ASC) VISIBLE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.students_follow_teachers
CREATE TABLE IF NOT EXISTS ucon
.students_follow_teachers
(
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
studentUserId
INT NOT NULL,
teacherUserId
INT NOT NULL,
PRIMARY KEY (studentUserId
, teacherUserId
),
INDEX teacherUserId
(teacherUserId
ASC) VISIBLE,
CONSTRAINT students_follow_teachers_ibfk_1
FOREIGN KEY (studentUserId
)
REFERENCES ucon
.students
(userId
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT students_follow_teachers_ibfk_2
FOREIGN KEY (teacherUserId
)
REFERENCES ucon
.teachers
(userId
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- Table ucon
.users_has_research_areas
CREATE TABLE IF NOT EXISTS ucon
.users_has_research_areas
(
createdAt
DATETIME NOT NULL,
updatedAt
DATETIME NOT NULL,
researchAreaId
INT NOT NULL,
userId
INT NOT NULL,
PRIMARY KEY (researchAreaId
, userId
),
INDEX userId
(userId
ASC) VISIBLE,
CONSTRAINT users_has_research_areas_ibfk_1
FOREIGN KEY (researchAreaId
)
REFERENCES ucon
.research_areas
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT users_has_research_areas_ibfk_2
FOREIGN KEY (userId
)
REFERENCES ucon
.users
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;