Modelagem de dados

Banco de dados paperbook

Segue as tabelas Cliente; Endereço; Contato; Categoria; Fornecedor; Produto; Pedido; Detalhes do Pedido;


No projeto de banco de dados, normalmente são considerados dois níveis de abstração de modelo de dados, o do modelo conceitual e o do modelo lógico. Além dos dois citados acima, também temos o modelo físico com a usa implementação.

Níveis de modelagem - Modelo de dados conceitual

Este é o modelo de “quadro geral” que representa a estrutura geral e o conteúdo, mas não os detalhes do plano de dados. É o ponto de partida típico para modelagem de dados, identificando os vários conjuntos de dados e fluxo de dados através da organização. O modelo conceitual é o projeto de alto nível para o desenvolvimento dos modelos lógico e físico e é uma parte importante da documentação da arquitetura de dados.

Modelagem conceitual no Excel

"Primeira modelagem no excel"

Modelagem conceitual no excel - 1ºNormalização

"Primeira modelagem no excel"

Modelagem conceitual no excel - 2ºNormalização

"Primeira modelagem no excel"

Modelagem de dados com o diagrama de entidade relacional

Neste diagrama temos as cardenalidades

  • Um para Muitos
  • Um para Um "Segunda modelagem"

Modelagem lógica

Níveis de modelagem - Modelo de dados lógico

Um modelo lógico é uma descrição de um banco de dados no nível de abstração visto pelo usuário do SGBD. Assim, o modelo lógico é dependente do tipo particular de SGBD que está sendo usado. Vamos tratar apenas modelos lógicos referentes a SGBD relacional. Em um SGBD relacional, os dados estão organizados na forma de tabelas.

"Modelagem Lógica - Diagrama"

Modelo Físico do banco de dados

Abaixo esta todo o codigo para a geração do banco de dados

-- MySQL Script generated by MySQL Workbench
-- Tue Jun 27 14:01:42 2023
-- 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 paperbook
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema paperbook
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `paperbook` DEFAULT CHARACTER SET utf8 ;
USE `paperbook` ;

