Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • C cineclube-wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Cine Clube
  • cineclube-wiki
  • Wiki
  • banco_dados

Last edited by Augusto May 29, 2021
Page history

banco_dados

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:

Conhecimentos BD

Gostaria BD

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;
Clone repository
  • Imagens
    • cineclube cronograma.pdf
  • Utilizando a wiki
    • adicionando imagens
    • escrevendo em markdown
    • wiki no editor de texto
  • arquitetura
  • banco_dados
  • configuracao
  • gp
  • Home
  • horarios
  • instalacao
  • mockups
  • processo
  • requisitos
  • sprints