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.
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.
- Um para Muitos
- Um para Um
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.
-- MySQL Script generated by MySQL Workbench
-- Thu Aug 10 14:36:33 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 mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `paperbook` DEFAULT CHARACTER SET utf8 ;
USE `paperbook` ;
-- -----------------------------------------------------
-- Table `mydb`.`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) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`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 `telefonecesidencial_UNIQUE` (`telefonecelular` ASC) VISIBLE,
UNIQUE INDEX `email_UNIQUE` (`email` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`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,
`numero` VARCHAR(10) NOT NULL,
`complemento` VARCHAR(45) NULL,
`referencia` VARCHAR(45) NULL,
`bairro` VARCHAR(45) NOT NULL,
`cidade` VARCHAR(45) NOT NULL,
`estado` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idendereco`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`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(15) 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 `rgcliente_UNIQUE` (`rgcliente` ASC) VISIBLE,
UNIQUE INDEX `cpfcliente_UNIQUE` (`cpfcliente` ASC) VISIBLE,
INDEX `fk_cliente_pk_contato_idx` (`idcontato` ASC) VISIBLE,
INDEX `fk_cliente_pk_endereco_idx` (`idendereco` ASC) VISIBLE,
INDEX `fk_cliente_pk_usuario_idx` (`idusuario` ASC) VISIBLE,
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 `mydb`.`Cargo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`cargo` (
`idcargo` INT NOT NULL AUTO_INCREMENT,
`titulocargo` VARCHAR(50) NOT NULL,
`salario` DECIMAL(10,2) NOT NULL,
`beneficio` VARCHAR(100) NOT NULL,
`cargahoraria` VARCHAR(50) NOT NULL,
PRIMARY KEY (`idcargo`),
UNIQUE INDEX `titulocargo_UNIQUE` (`titulocargo` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`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(15) 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) VISIBLE,
UNIQUE INDEX `rgfuncionario_UNIQUE` (`rgfuncionario` ASC) VISIBLE,
INDEX `fk_funcionario_pk_superior_idx` (`superior` ASC) VISIBLE,
INDEX `fk_funcionario_pk_cargo_idx` (`idcargo` ASC) VISIBLE,
INDEX `fk_funcionario_pk_endereco_idx` (`idendereco` ASC) VISIBLE,
INDEX `fk_funcionario_pk_contato_idx` (`idcontato` ASC) VISIBLE,
INDEX `fk_funcionario_pk_usuario_idx` (`idusuario` ASC) VISIBLE,
CONSTRAINT `fk_funcionario_pk_superior`
FOREIGN KEY (`superior`)
REFERENCES `paperbook`.`funcionario` (`idfuncionario`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
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)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Fornecedor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`fornecedor` (
`idfornecedor` INT NOT NULL AUTO_INCREMENT,
`razaosocial` VARCHAR(30) NOT NULL,
`cnpj` VARCHAR(15) NOT NULL,
`tipodeproduto` VARCHAR(100) NOT NULL,
`idendereco` INT NOT NULL,
`idcontato` INT NOT NULL,
PRIMARY KEY (`idfornecedor`),
UNIQUE INDEX `razaosocial_UNIQUE` (`razaosocial` ASC) VISIBLE,
UNIQUE INDEX `cnpj_UNIQUE` (`cnpj` ASC) VISIBLE,
INDEX `fk_fornecedor_pk_endereco_idx` (`idendereco` ASC) VISIBLE,
INDEX `fk_fornecedor_pk_contato_idx` (`idcontato` ASC) VISIBLE,
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 `mydb`.`Lote`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`lote` (
`idlote` INT NOT NULL AUTO_INCREMENT,
`numerolote` VARCHAR(10) NOT NULL,
`fabricacao` DATE NOT NULL,
`validade` DATE NOT NULL,
PRIMARY KEY (`idlote`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Categoria`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`categoria` (
`idcategoria` INT NOT NULL AUTO_INCREMENT,
`nomecategoria` VARCHAR(50) NOT NULL,
`descricaocategoria` VARCHAR(255) NOT NULL,
PRIMARY KEY (`idcategoria`),
UNIQUE INDEX `nomecategoria_UNIQUE` (`nomecategoria` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Produto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`produto` (
`idproduto` INT NOT NULL AUTO_INCREMENT,
`nomeproduto` VARCHAR(50) NOT NULL,
`descricaoproduto` VARCHAR(255) NOT NULL,
`codigobarras` VARCHAR(200) NOT NULL,
`preco` DECIMAL(10,2) NOT NULL,
`observacao` VARCHAR(200) NULL,
`idfornecedor` INT NOT NULL,
`idlote` INT NOT NULL,
`idcategoria` INT NOT NULL,
PRIMARY KEY (`idproduto`),
UNIQUE INDEX `codigobarras_UNIQUE` (`codigobarras` ASC) VISIBLE,
INDEX `fk_produto_pk_fornecedor_idx` (`idfornecedor` ASC) VISIBLE,
INDEX `fk_produto_pk_lote_idx` (`idlote` ASC) VISIBLE,
INDEX `fk_produto_pk_cargo_idx` (`idcategoria` ASC) VISIBLE,
CONSTRAINT `fk_produto_pk_fornecedor`
FOREIGN KEY (`idfornecedor`)
REFERENCES `paperbook`.`fornecedor` (`idfornecedor`)
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_cargo`
FOREIGN KEY (`idcategoria`)
REFERENCES `paperbook`.`categoria` (`idcategoria`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Pedido`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`pedido` (
`idpedido` INT NOT NULL AUTO_INCREMENT,
`loja` VARCHAR(45) NOT NULL,
`unidadeloja` VARCHAR(45) NOT NULL,
`numeroprotocolo` VARCHAR(20) NOT NULL,
`formapagamento` VARCHAR(15) NOT NULL,
`parcelas` VARCHAR(20) NULL,
`valorparcela` DECIMAL(10,2) NULL,
`valortotalpedido` DECIMAL(10,2) NOT NULL,
`datahora` DATETIME NOT NULL,
`idfuncionario` INT NOT NULL,
`idcliente` INT NOT NULL,
PRIMARY KEY (`idpedido`),
UNIQUE INDEX `numeroprotocolo_UNIQUE` (`numeroprotocolo` ASC) VISIBLE,
INDEX `fk_pedido_pk_funcionario_idx` (`idfuncionario` ASC) VISIBLE,
INDEX `fk_pedido_pk_cliente_idx` (`idcliente` ASC) VISIBLE,
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 `mydb`.`DetalhePedido`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `paperbook`.`detalhePedido` (
`iddetalhepedido` INT NOT NULL AUTO_INCREMENT,
`quantidade` INT NOT NULL,
`valototal` DECIMAL(10,2) NOT NULL,
`precounitario` DECIMAL(10,2) NOT NULL,
`idpedido` INT NOT NULL,
`idproduto` INT NOT NULL,
PRIMARY KEY (`iddetalhepedido`),
INDEX `fk_detalhePedido_pk_pedido_idx` (`idpedido` ASC) VISIBLE,
INDEX `fk_detalhePedido_pk_produto_idx` (`idproduto` ASC) VISIBLE,
CONSTRAINT `fk_detalhePedido_pk_pedido`
FOREIGN KEY (`idpedido`)
REFERENCES `paperbook`.`pedido` (`idpedido`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_detalhePedidousuario_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;