-- -----------------------------------------------------
-- Table `paperbook`.`Usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Usuario` (
`idusuario` INT NOT NULL AUTO_INCREMENT,
`login` VARCHAR(20) NOT NULL,
`senha` VARCHAR(255) NOT NULL,
`nivelacesso` VARCHAR(45) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci' NOT NULL,
PRIMARY KEY (`idusuario`),
UNIQUE INDEX `login_UNIQUE` (`login` ASC))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Contato`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Contato` (
`idcontato` INT NOT NULL AUTO_INCREMENT,
`telefonecelular` VARCHAR(20) NULL,
`telefoneresidencial` VARCHAR(20) NULL,
`email` VARCHAR(50) NULL,
PRIMARY KEY (`idcontato`),
UNIQUE INDEX `telefonecelular_UNIQUE` (`telefonecelular` ASC),
UNIQUE INDEX `email_UNIQUE` (`email` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Endereco`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Endereco` (
`idendereco` INT NOT NULL AUTO_INCREMENT,
`tipo` VARCHAR(20) NOT NULL,
`logradouro` VARCHAR(50) NOT NULL,
`cep` VARCHAR(10) NOT NULL,
`complemento` VARCHAR(50) NULL,
`bairro` VARCHAR(45) NOT NULL,
`numero` VARCHAR(10) NOT NULL,
`referencia` VARCHAR(45) NULL,
`cidade` VARCHAR(45) NOT NULL,
`estado` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idendereco`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Cliente`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Cliente` (
`idcliente` INT NOT NULL AUTO_INCREMENT,
`nomecliente` VARCHAR(50) NOT NULL,
`cpfcliente` VARCHAR(15) NOT NULL,
`rgcliente` VARCHAR(20) NOT NULL,
`sexocliente` ENUM("Masculino", "Feminino") NOT NULL,
`datanascimentocliente` DATE NOT NULL,
`idendereco` INT NOT NULL,
`idcontato` INT NOT NULL,
`idusuario` INT NOT NULL,
PRIMARY KEY (`idcliente`),
UNIQUE INDEX `cpfcliente_UNIQUE` (`cpfcliente` ASC),
UNIQUE INDEX `rgcliente_UNIQUE` (`rgcliente` ASC),
INDEX `fk_cliente_pk_contato_idx` (`idcontato` ASC) ,
INDEX `fk_cliente_pk_endereco_idx` (`idendereco` ASC) ,
INDEX `fk_cliente_pk_usuario_idx` (`idusuario` ASC) ,
CONSTRAINT `fk_cliente_pk_contato`
  FOREIGN KEY (`idcontato`)
  REFERENCES `paperbook`.`Contato` (`idcontato`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_cliente_pk_endereco`
  FOREIGN KEY (`idendereco`)
  REFERENCES `paperbook`.`Endereco` (`idendereco`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_cliente_pk_usuario`
  FOREIGN KEY (`idusuario`)
  REFERENCES `paperbook`.`Usuario` (`idusuario`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Cargo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Cargo` (
`idcargo` INT NOT NULL AUTO_INCREMENT,
`titulocargo` VARCHAR(30) NOT NULL,
`salario` DECIMAL(7,2) NOT NULL,
`beneficio` VARCHAR(45) NOT NULL,
`cargohoraria` VARCHAR(40) NOT NULL,
PRIMARY KEY (`idcargo`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Funcionario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Funcionario` (
`idfuncionario` INT NOT NULL AUTO_INCREMENT,
`nomefuncionario` VARCHAR(50) NOT NULL,
`cpffuncionario` VARCHAR(15) NOT NULL,
`rgfuncionario` VARCHAR(20) NOT NULL,
`sexofuncionario` ENUM("Masculino", "Feminino") NOT NULL,
`datanascimentofuncionario` DATE NOT NULL,
`superior` INT NOT NULL,
`idcargo` INT NOT NULL,
`idendereco` INT NOT NULL,
`idcontato` INT NOT NULL,
`idusuario` INT NOT NULL,
PRIMARY KEY (`idfuncionario`),
UNIQUE INDEX `cpffuncionario_UNIQUE` (`cpffuncionario` ASC) ,
UNIQUE INDEX `rgfuncionario_UNIQUE` (`rgfuncionario` ASC) ,
INDEX `fk_funcionario_pk_cargo_idx` (`idcargo` ASC) ,
INDEX `fk_funcionario_pk_endereco_idx` (`idendereco` ASC) ,
INDEX `fk_funcionario_pk_contato_idx` (`idcontato` ASC) ,
INDEX `fk_funcionario_pk_usuario_idx` (`idusuario` ASC) ,
INDEX `fk_funcionario_pk_superior_idx` (`superior` ASC) ,
CONSTRAINT `fk_funcionario_pk_cargo`
  FOREIGN KEY (`idcargo`)
  REFERENCES `paperbook`.`Cargo` (`idcargo`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_funcionario_pk_endereco`
  FOREIGN KEY (`idendereco`)
  REFERENCES `paperbook`.`Endereco` (`idendereco`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_funcionario_pk_contato`
  FOREIGN KEY (`idcontato`)
  REFERENCES `paperbook`.`Contato` (`idcontato`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_funcionario_pk_usuario`
  FOREIGN KEY (`idusuario`)
  REFERENCES `paperbook`.`Usuario` (`idusuario`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_funcionario_pk_superior`
  FOREIGN KEY (`superior`)
  REFERENCES `paperbook`.`Funcionario` (`idfuncionario`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Fornecedor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Fornecedor` (
`idfornecedor` INT NOT NULL AUTO_INCREMENT,
`razaosocial` VARCHAR(45) NOT NULL,
`cnpj` VARCHAR(35) NOT NULL,
`tipoproduto` VARCHAR(45) NOT NULL,
`idendereco` INT NOT NULL,
`idcontato` INT NOT NULL,
PRIMARY KEY (`idfornecedor`),
UNIQUE INDEX `razaosocial_UNIQUE` (`razaosocial` ASC) ,
UNIQUE INDEX `cnpj_UNIQUE` (`cnpj` ASC) ,
INDEX `fk_fornecedor_pk_endereco_idx` (`idendereco` ASC) ,
INDEX `fk_fornecedor_pk_contato_idx` (`idcontato` ASC) ,
CONSTRAINT `fk_fornecedor_pk_endereco`
  FOREIGN KEY (`idendereco`)
  REFERENCES `paperbook`.`Endereco` (`idendereco`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_fornecedor_pk_contato`
  FOREIGN KEY (`idcontato`)
  REFERENCES `paperbook`.`Contato` (`idcontato`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Categoria`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Categoria` (
`idcategoria` INT NOT NULL AUTO_INCREMENT,
`nomecategoria` VARCHAR(40) NOT NULL,
`descricaocategoria` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idcategoria`),
UNIQUE INDEX `nomecategoria_UNIQUE` (`nomecategoria` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Lote`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Lote` (
`idlote` INT NOT NULL AUTO_INCREMENT,
`numerolote` INT NOT NULL,
`fabricacao` VARCHAR(45) NOT NULL,
`validade` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idlote`),
UNIQUE INDEX `numerolote_UNIQUE` (`numerolote` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Produto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Produto` (
`idproduto` INT NOT NULL AUTO_INCREMENT,
`nomeproduto` VARCHAR(45) NOT NULL,
`descricaoproduto` VARCHAR(45) NOT NULL,
`codigobarras` VARCHAR(45) NOT NULL,
`preco` DOUBLE NOT NULL,
`observacao` VARCHAR(45) NOT NULL,
`idcategoria` INT NOT NULL,
`idfornecedor` INT NOT NULL,
`idlote` INT NOT NULL,
PRIMARY KEY (`idproduto`),
UNIQUE INDEX `codigobarras_UNIQUE` (`codigobarras` ASC) ,
INDEX `fk_produto_pk_categoria_idx` (`idcategoria` ASC) ,
INDEX `fk_produto_pk_lote_idx` (`idlote` ASC) ,
INDEX `fk_produto_pk_fornecedor_idx` (`idfornecedor` ASC) ,
CONSTRAINT `fk_produto_pk_categoria`
  FOREIGN KEY (`idcategoria`)
  REFERENCES `paperbook`.`Categoria` (`idcategoria`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_produto_pk_lote`
  FOREIGN KEY (`idlote`)
  REFERENCES `paperbook`.`Lote` (`idlote`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_produto_pk_fornecedor`
  FOREIGN KEY (`idfornecedor`)
  REFERENCES `paperbook`.`Fornecedor` (`idfornecedor`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`Pedido`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`Pedido` (
`idpedido` INT NOT NULL AUTO_INCREMENT,
`loja` VARCHAR(45) NOT NULL,
`unidadeloja` VARCHAR(35) NOT NULL,
`numeroprotocolo` INT NOT NULL,
`formapagamento` VARCHAR(20) NOT NULL,
`parcelas` VARCHAR(35) NOT NULL,
`valorparcela` DOUBLE NOT NULL,
`valortotalpedido` DECIMAL(7,2) NOT NULL,
`datahora` DATE NOT NULL,
`idfuncionario` INT NOT NULL,
`idcliente` INT NOT NULL,
PRIMARY KEY (`idpedido`),
UNIQUE INDEX `numeroprotocolo_UNIQUE` (`numeroprotocolo` ASC) ,
INDEX `fk_pedido_pk_funcionario_idx` (`idfuncionario` ASC) ,
INDEX `fk_pedido_pk_cliente_idx` (`idcliente` ASC) ,
CONSTRAINT `fk_pedido_pk_funcionario`
  FOREIGN KEY (`idfuncionario`)
  REFERENCES `paperbook`.`Funcionario` (`idfuncionario`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_pedido_pk_cliente`
  FOREIGN KEY (`idcliente`)
  REFERENCES `paperbook`.`Cliente` (`idcliente`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `paperbook`.`detalhepedido`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`detalhepedido` (
`iddetalhepedido` INT NOT NULL AUTO_INCREMENT,
`quantidade` INT NOT NULL,
`valortotal` DECIMAL(7,2) NOT NULL,
`precounitario` DECIMAL(7,2) NOT NULL,
`idpedido` INT NOT NULL,
`idproduto` INT NOT NULL,
PRIMARY KEY (`iddetalhepedido`),
INDEX `fk_detalhepedido_pk_pedido_idx` (`idpedido` ASC) ,
INDEX `fk_detalhepedido_pk_produto_idx` (`idproduto` ASC) ,
CONSTRAINT `fk_detalhepedido_pk_pedido`
  FOREIGN KEY (`idpedido`)
  REFERENCES `paperbook`.`Pedido` (`idpedido`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
CONSTRAINT `fk_detalhepedido_pk_produto`
  FOREIGN KEY (`idproduto`)
  REFERENCES `paperbook`.`Produto` (`idproduto`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;