Home | Sprints | Requisitos | Arquitetura | Configuração | Mockups | BD | Instalação | GP | Horários | Processo |
---|
Página do Banco de Dados
Aqui deve ser explicado com modelos e explicações como o Banco de Dados foi construido, onde se deve focar em:
- Como ele foi desenvolvido, com Imagens e Diagramas
- o Collections(Entities)
- o ScriptSQL
Definição da Linguagem
No início do semestre, ou seja, na primeira semana da Sprint 0, todos integrantes do time responderam um Formulário de Mapeamento de Tecnologias. A partir dos resultados desse formulário, pudemos avaliar qual linguagem (que era adequada para o uso no projeto) era a mais dominada pelo time como um todo e quais delas que os integrantes gostariam de trabalhar. Para a tecnologia do Banco de Dados, o resultado foi o seguinte:
A partir dos resultados obtidos, fizemos a seguinte escolha:
- SGBD: MySQL.
Modelagem Lógica:
Entidades:
user: Como o sistema de login será utilizando login com o Google, armazenaremos somente o email do usuario (PK, para poder relaciona-lo com outras entidades), nome e foto de perfil.
movie: De acordo com as definicões retiradas das reuniões com os stakeholders, sobre filmes é necessário armazenar: título, título original, sinopse, crítica, curador que botou o filme no sistema, ano de lançamento, duração e o path para o banner do filme. Além disso também estamos utilizando um idFilme como PK.
achievement: De acordo com as definicões retiradas das reuniões com os stakeholders, sobre conquistas é necessário armazenar: titulo, descricao, e imagem da conqusita. Além disso também estamos usando um id como PK, armazenando a meta que o usuário precisa alcançar para obter a conquista e o id da tag caso a conquista seja com base na mesma.
tag: De acordo com as definicões retiradas das reuniões com os stakeholders, sobre tags é necessário armazenar: somente o seu nome, mas também utilizamos um ID como PK.
plataform: De acordo com as definicões retiradas das reuniões com os stakeholders, sobre plataforma é necessário armazenar: somente o seu nome, mas também utilizamos um ID como PK.
actor: De acordo com as definicões retiradas das reuniões com os stakeholders, sobre plataforma é necessário armazenar: somente o seu nome, mas também utilizamos um ID como PK.
Entidades de relacionamento:
Sobre filtros:
user_plataform: Linka o email do usuario com o id da plataforma (as 2 PK), para fazer a relacao de N x N sobre filtrar os filmes por plataforma para um usuário especifico.
user_tag: linka o email do usuario com o id da tag (as 2 PK) e um peso, para fazer a relacao de 1 x 1 sobre filtrar os filmes por tag para um usuário específico.
Aleatoridade no filtro: Deixamos a taxa de aleatoriedade dos filtros na propria entidade usuário.
Sobre filmes:
movie_plataform: Entidade de relacionamento que linka o idFilme com idPlataforma, para fazer a relação de N x N entre plataformas nas quais o filme específico está disponível.
movie_tag: Entidade de relacionamento que linka o idFilme com idTag, para fazer a relação de N x N entre tags que um filme específico possui.
Sobre usuarios:
user_achievement: Entidade de relacionamento que linka o id usuario a id conquista, serve tanto para armazenar as conquistas adquiridas quanto o progresso de conquistas nao adquiridas, utilizando metaPontuacao<=atualPontuacao.
user_movie: Entidade de relacionamento feita para armazenar os filmes selecionados pelo usuário, linkando o idFilme com idUsuario e ainda armazenando o status referente à definição do relacionamento (já vi, quero assistir, etc.).
Sobre atores:
cast: Entidade de relacionamento feita para armazenar os atores e diretores vinculados ao filme em questao.
Script SQL gerado a partir do modelo lógico (astah):
-- -----------------------------------------------------
-- Schema cine_clube
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `cine_clube` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ;
USE `cine_clube` ;
-- -----------------------------------------------------
-- Table `cine_clube`.`tag`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`tag` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 2038
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `cine_clube`.`achievement`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`achievement` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`description` VARCHAR(255) NOT NULL,
`pathImage` VARCHAR(255) NOT NULL,
`targetScore` INT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`tagId` INT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `FK_7efd7420481a4d3cc3ee6649223`
FOREIGN KEY (`tagId`)
REFERENCES `cine_clube`.`tag` (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 8
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `FK_7efd7420481a4d3cc3ee6649223` ON `cine_clube`.`achievement` (`tagId` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `cine_clube`.`actor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`actor` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 91
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `cine_clube`.`movie`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`movie` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`originalTitle` VARCHAR(255) NOT NULL,
`synopsis` TEXT NOT NULL,
`critic` TEXT NOT NULL,
`curator` VARCHAR(255) NOT NULL,
`year` CHAR(4) NOT NULL,
`pathBanner` VARCHAR(255) NOT NULL,
`duration` INT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 16
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `cine_clube`.`cast`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`cast` (
`actorId` INT NOT NULL,
`movieId` INT NOT NULL,
`director` TINYINT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`actorId`, `movieId`),
CONSTRAINT `FK_d3ec511ff2f2564f167064a2ee0`
FOREIGN KEY (`actorId`)
REFERENCES `cine_clube`.`actor` (`id`),
CONSTRAINT `FK_dcacf1ce3d9cc81bc6427f0f6b3`
FOREIGN KEY (`movieId`)
REFERENCES `cine_clube`.`movie` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `FK_dcacf1ce3d9cc81bc6427f0f6b3` ON `cine_clube`.`cast` (`movieId` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `cine_clube`.`platform`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`platform` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 3
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `cine_clube`.`movie_platform`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`movie_platform` (
`platform` INT NOT NULL,
`movie` INT NOT NULL,
PRIMARY KEY (`platform`, `movie`),
CONSTRAINT `FK_3cbb19e5cd833475a475fe41c33`
FOREIGN KEY (`platform`)
REFERENCES `cine_clube`.`platform` (`id`)
ON DELETE CASCADE,
CONSTRAINT `FK_4d3c4c6ee96613bc4ef3673e771`
FOREIGN KEY (`movie`)
REFERENCES `cine_clube`.`movie` (`id`)
ON DELETE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `IDX_3cbb19e5cd833475a475fe41c3` ON `cine_clube`.`movie_platform` (`platform` ASC) VISIBLE;
CREATE INDEX `IDX_4d3c4c6ee96613bc4ef3673e77` ON `cine_clube`.`movie_platform` (`movie` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `cine_clube`.`movie_tag`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`movie_tag` (
`tagId` INT NOT NULL,
`movieId` INT NOT NULL,
`super` TINYINT NOT NULL,
`weight` INT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`tagId`, `movieId`),
CONSTRAINT `FK_31fc580c1847949cb41e65a34e0`
FOREIGN KEY (`tagId`)
REFERENCES `cine_clube`.`tag` (`id`),
CONSTRAINT `FK_c5c695f219479d1f627143836d0`
FOREIGN KEY (`movieId`)
REFERENCES `cine_clube`.`movie` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `FK_c5c695f219479d1f627143836d0` ON `cine_clube`.`movie_tag` (`movieId` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `cine_clube`.`user`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`user` (
`id` VARCHAR(255) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`photoPath` VARCHAR(255) NOT NULL,
`randomness` INT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `cine_clube`.`user_achievement`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`user_achievement` (
`userId` VARCHAR(255) NOT NULL,
`achievementId` INT NOT NULL,
`currentScore` INT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`userId`, `achievementId`),
CONSTRAINT `FK_2a418515c335cab7c5ba70c28b3`
FOREIGN KEY (`userId`)
REFERENCES `cine_clube`.`user` (`id`),
CONSTRAINT `FK_843ecd1965f1aac694875674a18`
FOREIGN KEY (`achievementId`)
REFERENCES `cine_clube`.`achievement` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `FK_843ecd1965f1aac694875674a18` ON `cine_clube`.`user_achievement` (`achievementId` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `cine_clube`.`user_movie`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`user_movie` (
`userId` VARCHAR(255) NOT NULL,
`movieId` INT NOT NULL,
`status` VARCHAR(255) NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`userId`, `movieId`),
CONSTRAINT `FK_13836cd6ae56580075e1bd33967`
FOREIGN KEY (`userId`)
REFERENCES `cine_clube`.`user` (`id`),
CONSTRAINT `FK_3e731d371b40a498f72b3e57d9d`
FOREIGN KEY (`movieId`)
REFERENCES `cine_clube`.`movie` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `FK_3e731d371b40a498f72b3e57d9d` ON `cine_clube`.`user_movie` (`movieId` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `cine_clube`.`user_tag`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cine_clube`.`user_tag` (
`userId` VARCHAR(255) NOT NULL,
`tagId` INT NOT NULL,
`totalPoint` INT NOT NULL,
`created_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated_At` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`userId`, `tagId`),
CONSTRAINT `FK_7cf25d8a11ccc18f04cbd8cb46c`
FOREIGN KEY (`userId`)
REFERENCES `cine_clube`.`user` (`id`),
CONSTRAINT `FK_d1c8261be4e02dc1df64636250c`
FOREIGN KEY (`tagId`)
REFERENCES `cine_clube`.`tag` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `FK_d1c8261be4e02dc1df64636250c` ON `cine_clube`.`user_tag` (`tagId` ASC) VISIBLE;