SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
ANO
023
2
ATIVIDADE PRÁTICA
BANCO DE DADOS
Roteiro Elaborado por:
Prof. MSc. Guilherme Ditzel Patriota
Roteiro de Atividade Prática de
Banco de Dados
INTRODUÇÃO
Olá a todos.
Sejam todos muito bem-vindos!
Esta avaliação foi planejada e preparada para a disciplina de Banco de Dados dos Cursos de
Tecnologia do Centro Universitário Internacional UNINTER.
O que tenho que fazer neste trabalho? Resposta:
PRÁTICA – MODELAR E IMPLEMENTAR UM BANCO DE DADOS SQL PARA
UM PROJETO DE SOFTWARE JÁ EXISTENTE SEU.
O objetivo desta atividade é fazer com que você, aluno, desenvolva os conhecimentos teóricos
aprendidos na rota de aprendizagem e aulas telepresenciais, de maneira prática e aplicável no
mercado de trabalho. Para tanto, será necessário o uso de ferramentas online como:
•
•
•
•
•
•
•
•
•
ERDPlus.com
PlantUML.com
Mermaid.live
draw.io
Bizagi
Diagramas.net
lucidchart.com
PowerPoint
Paint
Você poderá, ainda, desenvolver seus diagramas e esta atividade em qualquer destas
ferramentas ou qualquer outra que você desejar.
Ao longo desse roteiro serão passadas as orientações gerais para realização da avaliação bem
como os seus critérios de correção. Na sequência, apresenta-se um exemplo comentado de como
se deve ser entregue uma questão. Seguindo o roteiro estarão as práticas a serem realizadas, cada
uma delas possui uma explicação de como deve ser feita, como será cobrada e algumas dicas. Por
fim, apresento uma seção as com as respostas das dúvidas mais frequentes realizadas por vocês.
Bons estudos!
(Não entendi. Pode resumir o que fazer no trabalho?)
No mais, desejo-lhe boa atividade prática em nome dos professores
da disciplina de Banco de Dados.
1
Roteiro de Atividade Prática de
Banco de Dados
LISTA DE FIGURAS
Figura 1: Diagrama de caso de uso com 3 requisitos funcionais apresentados, o cadastro de usuários, o processo de
venda e o processo de compra. ______________________________________________________________________ 15
2
Roteiro de Atividade Prática de
Banco de Dados
LISTA DE TABELAS
Tabela 1: Possíveis notas no formato de apresentação........................................................................................................ 7
Tabela 2: Possíveis notas critério de Identificação Pessoal................................................................................................... 8
Tabela 3: Possíveis notas na apresentação do código.......................................................................................................... 9
Tabela 4: Possíveis notas na apresentação das imagens/fotos/diagramas ...........................Error! Bookmark not defined.
Tabela 5: Possíveis notas na apresentação das respostas......................................................Error! Bookmark not defined.
3
Roteiro de Atividade Prática de
Banco de Dados
SUMÁRIO
INTRODUÇÃO......................................................................................................................1
LISTA DE FIGURAS ...............................................................................................................2
LISTA DE TABELAS ...............................................................................................................3
SUMÁRIO............................................................................................................................4
ORIENTAÇÕES GERAIS .........................................................................................................5
FORMATO DE ENTREGA ....................................................................Error! Bookmark not defined.
CRITÉRIOS DE AVALIAÇÃO ...................................................................................................6
FORMATO DA APRESENTAÇÃO....................................................................................................7
IDENTIFICAÇÃO PESSOAL ..................................................................Error! Bookmark not defined.
REQUISITOS...................................................................................... Error! Bookmark not defined.
DIAGRAMA....................................................................................... Error! Bookmark not defined.
RESPOSTA................................................................................................................................. 11
EXEMPLO DE APRESENTAÇÃO DE QUESTÃO...............................Error! Bookmark not defined.
PRÁTICAS ..........................................................................................................................26
MOTIVAÇÃO DO TRABALHO...................................................................................................... 26
DESCRIÇÃO DO VÍDEO DE ENTREVISTA COM CLIENTE......................... Error! Bookmark not defined.
OBJETIVO DO PROJETO ............................................................................................................. 26
PRÁTICA 01- COLETA DE REQUISITOS, CRIAÇÃO DE DIAGRAMA DE CASO DE USO E CRIAÇÃO DE
DIAGRAMA DE CLASSES...................................................................................................................... 27
QUESTÃO 01: Criação de diagrama de caso de uso............................................Error! Bookmark not defined.
QUESTÃO 02: Criação de diagrama de Classes. ..................................................Error! Bookmark not defined.
RESPOSTAS AS DÚVIDAS MAIS FREQUÊNTES......................................................................28
4
Roteiro de Atividade Prática de
Banco de Dados
ORIENTAÇÕES GERAIS
A entrega desta atividade prática deverá ser realizada pela área de “Trabalhos”, em formato
PDF com o caderno de resolução da atividade prática (modelo fornecido em sua rota).
O formato de entrega desejável das práticas desse roteiro deve estar de acordo com o que é
visto na seção “EXEMPLO DE APRESENTAÇÃO DE PRÁTICA” e no modelo de resolução da
atividade prática.
Os trabalhos devem ser enviados no formato .pdf.
5
Roteiro de Atividade Prática de
Banco de Dados
CRITÉRIOS DE AVALIAÇÃO
Os critérios de avaliação desse trabalho visam deixar a avaliação o mais justa e transparente
possível. Esta avaliação valerá um total de 100 pontos de trabalho.
O trabalho será composto por:
•
•
•
Introdução com descritivo do seu código base;
Um modelo conceitual do banco de dados (MER);
Um diagrama de entidade e relacionamento (DER/EER – modelo lógico estendido ou
simples);
•
•
•
Um modelo físico (comandos SQL para criação do banco e suas tabelas);
Código-fonte alterado para integração com o banco de dados;
Prints de funcionamento do seu código e banco de dados:
o Print do funcionamento do código executando uma consulta com JOIN;
o Print dos dados sendo alterados pelo software;
o Prints dos dados alterados no banco de dados (print do workbench antes e depois da
alteração dos dados pelo software).
O trabalho será avaliado e corrigido individualmente conforme a seguinte equação:
퐵퐴푆퐸 + 푀퐸푅 + 퐸퐸푅 + 푆퐶퐻퐸푀퐴 +
퐶푂퐷 + 푃푅푇
푁 = (퐹퐸).
6
Em que:
푁 (푁표푡푎 푑표 푇푟푎푏푎푙ℎ표): Nota total do trabalho, podendo variar de 0 até 100.
퐹퐸 (퐹표푟푚푎푡표 푑푎 퐸푛푡푟푒푔푎): Nota do Formato de Entrega, podendo variar de
0 até 1.
퐵퐴푆퐸 (퐼푛푡푟표푑푢çã표 푒 퐶ó푑ꢀ 푔표 푏푎푠푒): Nota a introdução e descrição do
funcionamento do código
base, podendo variar de 0 até 100.
푀퐸푅(푀표푑푒푙표 퐶표푛푐푒ꢀ푡푢푎푙): Nota do Modelo Conceitual proposto para seu
banco de dados,
podendo variar de 0 até 100.
퐸퐸푅(푀표푑푒푙표 퐿ó푔ꢀ 푐표 퐸푠푡푒푛푑ꢀ푑표): Nota do Modelo Lógico, podendo ser
0 ou 100.
푆퐶퐻퐸푀퐴(푀표푑푒푙표 퐹í푠ꢀ 푐표): Nota do Modelo Físico (códigos SQL de
criação do banco e
tabelas), podendo ser 0 ou 100.
퐶푂퐷(퐶ó푑ꢀ 푔표 − 퐹표푛푡푒): Nota do Código-Fonte alterado com a integração ao
banco de dados
e todas as queries necessárias implementadas, podendo ser 0 ou 100.
푃푅푇(푃푟ꢀ푛푡푠 푑푒 푓푢푛푐ꢀ표푛푎푚푒푛푡표): Nota dos Prints de Funcionamento do
seu código e banco
de dados, podendo ser 0 ou 100.
6
Roteiro de Atividade Prática de
Banco de Dados
FORMATO DE ENTREGA (FE)
O formato de entrega é um dos critérios de avaliação, pois um profissional deve ser capaz
de seguir normas no momento de elaboração de relatórios técnicos, manuais e outros documentos
afins, bem como ser capaz de apresentar seus dados de forma limpa e compreensível.
As possíveis notas desse critério são apresentadas na tabela a seguir:
Tabela 1: Possíveis notas no formato de entrega
NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS
Está de acordo com o exemplo (ver a seção
“EXEMPLO DE APRESENTAÇÃO DE PRÁTICA”
para maiores detalhes)
1,00 Formato de entrega está correto
Formato
parcialmente correto
de entrega está Está muito próximo do exemplo, mas apresenta
alguns erros
0,95
0,90 Formato de entrega está incorreto Não seguiu o exemplo.
7
Roteiro de Atividade Prática de
Banco de Dados
INTRODUÇÃO E CÓDIGO BASE (BASE)
Você deve criar uma introdução para seu trabalho que explique de forma simples como
funciona seu código e quais os dados serão armazenados e recuperados do banco de dados.
As possíveis notas para esse critério são apresentadas na tabela a seguir:
Tabela 2: Possíveis notas critério de introdução e código base.
NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS
Introdução que contém explicação do
100 código base e dos dados a serem Introdução completa.
colocados no banco de dados.
Não apresentou explicação do código
base.
Não apresentou introdução.
80 Introdução incompleta.
Sem introdução.
0
8
Roteiro de Atividade Prática de
Banco de Dados
MODELO CONCEITUAL (MER)
Apresentação de seu modelo conceitual proposto para seu banco de dados antes da
realização da normalização.
As possíveis notas para esse critério são apresentadas na tabela a seguir:
Tabela 3: Possíveis notas na apresentação do modelo conceitual
NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS
Seu modelo deve mostrar todas as entidades (e seus
tipos: normal, fraca e associativa), atributos,
relacionamentos e cardinalidades para atender às
necessidades do seu projeto, incluindo a sinalização
de atributos únicos, multivalorados, compostos e
derivados (se houver).
100 Modelo 100% correto.
Seu modelo está quase completamente correto,
porém possui até 3 erros ou faltas de partes
necessárias, como cardinalidade ou tipo de atributos.
Seu modelo possui mais de 3 erros ou faltas de
partes necessárias, como cardinalidade ou tipo de
atributos, porém ainda está coerente com o seu
objetivo no trabalho.
80 Modelo possui alguns erros.
60 Modelo possui muitos erros.
Nenhum modelo entregue.
0 Nenhum modelo conceitual foi colocado no trabalho.
9
Roteiro de Atividade Prática de
Banco de Dados
MODELO LÓGICO (DER/EER)
Apresentação de seu modelo lógico proposto para seu banco de dados após da realização
da normalização e com SGBD do tipo MySQL (ou outro SGBD Relacional de sala escolha).
As possíveis notas para esse critério são apresentadas na tabela a seguir:
Tabela 4: Possíveis notas na apresentação do modelo lógico
NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS
Seu modelo deve mostrar todas as tabelas, colunas,
relacionamentos e cardinalidades para atender às
necessidades do seu projeto, incluindo a sinalização
de chaves primárias, chaves estrangeiras e tipo de
dados em cada coluna.
100 Modelo 100% correto.
Seu modelo está quase completamente correto,
porém possui até 3 erros ou faltas de partes
necessárias, como cardinalidade ou tipo de dados
em colunas.
80 Modelo possui alguns erros.
Seu modelo possui mais de 3 erros ou faltas de
partes necessárias.
Nenhum modelo lógico foi colocado no trabalho.
60 Modelo possui muitos erros.
Nenhum modelo entregue.
0
10
Roteiro de Atividade Prática de
Banco de Dados
MODELO FÍSICO (SCHEMA)
Apresentação de seu modelo físico proposto para seu banco de dados contendo todos os
comandos SQL para criação completa do seu banco de dados.
As possíveis notas para esse critério são apresentadas na tabela a seguir:
Tabela 5: Possíveis notas na apresentação do modelo físico
NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS
Seu modelo deve mostrar o código de criação de
todas as tabelas, colunas, relacionamentos, triggers,
functions e procedures (se necessários).
Seu modelo está quase completamente correto,
porém possui até 3 erros.
100 Modelo 100% correto.
80 Modelo possui alguns erros.
Seu modelo possui mais de 3 erros, porém ainda está
coerente com o seu objetivo no trabalho.
Nenhum modelo físico foi colocado no trabalho.
60 Modelo possui muitos erros.
Nenhum modelo entregue.
0
11
Roteiro de Atividade Prática de
Banco de Dados
CÓDIGO-FONTE (COD)
Apresentação de seu código-fonte alterado com as devidas implementações de integração
com seu banco de dados com ao menos as seguintes queries:
•
•
•
1 SELECT contendo um JOIN
1 INSERT
1 UPDATE
As possíveis notas para esse critério são apresentadas na tabela a seguir:
Tabela 6: Possíveis notas na apresentação do código
NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS
Seu código deve mostrar uma função ou método
Código implementa os 3 tipos de para cada tipo de comando a ser enviado ao banco
100
queries solicitados. de dados, sendo 1 comando do tipo SELECT com um
JOIN, um INSERT e um UPDATE.
Código não apresentou 1 dos 3 Seu código contém dois dos três tipos de comando a
tipos de queries solicitadas. serem enviados ao banco de dados.
Código não apresentou 2 dos 3 Seu código contém um dos três tipos de comandos a
tipos de queries solicitadas. serem enviados ao banco de dados.
Código alterado não apresentado Nenhum código foi colocado no trabalho ou seu
comandos de query não código não implementa nenhum dos 3 tipos de
implementados. queries a serem enviados ao banco de dados.
80
60
0 e
12
Roteiro de Atividade Prática de
Banco de Dados
PRINTS DE FUNCIONAMENTO (PRT)
Apresentação dos prints que comprovem o funcionamento do seu software em
comunicação com seu banco de dados. Aqui é necessário colocar ao menos os seguintes prints.
•
•
•
1 Print do funcionamento do código executando uma consulta com JOIN;
1 Print dos dados sendo alterados pelo software;
2 Prints dos dados alterados no banco de dados (print do workbench antes e depois da
alteração dos dados pelo software)
As possíveis notas para esse critério são apresentadas na tabela a seguir:
Tabela 7: Possíveis notas na apresentação dos prints
NOTA DESCRIÇÃO NA DEVOLUTIVA
Todos os 4 prints estão presentes
no trabalho e comprovam o
COMENTÁRIOS
Seus prints devem estar presentes e comprovar o
funcionamento do software e do banco de dados,
bem como a integração entre os dois.
100
correto funcionamento do seu
projeto.
Apenas 3 dos 4 prints foram Um dos prints de comprovação de funcionamento
apresentados. não foi apresentado no trabalho.
Apenas 2 dos 4 prints foram Dois dos prints de comprovação de funcionamento
apresentados. não foi apresentado no trabalho.
Apenas 1 dos 4 prints foram Três dos prints de comprovação de funcionamento
80
0
0
6
4
apresentados. não foi apresentado no trabalho.
Nenhuma comprovação de funcionamento foi
apresentada.
0 Nenhum print apresentado.
13
Roteiro de Atividade Prática de
Banco de Dados
EXEMPLO DE APRESENTAÇÃO DE PRÁTICA
Prática 1 – Banco de Dados
I. Introdução
O software de gerenciamento de lanchonete que será usado como base para este trabalho
é um sistema back-end que permite o controle e manipulação de várias operações essenciais em
um estabelecimento de alimentos e bebidas. Ele oferece funcionalidades para gerenciar clientes,
pedidos e estoque de produtos e insumos. Os usuários podem adicionar e listar clientes, inserir
novos pedidos com diferentes status (como "Em preparo" ou "Pronto para retirada") e permite
adicionar ou listar itens no estoque. Além disso, o software tem mecanismos para relacionar
produtos a insumos, controlando assim as quantidades necessárias para cada item do menu. O
sistema também possuirá triggers no banco de dados para atualizar automaticamente o estoque
de insumos com base nas alterações feitas nos produtos e pedidos, assim ajudando a manter a
consistência dos dados.
Para facilitar a navegação, o software utiliza uma estrutura de menu em árvore, permitindo
aos usuários escolherem entre diversas opções para realizar as tarefas desejadas. O back-end foi
projetado em Python para interagir com um banco de dados MySQL, onde todas as informações
são armazenadas e recuperadas. Através de várias classes e métodos, o software fará uso de
consultas SQL para inserir, atualizar, deletar e listar dados. Este sistema serve como uma base
robusta para gerenciar operações diárias de uma lanchonete, podendo ser expandido ou adaptado
para requisitos específicos.
O software de gerenciamento de lanchonete armazenará vários tipos de dados no banco de
dados para facilitar a operação e administração do estabelecimento. Os principais dados
armazenados serão:
1
2
3
4
. Clientes: Informações sobre os clientes, como ID do cliente, nome, endereço, e
possivelmente outras informações de contato ou preferências.
. Produtos: Detalhes sobre os produtos oferecidos pela lanchonete, incluindo ID do produto,
nome, descrição, e quantidade em estoque.
. Insumos: Informações sobre os insumos necessários para criar os produtos, como ID do
insumo, nome e quantidade em estoque.
. ProdutoInsumo: Uma tabela de relacionamento que armazena o ID do produto, ID do
insumo e a quantidade de cada insumo necessária para criar uma unidade do produto.
Esta tabela serve para manter o controle sobre a composição dos produtos.
. Pedidos: Informações sobre os pedidos feitos pelos clientes, incluindo ID do pedido, status
(como "Em preparo", "Pronto para retirada", etc.), data e hora do pedido e ID do cliente que
fez o pedido.
5
6. PedidoCardapio: Uma tabela de relacionamento que contém os diferentes itens do
cardápio que fazem parte de um pedido específico, incluindo a quantidade de cada item.
II. Modelo Conceitual (MER):
14
Roteiro de Atividade Prática de
Banco de Dados
Figura 1: Modelo conceitual (MER) do início do projeto de banco de dados para o ERP de lanchonetes. Neste MER vemos 5
entidades simples e 3 entidades associativas. Todas relacionadas com no mínimo um outra entidade e todos os devidos
atributos são apresentados.
III. Modelo Lógico (EER) após Normalização
Figura 2: Modelo lógico (EER) do projeto de banco de dados após normalização. Neste EER vemos 8 tabelas
relacionadas entre si e com suas devidas chaves primárias e diversas chaves estrangeiras, além de todas as demais colunas
e seus respectivos tipos de dados que serão armazenados no banco de dados.
IV. Modelo Físico (SCHEMA)
CREATE DATABASE IF NOT EXISTS `lanchonete` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016
DEFAULT ENCRYPTION='N' */;
USE `lanchonete`;
-
-
-
-
-
- MySQL dump 10.13 Distrib 8.0.34, for Win64 (x86_64)
-
- Host: 127.0.0.1 Database: lanchonete
- ------------------------------------------------------
- Server version 8.0.34
/
/
/
/
/
/
/
/
/
/
*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
*!50503 SET NAMES utf8 */;
*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
*!40103 SET TIME_ZONE='+00:00' */;
*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
15
Roteiro de Atividade Prática de
Banco de Dados
-
-
- Table structure for table `cardapio`
-
DROP TABLE IF EXISTS `cardapio`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `cardapio` (
`
`
`
`
`
`
IdCardapio` int unsigned NOT NULL AUTO_INCREMENT,
Nome` varchar(45) NOT NULL,
Descricao` varchar(45) NOT NULL,
Categoria` varchar(45) DEFAULT NULL,
Valor` decimal(10,2) unsigned zerofill NOT NULL,
Disponibilidade` tinyint NOT NULL,
PRIMARY KEY (`IdCardapio`),
UNIQUE KEY `IdCardapio_UNIQUE` (`IdCardapio`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
-
-
-
-
- Table structure for table `cardapioproduto`
-
DROP TABLE IF EXISTS `cardapioproduto`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `cardapioproduto` (
`
`
`
IdCardapioProduto` int unsigned NOT NULL AUTO_INCREMENT,
IdProduto` int unsigned NOT NULL,
IdCardapio` int unsigned NOT NULL,
PRIMARY KEY (`IdCardapioProduto`),
UNIQUE KEY `IdCardapioProduto_UNIQUE` (`IdCardapioProduto`),
KEY `FkCardapio_idx` (`IdCardapio`),
KEY `FkProduto_idx` (`IdProduto`),
CONSTRAINT `FkCardapio_at_CardProd` FOREIGN KEY (`IdCardapio`) REFERENCES `cardapio` (`IdCardapio`),
CONSTRAINT `FkProduto_at_CardProd` FOREIGN KEY (`IdProduto`) REFERENCES `produto` (`IdProduto`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
)
/*!40101 SET character_set_client = @saved_cs_client */;
-
-
-
-
- Table structure for table `cliente`
-
DROP TABLE IF EXISTS `cliente`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `cliente` (
`
`
`
IdCliente` int unsigned NOT NULL AUTO_INCREMENT,
Nome` varchar(50) NOT NULL,
Endereco` varchar(100) NOT NULL,
PRIMARY KEY (`IdCliente`),
UNIQUE KEY `idCliente_UNIQUE` (`IdCliente`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
-
-
-
-
- Table structure for table `insumo`
-
DROP TABLE IF EXISTS `insumo`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `insumo` (
`
`
`
`
`
`
IdInsumo` int unsigned NOT NULL AUTO_INCREMENT,
Nome` varchar(45) NOT NULL,
Categoria` varchar(45) NOT NULL,
UnidadeMedida` varchar(45) NOT NULL,
Preco` decimal(10,2) NOT NULL,
Quantidade` double NOT NULL,
PRIMARY KEY (`IdInsumo`),
UNIQUE KEY `IdInsumo_UNIQUE` (`IdInsumo`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
-
-
-
-
- Table structure for table `pedido`
-
DROP TABLE IF EXISTS `pedido`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `pedido` (
`
`
`
`
`
IdPedido` int unsigned NOT NULL AUTO_INCREMENT,
Status` varchar(10) NOT NULL,
DataHora` datetime NOT NULL,
ValorTotal` decimal(10,2) unsigned zerofill NOT NULL,
IdCliente` int unsigned NOT NULL,
16
Roteiro de Atividade Prática de
Banco de Dados
PRIMARY KEY (`IdPedido`),
UNIQUE KEY `idPedido_UNIQUE` (`IdPedido`),
KEY `FkCliente_idx` (`IdCliente`),
CONSTRAINT `FkCliente_at_Pedido` FOREIGN KEY (`IdCliente`) REFERENCES `cliente` (`IdCliente`) ON DELETE RESTRICT ON UPDATE
CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
-
-
-
-
- Table structure for table `pedidocardapio`
-
DROP TABLE IF EXISTS `pedidocardapio`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `pedidocardapio` (
`
`
`
`
IdPedidoCardapio` int unsigned NOT NULL AUTO_INCREMENT,
IdCardapio` int unsigned NOT NULL,
IdPedido` int unsigned NOT NULL,
Quantidade` int unsigned NOT NULL,
PRIMARY KEY (`IdPedidoCardapio`),
UNIQUE KEY `IdPedidoCardapio_UNIQUE` (`IdPedidoCardapio`),
KEY `FkPedido_idx` (`IdPedido`),
KEY `FkCardapio_idx` (`IdCardapio`),
CONSTRAINT `FkCardapio_at_PedCard` FOREIGN KEY (`IdCardapio`) REFERENCES `cardapio` (`IdCardapio`),
CONSTRAINT `FkPedido_at_PedCard` FOREIGN KEY (`IdPedido`) REFERENCES `pedido` (`IdPedido`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
)
/
/
/
/
/
/
/
/
/
*!40101 SET character_set_client = @saved_cs_client */;
*!50003 SET @saved_cs_client = @@character_set_client */ ;
*!50003 SET @saved_cs_results = @@character_set_results */ ;
*!50003 SET @saved_col_connection = @@collation_connection */ ;
*!50003 SET character_set_client = utf8mb4 */ ;
*!50003 SET character_set_results = utf8mb4 */ ;
*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ;
*!50003 SET @saved_sql_mode
*!50003 SET 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_SU
BSTITUTION' */ ;
DELIMITER ;;
*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `PedidoCardapio_AFTER_INSERT` AFTER INSERT ON
/
`pedidocardapio` FOR EACH ROW BEGIN
DECLARE TotalPedido DECIMAL(10,2);
-- Calcula o valor total para o pedido
SELECT SUM(PedidoCardapio.Quantidade * Cardapio.Valor)
INTO TotalPedido
FROM PedidoCardapio
JOIN Cardapio ON PedidoCardapio.IdCardapio = Cardapio.IdCardapio
WHERE PedidoCardapio.IdPedido = NEW.IdPedido;
-- Atualiza o valor total na tabela Pedido
UPDATE Pedido
SET ValorTotal = TotalPedido
WHERE IdPedido = NEW.IdPedido;
END */;;
DELIMITER ;
/
/
/
/
/
/
/
/
/
/
/
/
*!50003 SET sql_mode = @saved_sql_mode */ ;
*!50003 SET character_set_client = @saved_cs_client */ ;
*!50003 SET character_set_results = @saved_cs_results */ ;
*!50003 SET collation_connection = @saved_col_connection */ ;
*!50003 SET @saved_cs_client = @@character_set_client */ ;
*!50003 SET @saved_cs_results = @@character_set_results */ ;
*!50003 SET @saved_col_connection = @@collation_connection */ ;
*!50003 SET character_set_client = utf8mb4 */ ;
*!50003 SET character_set_results = utf8mb4 */ ;
*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ;
*!50003 SET @saved_sql_mode
*!50003 SET 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_SU
BSTITUTION' */ ;
DELIMITER ;;
*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `PedidoCardapio_AFTER_UPDATE` AFTER UPDATE ON
/
`pedidocardapio` FOR EACH ROW BEGIN
DECLARE TotalPedido DECIMAL(10,2);
-- Calcula o valor total para o pedido
SELECT SUM(PedidoCardapio.Quantidade * Cardapio.Valor)
INTO TotalPedido
FROM PedidoCardapio
JOIN Cardapio ON PedidoCardapio.IdCardapio = Cardapio.IdCardapio
WHERE PedidoCardapio.IdPedido = NEW.IdPedido;
-- Atualiza o valor total na tabela Pedido
UPDATE Pedido
SET ValorTotal = TotalPedido
WHERE IdPedido = NEW.IdPedido;
END */;;
17
Roteiro de Atividade Prática de
Banco de Dados
DELIMITER ;
/
/
/
/
/
/
/
/
/
/
/
/
*!50003 SET sql_mode = @saved_sql_mode */ ;
*!50003 SET character_set_client = @saved_cs_client */ ;
*!50003 SET character_set_results = @saved_cs_results */ ;
*!50003 SET collation_connection = @saved_col_connection */ ;
*!50003 SET @saved_cs_client = @@character_set_client */ ;
*!50003 SET @saved_cs_results = @@character_set_results */ ;
*!50003 SET @saved_col_connection = @@collation_connection */ ;
*!50003 SET character_set_client = utf8mb4 */ ;
*!50003 SET character_set_results = utf8mb4 */ ;
*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ;
*!50003 SET @saved_sql_mode
*!50003 SET 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_SU
BSTITUTION' */ ;
DELIMITER ;;
*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `PedidoCardapio_AFTER_DELETE` AFTER DELETE ON
/
`pedidocardapio` FOR EACH ROW BEGIN
DECLARE TotalPedido DECIMAL(10,2);
-- Recalcula o valor total para o pedido após a exclusão de um item
SELECT SUM(PedidoCardapio.Quantidade * Cardapio.Valor)
INTO TotalPedido
FROM PedidoCardapio
JOIN Cardapio ON PedidoCardapio.IdCardapio = Cardapio.IdCardapio
WHERE PedidoCardapio.IdPedido = OLD.IdPedido;
-- Atualiza o valor total na tabela Pedido
UPDATE Pedido
SET ValorTotal = TotalPedido
WHERE IdPedido = OLD.IdPedido;
END */;;
DELIMITER ;
/
/
/
/
*!50003 SET sql_mode = @saved_sql_mode */ ;
*!50003 SET character_set_client = @saved_cs_client */ ;
*!50003 SET character_set_results = @saved_cs_results */ ;
*!50003 SET collation_connection = @saved_col_connection */ ;
-
-
-
-
- Table structure for table `produto`
-
DROP TABLE IF EXISTS `produto`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `produto` (
`
`
`
`
`
IdProduto` int unsigned NOT NULL AUTO_INCREMENT,
Nome` varchar(45) NOT NULL,
Quantidade` int NOT NULL,
Valor` decimal(10,2) unsigned zerofill NOT NULL,
UnidadeMedida` varchar(45) DEFAULT NULL,
PRIMARY KEY (`IdProduto`),
UNIQUE KEY `IdProduto_UNIQUE` (`IdProduto`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/
/
/
/
/
/
/
/
/
*!40101 SET character_set_client = @saved_cs_client */;
*!50003 SET @saved_cs_client = @@character_set_client */ ;
*!50003 SET @saved_cs_results = @@character_set_results */ ;
*!50003 SET @saved_col_connection = @@collation_connection */ ;
*!50003 SET character_set_client = utf8mb4 */ ;
*!50003 SET character_set_results = utf8mb4 */ ;
*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ;
*!50003 SET @saved_sql_mode = @@sql_mode */ ;
*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `produto_AFTER_INSERT` AFTER INSERT ON `produto` FOR
EACH ROW BEGIN
DECLARE insumo_id INT;
/
DECLARE quantidade_necessaria DOUBLE;
DECLARE total_necessario DOUBLE;
-- Loop nos insumos necessários para o produto em questão
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT IdInsumo, Quantidade FROM ProdutoInsumo WHERE IdProduto = NEW.IdProduto;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO insumo_id, quantidade_necessaria;
IF done THEN
LEAVE read_loop;
END IF;
18
Roteiro de Atividade Prática de
Banco de Dados
-- Calculando a quantidade total necessária do insumo
SET total_necessario = NEW.Quantidade * quantidade_necessaria;
-- Atualizando a quantidade na tabela de Insumo
UPDATE Insumo
SET Quantidade = Quantidade - total_necessario
WHERE IdInsumo = insumo_id;
END LOOP;
CLOSE cur;
END */;;
DELIMITER ;
/
/
/
/
/
/
/
/
/
/
/
/
*!50003 SET sql_mode = @saved_sql_mode */ ;
*!50003 SET character_set_client = @saved_cs_client */ ;
*!50003 SET character_set_results = @saved_cs_results */ ;
*!50003 SET collation_connection = @saved_col_connection */ ;
*!50003 SET @saved_cs_client = @@character_set_client */ ;
*!50003 SET @saved_cs_results = @@character_set_results */ ;
*!50003 SET @saved_col_connection = @@collation_connection */ ;
*!50003 SET character_set_client = utf8mb4 */ ;
*!50003 SET character_set_results = utf8mb4 */ ;
*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ;
*!50003 SET @saved_sql_mode
*!50003 SET sql_mode
= @@sql_mode */ ;
= 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `produto_AFTER_UPDATE` AFTER UPDATE ON `produto`
FOR EACH ROW BEGIN
DECLARE insumo_id INT;
/
DECLARE quantidade_necessaria DOUBLE;
DECLARE quantidade_diferenca DOUBLE;
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT IdInsumo, Quantidade FROM ProdutoInsumo WHERE IdProduto = NEW.IdProduto;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- Calculando a diferença entre as quantidades antigas e novas
SET quantidade_diferenca = NEW.Quantidade - OLD.Quantidade;
-- Se a quantidade do produto mudou
IF quantidade_diferenca > 0 THEN
OPEN cur;
read_loop: LOOP
FETCH cur INTO insumo_id, quantidade_necessaria;
IF done THEN
LEAVE read_loop;
END IF;
-- Calculando a quantidade total necessária do insumo baseada na diferença
SET quantidade_necessaria = quantidade_necessaria * quantidade_diferenca;
-- Atualizando a quantidade na tabela Insumo
UPDATE Insumo
SET Quantidade = Quantidade - quantidade_necessaria
WHERE IdInsumo = insumo_id;
END LOOP;
CLOSE cur;
END IF;
END */;;
DELIMITER ;
/
/
/
/
*!50003 SET sql_mode = @saved_sql_mode */ ;
*!50003 SET character_set_client = @saved_cs_client */ ;
*!50003 SET character_set_results = @saved_cs_results */ ;
*!50003 SET collation_connection = @saved_col_connection */ ;
-
-
-
-
- Table structure for table `produtoinsumo`
-
DROP TABLE IF EXISTS `produtoinsumo`;
/
/
*!40101 SET @saved_cs_client = @@character_set_client */;
*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `produtoinsumo` (
`
`
`
`
IdProdutoInsumo` int unsigned NOT NULL AUTO_INCREMENT,
IdProduto` int unsigned NOT NULL,
IdInsumo` int unsigned NOT NULL,
Quantidade` double NOT NULL,
PRIMARY KEY (`IdProdutoInsumo`),
UNIQUE KEY `IdProdutoInsumo_UNIQUE` (`IdProdutoInsumo`),
KEY `FkInsumo_idx` (`IdInsumo`),
KEY `FkProduto_idx` (`IdProduto`),
CONSTRAINT `FkInsumo_at_ProdIns` FOREIGN KEY (`IdInsumo`) REFERENCES `insumo` (`IdInsumo`),
CONSTRAINT `FkProduto_at_ProdIns` FOREIGN KEY (`IdProduto`) REFERENCES `produto` (`IdProduto`)
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
)
19
Roteiro de Atividade Prática de
Banco de Dados
/*!40101 SET character_set_client = @saved_cs_client */;
-
-
-
-
- Dumping routines for database 'lanchonete'
-
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/
/
/
/
/
/
/
*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-08-30 2:20:10
V. Código-fonte (COD)
Aqui será mostrado apenas o código-fonte referente à interação com o banco de
dados:
'''
Classes de conexão com o banco de dados
''
'
import os
import mysql.connector
from dotenv import load_dotenv
# Carregar variáveis de ambiente
load_dotenv()
DB_HOST = os.getenv("DB_HOST")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_NAME = os.getenv("DB_NAME")
class LanchoneteDB:
'''
Classe de conexão com o banco de dados - tabela lanchonete
''
'
def __init__(self):
self.connection = mysql.connector.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD,
database=DB_NAME
)
self.cursor = self.connection.cursor()
def close(self):
self.cursor.close()
self.connection.close()
class Cliente(LanchoneteDB):
'''
Classe Cliente permite o cadastro de um novo cliente e também a visualização
dos clientes cadastrados.
Métodos:
-
-
-
'
inserir(nome, endereço): None
listar(): Lista de todos os nomes dos clientes e seus IDs
listaDados(idCliente): Nome e Endereço de um cliente
''
def inserir(self, nome, endereco):
query = "INSERT INTO Cliente (Nome, Endereco) VALUES (%s, %s)"
self.cursor.execute(query, (nome, endereco))
self.connection.commit()
def listar(self):
"""Lista todos os clientes cadastrados e seus IDs
Returns:
tupla: tuplas com ((Nome), (idCliente)) para cada cliente cadastrado
"""
query = "SELECT Nome, idCliente FROM Cliente"
self.cursor.execute(query)
return self.cursor.fetchall()
def listar_dados(self, id_cliente):
20
Roteiro de Atividade Prática de
Banco de Dados
"""Lista todos os dados de um cliente cadastrado
Returns:
tupla: tuplas com os dados do cliente
"""
query = "SELECT * FROM Cliente WHERE idCliente = %s LIMIT 1"
self.cursor.execute(query, id_cliente)
return self.cursor.fetchall()
class Pedido(LanchoneteDB):
def inserir(self, status, data_hora, id_cliente):
query = "INSERT INTO Pedido (Status, DataHora, IdCliente) VALUES (%s, %s, %s)"
self.cursor.execute(query, (status, data_hora, id_cliente))
self.connection.commit()
def listar(self):
query = "SELECT * FROM Pedido"
self.cursor.execute(query)
return self.cursor.fetchall()
def atualizar_status(self, id_pedido, novo_status):
query = "UPDATE Pedido SET Status = %s WHERE IdPedido = %s"
self.cursor.execute(query, (novo_status, id_pedido))
self.connection.commit()
def listar_por_status(self, status):
query = """
SELECT Pedido.idPedido, Pedido.Status, Pedido.DataHora, Cliente.Nome
FROM Pedido
INNER JOIN Cliente ON Pedido.IdCliente = Cliente.idCliente
WHERE Pedido.Status = %s
"""
self.cursor.execute(query, [status])
return self.cursor.fetchall()
class Cardapio(LanchoneteDB):
def inserir(self, nome, descricao, categoria, valor, disponibilidade):
query = "INSERT INTO Cardapio (Nome, Descricao, Categoria, Valor, Disponibilidade) VALUES
(%s, %s, %s, %s, %s)"
self.cursor.execute(query, (nome, descricao, categoria, valor, disponibilidade))
self.connection.commit()
def listar(self):
query = "SELECT * FROM Cardapio"
self.cursor.execute(query)
return self.cursor.fetchall()
from lanchonete_db import LanchoneteDB # Certifique-se de que este arquivo seja importado
corretamente
class PedidoCardapio(LanchoneteDB):
'''
Classe PedidoCardapio permite o gerenciamento das relações entre pedidos e itens do cardápio.
Métodos:
-
-
-
-
'
adicionar(IdPedido, IdProduto, Quantidade): None
apagar(IdPedidoCardapio): None
listar(): Lista de todos os registros da tabela PedidoCardapio
alterar(IdPedidoCardapio, IdPedido, IdProduto, Quantidade): None
''
def adicionar(self, id_pedido, id_produto, quantidade):
query = "INSERT INTO PedidoCardapio (IdPedido, IdProduto, Quantidade) VALUES (%s, %s, %s)"
self.cursor.execute(query, (id_pedido, id_produto, quantidade))
self.connection.commit()
def apagar(self, id_pedido_cardapio):
query = "DELETE FROM PedidoCardapio WHERE IdPedidoCardapio = %s"
self.cursor.execute(query, (id_pedido_cardapio,))
self.connection.commit()
def listar(self):
query = "SELECT * FROM PedidoCardapio"
self.cursor.execute(query)
return self.cursor.fetchall()
def alterar(self, id_pedido_cardapio, id_pedido, id_produto, quantidade):
21
Roteiro de Atividade Prática de
Banco de Dados
query = "UPDATE PedidoCardapio SET IdPedido = %s, IdProduto = %s, Quantidade = %s WHERE
IdPedidoCardapio = %s"
self.cursor.execute(query, (id_pedido, id_produto, quantidade, id_pedido_cardapio))
self.connection.commit()
def listar_por_pedido(self, id_pedido):
query = "SELECT * FROM PedidoCardapio WHERE IdPedido = %s"
self.cursor.execute(query, [id_pedido])
return self.cursor.fetchall()
class Produto(LanchoneteDB):
def inserir(self, nome, quantidade, valor, unidade_medida):
query = "INSERT INTO Produto (Nome, Quantidade, Valor, UnidadeMedida) VALUES (%s, %s, %s,
s)"
%
self.cursor.execute(query, (nome, quantidade, valor, unidade_medida))
self.connection.commit()
def listar(self):
query = "SELECT * FROM Produto"
self.cursor.execute(query)
return self.cursor.fetchall()
def get_last_insert_id(self):
query = "SELECT LAST_INSERT_ID()"
self.cursor.execute(query)
result = self.cursor.fetchone()
if result:
return result[0]
else:
return None
class CardapioProduto(LanchoneteDB):
''
'
Classe CardapioProduto permite o gerenciamento das relações entre cardápios e produtos.
Métodos:
-
-
-
-
'
adicionar(IdCardapio, IdProduto, Quantidade): None
apagar(IdCardapioProduto): None
listar(): Lista de todos os registros da tabela CardapioProduto
alterar(IdCardapioProduto, IdCardapio, IdProduto, Quantidade): None
''
def adicionar(self, id_cardapio, id_produto, quantidade):
query = "INSERT INTO CardapioProduto (IdCardapio, IdProduto, Quantidade) VALUES (%s, %s,
%s)"
self.cursor.execute(query, (id_cardapio, id_produto, quantidade))
self.connection.commit()
def apagar(self, id_cardapio_produto):
query = "DELETE FROM CardapioProduto WHERE IdCardapioProduto = %s"
self.cursor.execute(query, (id_cardapio_produto,))
self.connection.commit()
def listar(self):
query = "SELECT * FROM CardapioProduto"
self.cursor.execute(query)
return self.cursor.fetchall()
def alterar(self, id_cardapio_produto, id_cardapio, id_produto, quantidade):
query = "UPDATE CardapioProduto SET IdCardapio = %s, IdProduto = %s, Quantidade = %s WHERE
IdCardapioProduto = %s"
self.cursor.execute(query, (id_cardapio, id_produto, quantidade, id_cardapio_produto))
self.connection.commit()
def listar_por_cardapio(self, id_cardapio):
query = "SELECT * FROM CardapioProduto WHERE IdCardapio = %s"
self.cursor.execute(query, [id_cardapio])
return self.cursor.fetchall()
class Insumo(LanchoneteDB):
'''
Classe Insumo permite o cadastro de um novo insumo e também a visualização
dos insumos cadastrados.
Métodos:
-
-
-
inserir(nome, categoria, unidade_medida, quantidade, preco): None
listar(): Lista de todos os insumos e seus IDs
listar_dados(idInsumo): Todos os dados de um insumo específico
22
Roteiro de Atividade Prática de
Banco de Dados
'''
def inserir(self, nome, categoria, unidade_medida, quantidade, preco):
query = "INSERT INTO Insumo (Nome, Categoria, UnidadeMedida, Quantidade, Preco) VALUES
(%s, %s, %s, %s, %s)"
self.cursor.execute(query, (nome, categoria, unidade_medida, quantidade, preco))
self.connection.commit()
def listar(self):
"""Lista todos os insumos cadastrados e seus IDs
Returns:
tupla: tuplas com todos os dados de cada insumo cadastrado
"""
query = "SELECT * FROM Insumo"
self.cursor.execute(query)
return self.cursor.fetchall()
def buscar_por_nome(self, nome_insumo):
query = "SELECT IdInsumo FROM Insumo WHERE Nome = %s LIMIT 1"
self.cursor.execute(query, (nome_insumo,))
result = self.cursor.fetchone()
if result:
return result[0]
else:
return None
def listar_dados(self, id_insumo):
"""Lista todos os dados de um insumo específico
Returns:
tupla: tuplas com os dados do insumo
"""
query = "SELECT * FROM Insumo WHERE idInsumo = %s LIMIT 1"
self.cursor.execute(query, (id_insumo,))
return self.cursor.fetchall()
class ProdutoInsumo(LanchoneteDB):
'''
Classe ProdutoInsumo permite o gerenciamento das relações entre produtos e insumos.
Métodos:
-
-
-
-
-
'
adicionar(IdProduto, IdInsumo, Quantidade): None
apagar(IdProdutoInsumo): None
listar(): Lista de todos os registros da tabela ProdutoInsumo
alterar(IdProdutoInsumo, IdProduto, IdInsumo, Quantidade): None
buscar_por_nome(nome_produto): Retorna os registros do produto pelo nome
''
def adicionar(self, id_produto, id_insumo, quantidade):
query = "INSERT INTO ProdutoInsumo (IdProduto, IdInsumo, Quantidade) VALUES (%s, %s, %s)"
self.cursor.execute(query, (id_produto, id_insumo, quantidade))
self.connection.commit()
def apagar(self, id_produto_insumo):
query = "DELETE FROM ProdutoInsumo WHERE IdProdutoInsumo = %s"
self.cursor.execute(query, (id_produto_insumo,))
self.connection.commit()
def listar(self):
query = "SELECT * FROM ProdutoInsumo"
self.cursor.execute(query)
return self.cursor.fetchall()
def alterar(self, id_produto_insumo, id_produto, id_insumo, quantidade):
query = "UPDATE ProdutoInsumo SET IdProduto = %s, IdInsumo = %s, Quantidade = %s WHERE
IdProdutoInsumo = %s"
self.cursor.execute(query, (id_produto, id_insumo, quantidade, id_produto_insumo))
self.connection.commit()
def buscar_por_nome(self, nome_produto):
query = """SELECT *
FROM ProdutoInsumo
INNER JOIN Produto ON ProdutoInsumo.IdProduto = Produto.IdProduto
WHERE Produto.Nome = %s"""
self.cursor.execute(query, (nome_produto,))
return self.cursor.fetchall()
23
Roteiro de Atividade Prática de
Banco de Dados
VI. Prints de funcionamento do software.
1 Print do funcionamento do código executando uma consulta com JOIN:
1 Print dos dados sendo alterados pelo software:
24
Roteiro de Atividade Prática de
Banco de Dados
2 Prints dos dados alterados no banco de dados (print do workbench antes e depois da
alteração dos dados pelo software): Antes está na imagem anterior.
VII. Conclusão
Neste projeto, o foco principal foi na modelagem e implementação de um banco de dados
robusto e eficiente que serve como espinha dorsal para o sistema de gerenciamento da
lanchonete. Utilizamos diversas tabelas para representar entidades como clientes, pedidos,
produtos, insumos e o cardápio, e criamos relações bem definidas entre elas. Triggers e consultas
SQL complexas foram empregadas para manter a integridade dos dados e para automatizar
tarefas como a atualização do estoque de insumos.
A integração do banco de dados com o software foi feita de forma modular, permitindo
escalabilidade e manutenção mais fáceis. Cada aspecto do negócio, seja ele o gerenciamento de
clientes ou de pedidos, é manipulado por classes Python distintas que interagem com o banco de
dados. Isso não só torna o sistema mais organizado, mas também permite uma grande
flexibilidade na implementação de novas funcionalidades. Em resumo, o sucesso deste sistema
deve-se em grande parte à sua sólida estrutura de banco de dados e à integração eficaz deste
com as funcionalidades do software.
25
Roteiro de Atividade Prática de
Banco de Dados
PRÁTICAS
MOTIVAÇÃO DO TRABALHO
Vivenciar um projeto de implementação de banco de dados em um software real e aplicar os
conhecimentos adquiridos em sala.
OBJETIVO DO PROJETO
Implementar um banco de dados relacional do início ao fim com integração em um software.
26
Roteiro de Atividade Prática de
Banco de Dados
PRÁTICA 01- BANCO DE DADOS.
Sua missão será escolher um software antigo seu e criar um banco de dados para atender às
demandas deste software.
Veja mais detalhes nos critérios de avaliação e no exemplo de prática.
Por fim, você deverá criar:
•
•
•
Uma introdução com descritivo do seu código base;
Um modelo conceitual do banco de dados (MER);
Um diagrama de entidade e relacionamento (DER/EER – modelo lógico estendido ou
simples);
•
•
•
Um modelo físico (comandos SQL para criação do banco e suas tabelas);
Mostrar seu Código-fonte alterado para integração com o banco de dados;
Adicionar os prints de funcionamento do seu código e banco de dados:
o Print do funcionamento do código executando uma consulta com JOIN;
o Print dos dados sendo alterados pelo software;
o Prints dos dados alterados no banco de dados (print do workbench antes e depois da
alteração dos dados pelo software).
27
Roteiro de Atividade Prática de
Banco de Dados
RESPOSTAS AS DÚVIDAS MAIS
FREQUÊNTES
1. Pode resumir o que fazer no trabalho?
R:
Passo 1 – Escolha seu software que servirá de base para criação do banco de dados.
Passo 2 – Crie um modelo conceitual (MER) para seu banco.
Passo 3 – Crie um modelo lógico (DER/EER) já com a normalização do banco.
Passo 4 – Converta seu EER em código SQL para criação do banco.
Passo 5 – Altere seu código para que ele faça conexão com seu banco de dados e inclua ao
menos 1 SELECT com JOIN, 1 INSERT e 1 UPDATE.
Passo 6 – Escreva uma breve introdução do seu trabalho, explicando o funcionamento do
seu software e como o seu banco de dados atenderá as necessidades dele.
Passo 7 – Teste seu software e banco de dados, realizando prints das telas de
funcionamento.
Passo 8 – Preencha o modelo de relatório com todos os dados e imagens que você criou e
finalize com uma breve conclusão.
Passo 9 – Converta para PDF e entregue o seu trabalho.
Desejo a todos um ótimo aprendizado e nos vemos na tutoria.
Atenciosamente.
Professor Guilherme D Patriota.
28

Mais conteúdo relacionado

Semelhante a ATIVIDADE PRÁTICA - BANCO DE DADOS - UNINTER.pdf

Por que o Microsoft Power BI? Um breve overview sobre BI
Por que o Microsoft Power BI? Um breve overview sobre BIPor que o Microsoft Power BI? Um breve overview sobre BI
Por que o Microsoft Power BI? Um breve overview sobre BILeonardo Karpinski
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Alan Carlos
 
O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)Igor Abade
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoraçãoelliando dias
 
modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4spawally
 
Artigo data warehouse bd ii - 2015-1 a
Artigo data warehouse   bd ii - 2015-1 aArtigo data warehouse   bd ii - 2015-1 a
Artigo data warehouse bd ii - 2015-1 aDarlene Coelho
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olapFlavia Martins Bispo
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olapFernando Palma
 
Artigo data warehouse bd ii - 2015-1
Artigo data warehouse   bd ii - 2015-1Artigo data warehouse   bd ii - 2015-1
Artigo data warehouse bd ii - 2015-1Darlene Coelho
 
Metodologia de desenvolvimento de sistemas
Metodologia  de desenvolvimento de sistemasMetodologia  de desenvolvimento de sistemas
Metodologia de desenvolvimento de sistemasPriscila Stuani
 
Manual para elaboração de relatório técnico
Manual para elaboração de relatório técnicoManual para elaboração de relatório técnico
Manual para elaboração de relatório técnicoJean Gadelha de Oliveira
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Fabrízio Mello
 
Iconix.metodo.trabajo.universidad.porto.ppt
Iconix.metodo.trabajo.universidad.porto.pptIconix.metodo.trabajo.universidad.porto.ppt
Iconix.metodo.trabajo.universidad.porto.pptroygarcia271
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Fabrízio Mello
 

Semelhante a ATIVIDADE PRÁTICA - BANCO DE DADOS - UNINTER.pdf (20)

Por que o Microsoft Power BI? Um breve overview sobre BI
Por que o Microsoft Power BI? Um breve overview sobre BIPor que o Microsoft Power BI? Um breve overview sobre BI
Por que o Microsoft Power BI? Um breve overview sobre BI
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01
 
Aula Gestão de Projetos
Aula Gestão de ProjetosAula Gestão de Projetos
Aula Gestão de Projetos
 
TechEd_OFC302
TechEd_OFC302TechEd_OFC302
TechEd_OFC302
 
O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)O Futuro do Data Dude (VS DBPro)
O Futuro do Data Dude (VS DBPro)
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoração
 
Oracleplsql
OracleplsqlOracleplsql
Oracleplsql
 
modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4modelagem sistema da informação Unid 4
modelagem sistema da informação Unid 4
 
Artigo data warehouse bd ii - 2015-1 a
Artigo data warehouse   bd ii - 2015-1 aArtigo data warehouse   bd ii - 2015-1 a
Artigo data warehouse bd ii - 2015-1 a
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olap
 
Introdução a data warehouse e olap
Introdução a data warehouse e olapIntrodução a data warehouse e olap
Introdução a data warehouse e olap
 
Artigo data warehouse bd ii - 2015-1
Artigo data warehouse   bd ii - 2015-1Artigo data warehouse   bd ii - 2015-1
Artigo data warehouse bd ii - 2015-1
 
Metodologia de desenvolvimento de sistemas
Metodologia  de desenvolvimento de sistemasMetodologia  de desenvolvimento de sistemas
Metodologia de desenvolvimento de sistemas
 
Manual para elaboração de relatório técnico
Manual para elaboração de relatório técnicoManual para elaboração de relatório técnico
Manual para elaboração de relatório técnico
 
Modelo spmp
Modelo spmpModelo spmp
Modelo spmp
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)
 
Sql
SqlSql
Sql
 
Aula04 3
Aula04 3Aula04 3
Aula04 3
 
Iconix.metodo.trabajo.universidad.porto.ppt
Iconix.metodo.trabajo.universidad.porto.pptIconix.metodo.trabajo.universidad.porto.ppt
Iconix.metodo.trabajo.universidad.porto.ppt
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009
 

Mais de estudosfaculdade05fa

ATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdf
ATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdfATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdf
ATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdfestudosfaculdade05fa
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdfPROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdfestudosfaculdade05fa
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...estudosfaculdade05fa
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...estudosfaculdade05fa
 
ATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdfATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdfestudosfaculdade05fa
 
ATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdf
ATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdfATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdf
ATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdfestudosfaculdade05fa
 
ATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdfATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdfestudosfaculdade05fa
 
ATIVIDADE EXTENSIONISTA BMG CANVAS.pdf
ATIVIDADE EXTENSIONISTA BMG CANVAS.pdfATIVIDADE EXTENSIONISTA BMG CANVAS.pdf
ATIVIDADE EXTENSIONISTA BMG CANVAS.pdfestudosfaculdade05fa
 
ATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdf
ATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdfATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdf
ATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdfestudosfaculdade05fa
 
ATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdf
ATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdfATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdf
ATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdfestudosfaculdade05fa
 
ESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdf
ESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdfESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdf
ESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdfestudosfaculdade05fa
 
ATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdfATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdfestudosfaculdade05fa
 
PORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdf
PORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdfPORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdf
PORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdfestudosfaculdade05fa
 
ROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdfROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdfestudosfaculdade05fa
 
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdfPROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdfestudosfaculdade05fa
 
PRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdf
PRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdfPRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdf
PRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdfestudosfaculdade05fa
 
PROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdf
PROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdfPROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdf
PROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdfestudosfaculdade05fa
 
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdfPROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdfestudosfaculdade05fa
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdfPROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdfestudosfaculdade05fa
 

Mais de estudosfaculdade05fa (20)

ATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdf
ATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdfATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdf
ATIVIDADE PRÁTICA - ANATOMIA DAS IMAGENS.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdfPROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 54-2023.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSO...
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL ADMINISTRAÇÃO DE CONFLITO - 54-202...
 
ATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdfATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 1 - ENF - PARASITOLOGIA - 54-2023.pdf
 
ATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdf
ATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdfATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdf
ATIVIDADE 1 - FSCE - FORMAÇÃO SOCIOCULTURAL E ÉTICA II - 54-2023.pdf
 
ATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdfATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdf
ATIVIDADE 01 - ENF - PARASITOLOGIA - 54-2023.pdf
 
ATIVIDADE EXTENSIONISTA BMG CANVAS.pdf
ATIVIDADE EXTENSIONISTA BMG CANVAS.pdfATIVIDADE EXTENSIONISTA BMG CANVAS.pdf
ATIVIDADE EXTENSIONISTA BMG CANVAS.pdf
 
ATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdf
ATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdfATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdf
ATIVIDADE PRÁTICA - CIRCUITOS ELÉTRICOS II - UNINTER.pdf
 
ATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdf
ATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdfATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdf
ATIVIDADE PRÁTICA TRANSFERÊNCIA DE CALOR.pdf
 
ESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdf
ESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdfESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdf
ESTUDO DE CASO - MÓDULO B - FASE II - ANO 2023.pdf
 
ATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdfATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ATIVIDADE PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
 
PORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdf
PORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdfPORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdf
PORTFÓLIO - FENÔMENOS DE TRANSPORTE.pdf
 
ROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdfROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
ROTEIRO DE AULA PRÁTICA - FÍSICA GERAL E EXPERIMENTAL MECÂNICA.pdf
 
PROCESSAMENTO DE IMAGENS.pdf
PROCESSAMENTO DE IMAGENS.pdfPROCESSAMENTO DE IMAGENS.pdf
PROCESSAMENTO DE IMAGENS.pdf
 
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdfPROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
 
PRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdf
PRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdfPRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdf
PRIMEIROS PASSOS COM O KIT PIC - UNINTER.pdf
 
PROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdf
PROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdfPROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdf
PROCESSAMENTO DE IMAGENS - FORMULÁRIO.pdf
 
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdfPROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
PROJETOS INTERDISCIPLINARES EM ARTES E EDUCAÇÃO.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdfPROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdf
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL INTELIGÊNCIA EMOCIONAL - 53-2023.pdf
 

Último

Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Nova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisasNova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisasraveccavp
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptxLinoReisLino
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfAlissonMiranda22
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 

Último (20)

Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Nova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisasNova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisas
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdf
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 

ATIVIDADE PRÁTICA - BANCO DE DADOS - UNINTER.pdf

  • 1. ANO 023 2 ATIVIDADE PRÁTICA BANCO DE DADOS Roteiro Elaborado por: Prof. MSc. Guilherme Ditzel Patriota
  • 2. Roteiro de Atividade Prática de Banco de Dados INTRODUÇÃO Olá a todos. Sejam todos muito bem-vindos! Esta avaliação foi planejada e preparada para a disciplina de Banco de Dados dos Cursos de Tecnologia do Centro Universitário Internacional UNINTER. O que tenho que fazer neste trabalho? Resposta: PRÁTICA – MODELAR E IMPLEMENTAR UM BANCO DE DADOS SQL PARA UM PROJETO DE SOFTWARE JÁ EXISTENTE SEU. O objetivo desta atividade é fazer com que você, aluno, desenvolva os conhecimentos teóricos aprendidos na rota de aprendizagem e aulas telepresenciais, de maneira prática e aplicável no mercado de trabalho. Para tanto, será necessário o uso de ferramentas online como: • • • • • • • • • ERDPlus.com PlantUML.com Mermaid.live draw.io Bizagi Diagramas.net lucidchart.com PowerPoint Paint Você poderá, ainda, desenvolver seus diagramas e esta atividade em qualquer destas ferramentas ou qualquer outra que você desejar. Ao longo desse roteiro serão passadas as orientações gerais para realização da avaliação bem como os seus critérios de correção. Na sequência, apresenta-se um exemplo comentado de como se deve ser entregue uma questão. Seguindo o roteiro estarão as práticas a serem realizadas, cada uma delas possui uma explicação de como deve ser feita, como será cobrada e algumas dicas. Por fim, apresento uma seção as com as respostas das dúvidas mais frequentes realizadas por vocês. Bons estudos! (Não entendi. Pode resumir o que fazer no trabalho?) No mais, desejo-lhe boa atividade prática em nome dos professores da disciplina de Banco de Dados. 1
  • 3. Roteiro de Atividade Prática de Banco de Dados LISTA DE FIGURAS Figura 1: Diagrama de caso de uso com 3 requisitos funcionais apresentados, o cadastro de usuários, o processo de venda e o processo de compra. ______________________________________________________________________ 15 2
  • 4. Roteiro de Atividade Prática de Banco de Dados LISTA DE TABELAS Tabela 1: Possíveis notas no formato de apresentação........................................................................................................ 7 Tabela 2: Possíveis notas critério de Identificação Pessoal................................................................................................... 8 Tabela 3: Possíveis notas na apresentação do código.......................................................................................................... 9 Tabela 4: Possíveis notas na apresentação das imagens/fotos/diagramas ...........................Error! Bookmark not defined. Tabela 5: Possíveis notas na apresentação das respostas......................................................Error! Bookmark not defined. 3
  • 5. Roteiro de Atividade Prática de Banco de Dados SUMÁRIO INTRODUÇÃO......................................................................................................................1 LISTA DE FIGURAS ...............................................................................................................2 LISTA DE TABELAS ...............................................................................................................3 SUMÁRIO............................................................................................................................4 ORIENTAÇÕES GERAIS .........................................................................................................5 FORMATO DE ENTREGA ....................................................................Error! Bookmark not defined. CRITÉRIOS DE AVALIAÇÃO ...................................................................................................6 FORMATO DA APRESENTAÇÃO....................................................................................................7 IDENTIFICAÇÃO PESSOAL ..................................................................Error! Bookmark not defined. REQUISITOS...................................................................................... Error! Bookmark not defined. DIAGRAMA....................................................................................... Error! Bookmark not defined. RESPOSTA................................................................................................................................. 11 EXEMPLO DE APRESENTAÇÃO DE QUESTÃO...............................Error! Bookmark not defined. PRÁTICAS ..........................................................................................................................26 MOTIVAÇÃO DO TRABALHO...................................................................................................... 26 DESCRIÇÃO DO VÍDEO DE ENTREVISTA COM CLIENTE......................... Error! Bookmark not defined. OBJETIVO DO PROJETO ............................................................................................................. 26 PRÁTICA 01- COLETA DE REQUISITOS, CRIAÇÃO DE DIAGRAMA DE CASO DE USO E CRIAÇÃO DE DIAGRAMA DE CLASSES...................................................................................................................... 27 QUESTÃO 01: Criação de diagrama de caso de uso............................................Error! Bookmark not defined. QUESTÃO 02: Criação de diagrama de Classes. ..................................................Error! Bookmark not defined. RESPOSTAS AS DÚVIDAS MAIS FREQUÊNTES......................................................................28 4
  • 6. Roteiro de Atividade Prática de Banco de Dados ORIENTAÇÕES GERAIS A entrega desta atividade prática deverá ser realizada pela área de “Trabalhos”, em formato PDF com o caderno de resolução da atividade prática (modelo fornecido em sua rota). O formato de entrega desejável das práticas desse roteiro deve estar de acordo com o que é visto na seção “EXEMPLO DE APRESENTAÇÃO DE PRÁTICA” e no modelo de resolução da atividade prática. Os trabalhos devem ser enviados no formato .pdf. 5
  • 7. Roteiro de Atividade Prática de Banco de Dados CRITÉRIOS DE AVALIAÇÃO Os critérios de avaliação desse trabalho visam deixar a avaliação o mais justa e transparente possível. Esta avaliação valerá um total de 100 pontos de trabalho. O trabalho será composto por: • • • Introdução com descritivo do seu código base; Um modelo conceitual do banco de dados (MER); Um diagrama de entidade e relacionamento (DER/EER – modelo lógico estendido ou simples); • • • Um modelo físico (comandos SQL para criação do banco e suas tabelas); Código-fonte alterado para integração com o banco de dados; Prints de funcionamento do seu código e banco de dados: o Print do funcionamento do código executando uma consulta com JOIN; o Print dos dados sendo alterados pelo software; o Prints dos dados alterados no banco de dados (print do workbench antes e depois da alteração dos dados pelo software). O trabalho será avaliado e corrigido individualmente conforme a seguinte equação: 퐵퐴푆퐸 + 푀퐸푅 + 퐸퐸푅 + 푆퐶퐻퐸푀퐴 + 퐶푂퐷 + 푃푅푇 푁 = (퐹퐸). 6 Em que: 푁 (푁표푡푎 푑표 푇푟푎푏푎푙ℎ표): Nota total do trabalho, podendo variar de 0 até 100. 퐹퐸 (퐹표푟푚푎푡표 푑푎 퐸푛푡푟푒푔푎): Nota do Formato de Entrega, podendo variar de 0 até 1. 퐵퐴푆퐸 (퐼푛푡푟표푑푢çã표 푒 퐶ó푑ꢀ 푔표 푏푎푠푒): Nota a introdução e descrição do funcionamento do código base, podendo variar de 0 até 100. 푀퐸푅(푀표푑푒푙표 퐶표푛푐푒ꢀ푡푢푎푙): Nota do Modelo Conceitual proposto para seu banco de dados, podendo variar de 0 até 100. 퐸퐸푅(푀표푑푒푙표 퐿ó푔ꢀ 푐표 퐸푠푡푒푛푑ꢀ푑표): Nota do Modelo Lógico, podendo ser 0 ou 100. 푆퐶퐻퐸푀퐴(푀표푑푒푙표 퐹í푠ꢀ 푐표): Nota do Modelo Físico (códigos SQL de criação do banco e tabelas), podendo ser 0 ou 100. 퐶푂퐷(퐶ó푑ꢀ 푔표 − 퐹표푛푡푒): Nota do Código-Fonte alterado com a integração ao banco de dados e todas as queries necessárias implementadas, podendo ser 0 ou 100. 푃푅푇(푃푟ꢀ푛푡푠 푑푒 푓푢푛푐ꢀ표푛푎푚푒푛푡표): Nota dos Prints de Funcionamento do seu código e banco de dados, podendo ser 0 ou 100. 6
  • 8. Roteiro de Atividade Prática de Banco de Dados FORMATO DE ENTREGA (FE) O formato de entrega é um dos critérios de avaliação, pois um profissional deve ser capaz de seguir normas no momento de elaboração de relatórios técnicos, manuais e outros documentos afins, bem como ser capaz de apresentar seus dados de forma limpa e compreensível. As possíveis notas desse critério são apresentadas na tabela a seguir: Tabela 1: Possíveis notas no formato de entrega NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS Está de acordo com o exemplo (ver a seção “EXEMPLO DE APRESENTAÇÃO DE PRÁTICA” para maiores detalhes) 1,00 Formato de entrega está correto Formato parcialmente correto de entrega está Está muito próximo do exemplo, mas apresenta alguns erros 0,95 0,90 Formato de entrega está incorreto Não seguiu o exemplo. 7
  • 9. Roteiro de Atividade Prática de Banco de Dados INTRODUÇÃO E CÓDIGO BASE (BASE) Você deve criar uma introdução para seu trabalho que explique de forma simples como funciona seu código e quais os dados serão armazenados e recuperados do banco de dados. As possíveis notas para esse critério são apresentadas na tabela a seguir: Tabela 2: Possíveis notas critério de introdução e código base. NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS Introdução que contém explicação do 100 código base e dos dados a serem Introdução completa. colocados no banco de dados. Não apresentou explicação do código base. Não apresentou introdução. 80 Introdução incompleta. Sem introdução. 0 8
  • 10. Roteiro de Atividade Prática de Banco de Dados MODELO CONCEITUAL (MER) Apresentação de seu modelo conceitual proposto para seu banco de dados antes da realização da normalização. As possíveis notas para esse critério são apresentadas na tabela a seguir: Tabela 3: Possíveis notas na apresentação do modelo conceitual NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS Seu modelo deve mostrar todas as entidades (e seus tipos: normal, fraca e associativa), atributos, relacionamentos e cardinalidades para atender às necessidades do seu projeto, incluindo a sinalização de atributos únicos, multivalorados, compostos e derivados (se houver). 100 Modelo 100% correto. Seu modelo está quase completamente correto, porém possui até 3 erros ou faltas de partes necessárias, como cardinalidade ou tipo de atributos. Seu modelo possui mais de 3 erros ou faltas de partes necessárias, como cardinalidade ou tipo de atributos, porém ainda está coerente com o seu objetivo no trabalho. 80 Modelo possui alguns erros. 60 Modelo possui muitos erros. Nenhum modelo entregue. 0 Nenhum modelo conceitual foi colocado no trabalho. 9
  • 11. Roteiro de Atividade Prática de Banco de Dados MODELO LÓGICO (DER/EER) Apresentação de seu modelo lógico proposto para seu banco de dados após da realização da normalização e com SGBD do tipo MySQL (ou outro SGBD Relacional de sala escolha). As possíveis notas para esse critério são apresentadas na tabela a seguir: Tabela 4: Possíveis notas na apresentação do modelo lógico NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS Seu modelo deve mostrar todas as tabelas, colunas, relacionamentos e cardinalidades para atender às necessidades do seu projeto, incluindo a sinalização de chaves primárias, chaves estrangeiras e tipo de dados em cada coluna. 100 Modelo 100% correto. Seu modelo está quase completamente correto, porém possui até 3 erros ou faltas de partes necessárias, como cardinalidade ou tipo de dados em colunas. 80 Modelo possui alguns erros. Seu modelo possui mais de 3 erros ou faltas de partes necessárias. Nenhum modelo lógico foi colocado no trabalho. 60 Modelo possui muitos erros. Nenhum modelo entregue. 0 10
  • 12. Roteiro de Atividade Prática de Banco de Dados MODELO FÍSICO (SCHEMA) Apresentação de seu modelo físico proposto para seu banco de dados contendo todos os comandos SQL para criação completa do seu banco de dados. As possíveis notas para esse critério são apresentadas na tabela a seguir: Tabela 5: Possíveis notas na apresentação do modelo físico NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS Seu modelo deve mostrar o código de criação de todas as tabelas, colunas, relacionamentos, triggers, functions e procedures (se necessários). Seu modelo está quase completamente correto, porém possui até 3 erros. 100 Modelo 100% correto. 80 Modelo possui alguns erros. Seu modelo possui mais de 3 erros, porém ainda está coerente com o seu objetivo no trabalho. Nenhum modelo físico foi colocado no trabalho. 60 Modelo possui muitos erros. Nenhum modelo entregue. 0 11
  • 13. Roteiro de Atividade Prática de Banco de Dados CÓDIGO-FONTE (COD) Apresentação de seu código-fonte alterado com as devidas implementações de integração com seu banco de dados com ao menos as seguintes queries: • • • 1 SELECT contendo um JOIN 1 INSERT 1 UPDATE As possíveis notas para esse critério são apresentadas na tabela a seguir: Tabela 6: Possíveis notas na apresentação do código NOTA DESCRIÇÃO NA DEVOLUTIVA COMENTÁRIOS Seu código deve mostrar uma função ou método Código implementa os 3 tipos de para cada tipo de comando a ser enviado ao banco 100 queries solicitados. de dados, sendo 1 comando do tipo SELECT com um JOIN, um INSERT e um UPDATE. Código não apresentou 1 dos 3 Seu código contém dois dos três tipos de comando a tipos de queries solicitadas. serem enviados ao banco de dados. Código não apresentou 2 dos 3 Seu código contém um dos três tipos de comandos a tipos de queries solicitadas. serem enviados ao banco de dados. Código alterado não apresentado Nenhum código foi colocado no trabalho ou seu comandos de query não código não implementa nenhum dos 3 tipos de implementados. queries a serem enviados ao banco de dados. 80 60 0 e 12
  • 14. Roteiro de Atividade Prática de Banco de Dados PRINTS DE FUNCIONAMENTO (PRT) Apresentação dos prints que comprovem o funcionamento do seu software em comunicação com seu banco de dados. Aqui é necessário colocar ao menos os seguintes prints. • • • 1 Print do funcionamento do código executando uma consulta com JOIN; 1 Print dos dados sendo alterados pelo software; 2 Prints dos dados alterados no banco de dados (print do workbench antes e depois da alteração dos dados pelo software) As possíveis notas para esse critério são apresentadas na tabela a seguir: Tabela 7: Possíveis notas na apresentação dos prints NOTA DESCRIÇÃO NA DEVOLUTIVA Todos os 4 prints estão presentes no trabalho e comprovam o COMENTÁRIOS Seus prints devem estar presentes e comprovar o funcionamento do software e do banco de dados, bem como a integração entre os dois. 100 correto funcionamento do seu projeto. Apenas 3 dos 4 prints foram Um dos prints de comprovação de funcionamento apresentados. não foi apresentado no trabalho. Apenas 2 dos 4 prints foram Dois dos prints de comprovação de funcionamento apresentados. não foi apresentado no trabalho. Apenas 1 dos 4 prints foram Três dos prints de comprovação de funcionamento 80 0 0 6 4 apresentados. não foi apresentado no trabalho. Nenhuma comprovação de funcionamento foi apresentada. 0 Nenhum print apresentado. 13
  • 15. Roteiro de Atividade Prática de Banco de Dados EXEMPLO DE APRESENTAÇÃO DE PRÁTICA Prática 1 – Banco de Dados I. Introdução O software de gerenciamento de lanchonete que será usado como base para este trabalho é um sistema back-end que permite o controle e manipulação de várias operações essenciais em um estabelecimento de alimentos e bebidas. Ele oferece funcionalidades para gerenciar clientes, pedidos e estoque de produtos e insumos. Os usuários podem adicionar e listar clientes, inserir novos pedidos com diferentes status (como "Em preparo" ou "Pronto para retirada") e permite adicionar ou listar itens no estoque. Além disso, o software tem mecanismos para relacionar produtos a insumos, controlando assim as quantidades necessárias para cada item do menu. O sistema também possuirá triggers no banco de dados para atualizar automaticamente o estoque de insumos com base nas alterações feitas nos produtos e pedidos, assim ajudando a manter a consistência dos dados. Para facilitar a navegação, o software utiliza uma estrutura de menu em árvore, permitindo aos usuários escolherem entre diversas opções para realizar as tarefas desejadas. O back-end foi projetado em Python para interagir com um banco de dados MySQL, onde todas as informações são armazenadas e recuperadas. Através de várias classes e métodos, o software fará uso de consultas SQL para inserir, atualizar, deletar e listar dados. Este sistema serve como uma base robusta para gerenciar operações diárias de uma lanchonete, podendo ser expandido ou adaptado para requisitos específicos. O software de gerenciamento de lanchonete armazenará vários tipos de dados no banco de dados para facilitar a operação e administração do estabelecimento. Os principais dados armazenados serão: 1 2 3 4 . Clientes: Informações sobre os clientes, como ID do cliente, nome, endereço, e possivelmente outras informações de contato ou preferências. . Produtos: Detalhes sobre os produtos oferecidos pela lanchonete, incluindo ID do produto, nome, descrição, e quantidade em estoque. . Insumos: Informações sobre os insumos necessários para criar os produtos, como ID do insumo, nome e quantidade em estoque. . ProdutoInsumo: Uma tabela de relacionamento que armazena o ID do produto, ID do insumo e a quantidade de cada insumo necessária para criar uma unidade do produto. Esta tabela serve para manter o controle sobre a composição dos produtos. . Pedidos: Informações sobre os pedidos feitos pelos clientes, incluindo ID do pedido, status (como "Em preparo", "Pronto para retirada", etc.), data e hora do pedido e ID do cliente que fez o pedido. 5 6. PedidoCardapio: Uma tabela de relacionamento que contém os diferentes itens do cardápio que fazem parte de um pedido específico, incluindo a quantidade de cada item. II. Modelo Conceitual (MER): 14
  • 16. Roteiro de Atividade Prática de Banco de Dados Figura 1: Modelo conceitual (MER) do início do projeto de banco de dados para o ERP de lanchonetes. Neste MER vemos 5 entidades simples e 3 entidades associativas. Todas relacionadas com no mínimo um outra entidade e todos os devidos atributos são apresentados. III. Modelo Lógico (EER) após Normalização Figura 2: Modelo lógico (EER) do projeto de banco de dados após normalização. Neste EER vemos 8 tabelas relacionadas entre si e com suas devidas chaves primárias e diversas chaves estrangeiras, além de todas as demais colunas e seus respectivos tipos de dados que serão armazenados no banco de dados. IV. Modelo Físico (SCHEMA) CREATE DATABASE IF NOT EXISTS `lanchonete` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `lanchonete`; - - - - - - MySQL dump 10.13 Distrib 8.0.34, for Win64 (x86_64) - - Host: 127.0.0.1 Database: lanchonete - ------------------------------------------------------ - Server version 8.0.34 / / / / / / / / / / *!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; *!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; *!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; *!50503 SET NAMES utf8 */; *!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; *!40103 SET TIME_ZONE='+00:00' */; *!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; *!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; *!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; *!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- 15
  • 17. Roteiro de Atividade Prática de Banco de Dados - - - Table structure for table `cardapio` - DROP TABLE IF EXISTS `cardapio`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `cardapio` ( ` ` ` ` ` ` IdCardapio` int unsigned NOT NULL AUTO_INCREMENT, Nome` varchar(45) NOT NULL, Descricao` varchar(45) NOT NULL, Categoria` varchar(45) DEFAULT NULL, Valor` decimal(10,2) unsigned zerofill NOT NULL, Disponibilidade` tinyint NOT NULL, PRIMARY KEY (`IdCardapio`), UNIQUE KEY `IdCardapio_UNIQUE` (`IdCardapio`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; - - - - - Table structure for table `cardapioproduto` - DROP TABLE IF EXISTS `cardapioproduto`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `cardapioproduto` ( ` ` ` IdCardapioProduto` int unsigned NOT NULL AUTO_INCREMENT, IdProduto` int unsigned NOT NULL, IdCardapio` int unsigned NOT NULL, PRIMARY KEY (`IdCardapioProduto`), UNIQUE KEY `IdCardapioProduto_UNIQUE` (`IdCardapioProduto`), KEY `FkCardapio_idx` (`IdCardapio`), KEY `FkProduto_idx` (`IdProduto`), CONSTRAINT `FkCardapio_at_CardProd` FOREIGN KEY (`IdCardapio`) REFERENCES `cardapio` (`IdCardapio`), CONSTRAINT `FkProduto_at_CardProd` FOREIGN KEY (`IdProduto`) REFERENCES `produto` (`IdProduto`) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ) /*!40101 SET character_set_client = @saved_cs_client */; - - - - - Table structure for table `cliente` - DROP TABLE IF EXISTS `cliente`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `cliente` ( ` ` ` IdCliente` int unsigned NOT NULL AUTO_INCREMENT, Nome` varchar(50) NOT NULL, Endereco` varchar(100) NOT NULL, PRIMARY KEY (`IdCliente`), UNIQUE KEY `idCliente_UNIQUE` (`IdCliente`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; - - - - - Table structure for table `insumo` - DROP TABLE IF EXISTS `insumo`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `insumo` ( ` ` ` ` ` ` IdInsumo` int unsigned NOT NULL AUTO_INCREMENT, Nome` varchar(45) NOT NULL, Categoria` varchar(45) NOT NULL, UnidadeMedida` varchar(45) NOT NULL, Preco` decimal(10,2) NOT NULL, Quantidade` double NOT NULL, PRIMARY KEY (`IdInsumo`), UNIQUE KEY `IdInsumo_UNIQUE` (`IdInsumo`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; - - - - - Table structure for table `pedido` - DROP TABLE IF EXISTS `pedido`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `pedido` ( ` ` ` ` ` IdPedido` int unsigned NOT NULL AUTO_INCREMENT, Status` varchar(10) NOT NULL, DataHora` datetime NOT NULL, ValorTotal` decimal(10,2) unsigned zerofill NOT NULL, IdCliente` int unsigned NOT NULL, 16
  • 18. Roteiro de Atividade Prática de Banco de Dados PRIMARY KEY (`IdPedido`), UNIQUE KEY `idPedido_UNIQUE` (`IdPedido`), KEY `FkCliente_idx` (`IdCliente`), CONSTRAINT `FkCliente_at_Pedido` FOREIGN KEY (`IdCliente`) REFERENCES `cliente` (`IdCliente`) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; - - - - - Table structure for table `pedidocardapio` - DROP TABLE IF EXISTS `pedidocardapio`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `pedidocardapio` ( ` ` ` ` IdPedidoCardapio` int unsigned NOT NULL AUTO_INCREMENT, IdCardapio` int unsigned NOT NULL, IdPedido` int unsigned NOT NULL, Quantidade` int unsigned NOT NULL, PRIMARY KEY (`IdPedidoCardapio`), UNIQUE KEY `IdPedidoCardapio_UNIQUE` (`IdPedidoCardapio`), KEY `FkPedido_idx` (`IdPedido`), KEY `FkCardapio_idx` (`IdCardapio`), CONSTRAINT `FkCardapio_at_PedCard` FOREIGN KEY (`IdCardapio`) REFERENCES `cardapio` (`IdCardapio`), CONSTRAINT `FkPedido_at_PedCard` FOREIGN KEY (`IdPedido`) REFERENCES `pedido` (`IdPedido`) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ) / / / / / / / / / *!40101 SET character_set_client = @saved_cs_client */; *!50003 SET @saved_cs_client = @@character_set_client */ ; *!50003 SET @saved_cs_results = @@character_set_results */ ; *!50003 SET @saved_col_connection = @@collation_connection */ ; *!50003 SET character_set_client = utf8mb4 */ ; *!50003 SET character_set_results = utf8mb4 */ ; *!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; *!50003 SET @saved_sql_mode *!50003 SET 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_SU BSTITUTION' */ ; DELIMITER ;; *!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `PedidoCardapio_AFTER_INSERT` AFTER INSERT ON / `pedidocardapio` FOR EACH ROW BEGIN DECLARE TotalPedido DECIMAL(10,2); -- Calcula o valor total para o pedido SELECT SUM(PedidoCardapio.Quantidade * Cardapio.Valor) INTO TotalPedido FROM PedidoCardapio JOIN Cardapio ON PedidoCardapio.IdCardapio = Cardapio.IdCardapio WHERE PedidoCardapio.IdPedido = NEW.IdPedido; -- Atualiza o valor total na tabela Pedido UPDATE Pedido SET ValorTotal = TotalPedido WHERE IdPedido = NEW.IdPedido; END */;; DELIMITER ; / / / / / / / / / / / / *!50003 SET sql_mode = @saved_sql_mode */ ; *!50003 SET character_set_client = @saved_cs_client */ ; *!50003 SET character_set_results = @saved_cs_results */ ; *!50003 SET collation_connection = @saved_col_connection */ ; *!50003 SET @saved_cs_client = @@character_set_client */ ; *!50003 SET @saved_cs_results = @@character_set_results */ ; *!50003 SET @saved_col_connection = @@collation_connection */ ; *!50003 SET character_set_client = utf8mb4 */ ; *!50003 SET character_set_results = utf8mb4 */ ; *!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; *!50003 SET @saved_sql_mode *!50003 SET 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_SU BSTITUTION' */ ; DELIMITER ;; *!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `PedidoCardapio_AFTER_UPDATE` AFTER UPDATE ON / `pedidocardapio` FOR EACH ROW BEGIN DECLARE TotalPedido DECIMAL(10,2); -- Calcula o valor total para o pedido SELECT SUM(PedidoCardapio.Quantidade * Cardapio.Valor) INTO TotalPedido FROM PedidoCardapio JOIN Cardapio ON PedidoCardapio.IdCardapio = Cardapio.IdCardapio WHERE PedidoCardapio.IdPedido = NEW.IdPedido; -- Atualiza o valor total na tabela Pedido UPDATE Pedido SET ValorTotal = TotalPedido WHERE IdPedido = NEW.IdPedido; END */;; 17
  • 19. Roteiro de Atividade Prática de Banco de Dados DELIMITER ; / / / / / / / / / / / / *!50003 SET sql_mode = @saved_sql_mode */ ; *!50003 SET character_set_client = @saved_cs_client */ ; *!50003 SET character_set_results = @saved_cs_results */ ; *!50003 SET collation_connection = @saved_col_connection */ ; *!50003 SET @saved_cs_client = @@character_set_client */ ; *!50003 SET @saved_cs_results = @@character_set_results */ ; *!50003 SET @saved_col_connection = @@collation_connection */ ; *!50003 SET character_set_client = utf8mb4 */ ; *!50003 SET character_set_results = utf8mb4 */ ; *!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; *!50003 SET @saved_sql_mode *!50003 SET 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_SU BSTITUTION' */ ; DELIMITER ;; *!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `PedidoCardapio_AFTER_DELETE` AFTER DELETE ON / `pedidocardapio` FOR EACH ROW BEGIN DECLARE TotalPedido DECIMAL(10,2); -- Recalcula o valor total para o pedido após a exclusão de um item SELECT SUM(PedidoCardapio.Quantidade * Cardapio.Valor) INTO TotalPedido FROM PedidoCardapio JOIN Cardapio ON PedidoCardapio.IdCardapio = Cardapio.IdCardapio WHERE PedidoCardapio.IdPedido = OLD.IdPedido; -- Atualiza o valor total na tabela Pedido UPDATE Pedido SET ValorTotal = TotalPedido WHERE IdPedido = OLD.IdPedido; END */;; DELIMITER ; / / / / *!50003 SET sql_mode = @saved_sql_mode */ ; *!50003 SET character_set_client = @saved_cs_client */ ; *!50003 SET character_set_results = @saved_cs_results */ ; *!50003 SET collation_connection = @saved_col_connection */ ; - - - - - Table structure for table `produto` - DROP TABLE IF EXISTS `produto`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `produto` ( ` ` ` ` ` IdProduto` int unsigned NOT NULL AUTO_INCREMENT, Nome` varchar(45) NOT NULL, Quantidade` int NOT NULL, Valor` decimal(10,2) unsigned zerofill NOT NULL, UnidadeMedida` varchar(45) DEFAULT NULL, PRIMARY KEY (`IdProduto`), UNIQUE KEY `IdProduto_UNIQUE` (`IdProduto`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; / / / / / / / / / *!40101 SET character_set_client = @saved_cs_client */; *!50003 SET @saved_cs_client = @@character_set_client */ ; *!50003 SET @saved_cs_results = @@character_set_results */ ; *!50003 SET @saved_col_connection = @@collation_connection */ ; *!50003 SET character_set_client = utf8mb4 */ ; *!50003 SET character_set_results = utf8mb4 */ ; *!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; *!50003 SET @saved_sql_mode = @@sql_mode */ ; *!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; *!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `produto_AFTER_INSERT` AFTER INSERT ON `produto` FOR EACH ROW BEGIN DECLARE insumo_id INT; / DECLARE quantidade_necessaria DOUBLE; DECLARE total_necessario DOUBLE; -- Loop nos insumos necessários para o produto em questão DECLARE done INT DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT IdInsumo, Quantidade FROM ProdutoInsumo WHERE IdProduto = NEW.IdProduto; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO insumo_id, quantidade_necessaria; IF done THEN LEAVE read_loop; END IF; 18
  • 20. Roteiro de Atividade Prática de Banco de Dados -- Calculando a quantidade total necessária do insumo SET total_necessario = NEW.Quantidade * quantidade_necessaria; -- Atualizando a quantidade na tabela de Insumo UPDATE Insumo SET Quantidade = Quantidade - total_necessario WHERE IdInsumo = insumo_id; END LOOP; CLOSE cur; END */;; DELIMITER ; / / / / / / / / / / / / *!50003 SET sql_mode = @saved_sql_mode */ ; *!50003 SET character_set_client = @saved_cs_client */ ; *!50003 SET character_set_results = @saved_cs_results */ ; *!50003 SET collation_connection = @saved_col_connection */ ; *!50003 SET @saved_cs_client = @@character_set_client */ ; *!50003 SET @saved_cs_results = @@character_set_results */ ; *!50003 SET @saved_col_connection = @@collation_connection */ ; *!50003 SET character_set_client = utf8mb4 */ ; *!50003 SET character_set_results = utf8mb4 */ ; *!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; *!50003 SET @saved_sql_mode *!50003 SET sql_mode = @@sql_mode */ ; = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; *!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `produto_AFTER_UPDATE` AFTER UPDATE ON `produto` FOR EACH ROW BEGIN DECLARE insumo_id INT; / DECLARE quantidade_necessaria DOUBLE; DECLARE quantidade_diferenca DOUBLE; DECLARE done INT DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT IdInsumo, Quantidade FROM ProdutoInsumo WHERE IdProduto = NEW.IdProduto; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- Calculando a diferença entre as quantidades antigas e novas SET quantidade_diferenca = NEW.Quantidade - OLD.Quantidade; -- Se a quantidade do produto mudou IF quantidade_diferenca > 0 THEN OPEN cur; read_loop: LOOP FETCH cur INTO insumo_id, quantidade_necessaria; IF done THEN LEAVE read_loop; END IF; -- Calculando a quantidade total necessária do insumo baseada na diferença SET quantidade_necessaria = quantidade_necessaria * quantidade_diferenca; -- Atualizando a quantidade na tabela Insumo UPDATE Insumo SET Quantidade = Quantidade - quantidade_necessaria WHERE IdInsumo = insumo_id; END LOOP; CLOSE cur; END IF; END */;; DELIMITER ; / / / / *!50003 SET sql_mode = @saved_sql_mode */ ; *!50003 SET character_set_client = @saved_cs_client */ ; *!50003 SET character_set_results = @saved_cs_results */ ; *!50003 SET collation_connection = @saved_col_connection */ ; - - - - - Table structure for table `produtoinsumo` - DROP TABLE IF EXISTS `produtoinsumo`; / / *!40101 SET @saved_cs_client = @@character_set_client */; *!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `produtoinsumo` ( ` ` ` ` IdProdutoInsumo` int unsigned NOT NULL AUTO_INCREMENT, IdProduto` int unsigned NOT NULL, IdInsumo` int unsigned NOT NULL, Quantidade` double NOT NULL, PRIMARY KEY (`IdProdutoInsumo`), UNIQUE KEY `IdProdutoInsumo_UNIQUE` (`IdProdutoInsumo`), KEY `FkInsumo_idx` (`IdInsumo`), KEY `FkProduto_idx` (`IdProduto`), CONSTRAINT `FkInsumo_at_ProdIns` FOREIGN KEY (`IdInsumo`) REFERENCES `insumo` (`IdInsumo`), CONSTRAINT `FkProduto_at_ProdIns` FOREIGN KEY (`IdProduto`) REFERENCES `produto` (`IdProduto`) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ) 19
  • 21. Roteiro de Atividade Prática de Banco de Dados /*!40101 SET character_set_client = @saved_cs_client */; - - - - - Dumping routines for database 'lanchonete' - /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; / / / / / / / *!40101 SET SQL_MODE=@OLD_SQL_MODE */; *!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; *!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; *!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; *!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; *!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; *!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2023-08-30 2:20:10 V. Código-fonte (COD) Aqui será mostrado apenas o código-fonte referente à interação com o banco de dados: ''' Classes de conexão com o banco de dados '' ' import os import mysql.connector from dotenv import load_dotenv # Carregar variáveis de ambiente load_dotenv() DB_HOST = os.getenv("DB_HOST") DB_USER = os.getenv("DB_USER") DB_PASSWORD = os.getenv("DB_PASSWORD") DB_NAME = os.getenv("DB_NAME") class LanchoneteDB: ''' Classe de conexão com o banco de dados - tabela lanchonete '' ' def __init__(self): self.connection = mysql.connector.connect( host=DB_HOST, user=DB_USER, password=DB_PASSWORD, database=DB_NAME ) self.cursor = self.connection.cursor() def close(self): self.cursor.close() self.connection.close() class Cliente(LanchoneteDB): ''' Classe Cliente permite o cadastro de um novo cliente e também a visualização dos clientes cadastrados. Métodos: - - - ' inserir(nome, endereço): None listar(): Lista de todos os nomes dos clientes e seus IDs listaDados(idCliente): Nome e Endereço de um cliente '' def inserir(self, nome, endereco): query = "INSERT INTO Cliente (Nome, Endereco) VALUES (%s, %s)" self.cursor.execute(query, (nome, endereco)) self.connection.commit() def listar(self): """Lista todos os clientes cadastrados e seus IDs Returns: tupla: tuplas com ((Nome), (idCliente)) para cada cliente cadastrado """ query = "SELECT Nome, idCliente FROM Cliente" self.cursor.execute(query) return self.cursor.fetchall() def listar_dados(self, id_cliente): 20
  • 22. Roteiro de Atividade Prática de Banco de Dados """Lista todos os dados de um cliente cadastrado Returns: tupla: tuplas com os dados do cliente """ query = "SELECT * FROM Cliente WHERE idCliente = %s LIMIT 1" self.cursor.execute(query, id_cliente) return self.cursor.fetchall() class Pedido(LanchoneteDB): def inserir(self, status, data_hora, id_cliente): query = "INSERT INTO Pedido (Status, DataHora, IdCliente) VALUES (%s, %s, %s)" self.cursor.execute(query, (status, data_hora, id_cliente)) self.connection.commit() def listar(self): query = "SELECT * FROM Pedido" self.cursor.execute(query) return self.cursor.fetchall() def atualizar_status(self, id_pedido, novo_status): query = "UPDATE Pedido SET Status = %s WHERE IdPedido = %s" self.cursor.execute(query, (novo_status, id_pedido)) self.connection.commit() def listar_por_status(self, status): query = """ SELECT Pedido.idPedido, Pedido.Status, Pedido.DataHora, Cliente.Nome FROM Pedido INNER JOIN Cliente ON Pedido.IdCliente = Cliente.idCliente WHERE Pedido.Status = %s """ self.cursor.execute(query, [status]) return self.cursor.fetchall() class Cardapio(LanchoneteDB): def inserir(self, nome, descricao, categoria, valor, disponibilidade): query = "INSERT INTO Cardapio (Nome, Descricao, Categoria, Valor, Disponibilidade) VALUES (%s, %s, %s, %s, %s)" self.cursor.execute(query, (nome, descricao, categoria, valor, disponibilidade)) self.connection.commit() def listar(self): query = "SELECT * FROM Cardapio" self.cursor.execute(query) return self.cursor.fetchall() from lanchonete_db import LanchoneteDB # Certifique-se de que este arquivo seja importado corretamente class PedidoCardapio(LanchoneteDB): ''' Classe PedidoCardapio permite o gerenciamento das relações entre pedidos e itens do cardápio. Métodos: - - - - ' adicionar(IdPedido, IdProduto, Quantidade): None apagar(IdPedidoCardapio): None listar(): Lista de todos os registros da tabela PedidoCardapio alterar(IdPedidoCardapio, IdPedido, IdProduto, Quantidade): None '' def adicionar(self, id_pedido, id_produto, quantidade): query = "INSERT INTO PedidoCardapio (IdPedido, IdProduto, Quantidade) VALUES (%s, %s, %s)" self.cursor.execute(query, (id_pedido, id_produto, quantidade)) self.connection.commit() def apagar(self, id_pedido_cardapio): query = "DELETE FROM PedidoCardapio WHERE IdPedidoCardapio = %s" self.cursor.execute(query, (id_pedido_cardapio,)) self.connection.commit() def listar(self): query = "SELECT * FROM PedidoCardapio" self.cursor.execute(query) return self.cursor.fetchall() def alterar(self, id_pedido_cardapio, id_pedido, id_produto, quantidade): 21
  • 23. Roteiro de Atividade Prática de Banco de Dados query = "UPDATE PedidoCardapio SET IdPedido = %s, IdProduto = %s, Quantidade = %s WHERE IdPedidoCardapio = %s" self.cursor.execute(query, (id_pedido, id_produto, quantidade, id_pedido_cardapio)) self.connection.commit() def listar_por_pedido(self, id_pedido): query = "SELECT * FROM PedidoCardapio WHERE IdPedido = %s" self.cursor.execute(query, [id_pedido]) return self.cursor.fetchall() class Produto(LanchoneteDB): def inserir(self, nome, quantidade, valor, unidade_medida): query = "INSERT INTO Produto (Nome, Quantidade, Valor, UnidadeMedida) VALUES (%s, %s, %s, s)" % self.cursor.execute(query, (nome, quantidade, valor, unidade_medida)) self.connection.commit() def listar(self): query = "SELECT * FROM Produto" self.cursor.execute(query) return self.cursor.fetchall() def get_last_insert_id(self): query = "SELECT LAST_INSERT_ID()" self.cursor.execute(query) result = self.cursor.fetchone() if result: return result[0] else: return None class CardapioProduto(LanchoneteDB): '' ' Classe CardapioProduto permite o gerenciamento das relações entre cardápios e produtos. Métodos: - - - - ' adicionar(IdCardapio, IdProduto, Quantidade): None apagar(IdCardapioProduto): None listar(): Lista de todos os registros da tabela CardapioProduto alterar(IdCardapioProduto, IdCardapio, IdProduto, Quantidade): None '' def adicionar(self, id_cardapio, id_produto, quantidade): query = "INSERT INTO CardapioProduto (IdCardapio, IdProduto, Quantidade) VALUES (%s, %s, %s)" self.cursor.execute(query, (id_cardapio, id_produto, quantidade)) self.connection.commit() def apagar(self, id_cardapio_produto): query = "DELETE FROM CardapioProduto WHERE IdCardapioProduto = %s" self.cursor.execute(query, (id_cardapio_produto,)) self.connection.commit() def listar(self): query = "SELECT * FROM CardapioProduto" self.cursor.execute(query) return self.cursor.fetchall() def alterar(self, id_cardapio_produto, id_cardapio, id_produto, quantidade): query = "UPDATE CardapioProduto SET IdCardapio = %s, IdProduto = %s, Quantidade = %s WHERE IdCardapioProduto = %s" self.cursor.execute(query, (id_cardapio, id_produto, quantidade, id_cardapio_produto)) self.connection.commit() def listar_por_cardapio(self, id_cardapio): query = "SELECT * FROM CardapioProduto WHERE IdCardapio = %s" self.cursor.execute(query, [id_cardapio]) return self.cursor.fetchall() class Insumo(LanchoneteDB): ''' Classe Insumo permite o cadastro de um novo insumo e também a visualização dos insumos cadastrados. Métodos: - - - inserir(nome, categoria, unidade_medida, quantidade, preco): None listar(): Lista de todos os insumos e seus IDs listar_dados(idInsumo): Todos os dados de um insumo específico 22
  • 24. Roteiro de Atividade Prática de Banco de Dados ''' def inserir(self, nome, categoria, unidade_medida, quantidade, preco): query = "INSERT INTO Insumo (Nome, Categoria, UnidadeMedida, Quantidade, Preco) VALUES (%s, %s, %s, %s, %s)" self.cursor.execute(query, (nome, categoria, unidade_medida, quantidade, preco)) self.connection.commit() def listar(self): """Lista todos os insumos cadastrados e seus IDs Returns: tupla: tuplas com todos os dados de cada insumo cadastrado """ query = "SELECT * FROM Insumo" self.cursor.execute(query) return self.cursor.fetchall() def buscar_por_nome(self, nome_insumo): query = "SELECT IdInsumo FROM Insumo WHERE Nome = %s LIMIT 1" self.cursor.execute(query, (nome_insumo,)) result = self.cursor.fetchone() if result: return result[0] else: return None def listar_dados(self, id_insumo): """Lista todos os dados de um insumo específico Returns: tupla: tuplas com os dados do insumo """ query = "SELECT * FROM Insumo WHERE idInsumo = %s LIMIT 1" self.cursor.execute(query, (id_insumo,)) return self.cursor.fetchall() class ProdutoInsumo(LanchoneteDB): ''' Classe ProdutoInsumo permite o gerenciamento das relações entre produtos e insumos. Métodos: - - - - - ' adicionar(IdProduto, IdInsumo, Quantidade): None apagar(IdProdutoInsumo): None listar(): Lista de todos os registros da tabela ProdutoInsumo alterar(IdProdutoInsumo, IdProduto, IdInsumo, Quantidade): None buscar_por_nome(nome_produto): Retorna os registros do produto pelo nome '' def adicionar(self, id_produto, id_insumo, quantidade): query = "INSERT INTO ProdutoInsumo (IdProduto, IdInsumo, Quantidade) VALUES (%s, %s, %s)" self.cursor.execute(query, (id_produto, id_insumo, quantidade)) self.connection.commit() def apagar(self, id_produto_insumo): query = "DELETE FROM ProdutoInsumo WHERE IdProdutoInsumo = %s" self.cursor.execute(query, (id_produto_insumo,)) self.connection.commit() def listar(self): query = "SELECT * FROM ProdutoInsumo" self.cursor.execute(query) return self.cursor.fetchall() def alterar(self, id_produto_insumo, id_produto, id_insumo, quantidade): query = "UPDATE ProdutoInsumo SET IdProduto = %s, IdInsumo = %s, Quantidade = %s WHERE IdProdutoInsumo = %s" self.cursor.execute(query, (id_produto, id_insumo, quantidade, id_produto_insumo)) self.connection.commit() def buscar_por_nome(self, nome_produto): query = """SELECT * FROM ProdutoInsumo INNER JOIN Produto ON ProdutoInsumo.IdProduto = Produto.IdProduto WHERE Produto.Nome = %s""" self.cursor.execute(query, (nome_produto,)) return self.cursor.fetchall() 23
  • 25. Roteiro de Atividade Prática de Banco de Dados VI. Prints de funcionamento do software. 1 Print do funcionamento do código executando uma consulta com JOIN: 1 Print dos dados sendo alterados pelo software: 24
  • 26. Roteiro de Atividade Prática de Banco de Dados 2 Prints dos dados alterados no banco de dados (print do workbench antes e depois da alteração dos dados pelo software): Antes está na imagem anterior. VII. Conclusão Neste projeto, o foco principal foi na modelagem e implementação de um banco de dados robusto e eficiente que serve como espinha dorsal para o sistema de gerenciamento da lanchonete. Utilizamos diversas tabelas para representar entidades como clientes, pedidos, produtos, insumos e o cardápio, e criamos relações bem definidas entre elas. Triggers e consultas SQL complexas foram empregadas para manter a integridade dos dados e para automatizar tarefas como a atualização do estoque de insumos. A integração do banco de dados com o software foi feita de forma modular, permitindo escalabilidade e manutenção mais fáceis. Cada aspecto do negócio, seja ele o gerenciamento de clientes ou de pedidos, é manipulado por classes Python distintas que interagem com o banco de dados. Isso não só torna o sistema mais organizado, mas também permite uma grande flexibilidade na implementação de novas funcionalidades. Em resumo, o sucesso deste sistema deve-se em grande parte à sua sólida estrutura de banco de dados e à integração eficaz deste com as funcionalidades do software. 25
  • 27. Roteiro de Atividade Prática de Banco de Dados PRÁTICAS MOTIVAÇÃO DO TRABALHO Vivenciar um projeto de implementação de banco de dados em um software real e aplicar os conhecimentos adquiridos em sala. OBJETIVO DO PROJETO Implementar um banco de dados relacional do início ao fim com integração em um software. 26
  • 28. Roteiro de Atividade Prática de Banco de Dados PRÁTICA 01- BANCO DE DADOS. Sua missão será escolher um software antigo seu e criar um banco de dados para atender às demandas deste software. Veja mais detalhes nos critérios de avaliação e no exemplo de prática. Por fim, você deverá criar: • • • Uma introdução com descritivo do seu código base; Um modelo conceitual do banco de dados (MER); Um diagrama de entidade e relacionamento (DER/EER – modelo lógico estendido ou simples); • • • Um modelo físico (comandos SQL para criação do banco e suas tabelas); Mostrar seu Código-fonte alterado para integração com o banco de dados; Adicionar os prints de funcionamento do seu código e banco de dados: o Print do funcionamento do código executando uma consulta com JOIN; o Print dos dados sendo alterados pelo software; o Prints dos dados alterados no banco de dados (print do workbench antes e depois da alteração dos dados pelo software). 27
  • 29. Roteiro de Atividade Prática de Banco de Dados RESPOSTAS AS DÚVIDAS MAIS FREQUÊNTES 1. Pode resumir o que fazer no trabalho? R: Passo 1 – Escolha seu software que servirá de base para criação do banco de dados. Passo 2 – Crie um modelo conceitual (MER) para seu banco. Passo 3 – Crie um modelo lógico (DER/EER) já com a normalização do banco. Passo 4 – Converta seu EER em código SQL para criação do banco. Passo 5 – Altere seu código para que ele faça conexão com seu banco de dados e inclua ao menos 1 SELECT com JOIN, 1 INSERT e 1 UPDATE. Passo 6 – Escreva uma breve introdução do seu trabalho, explicando o funcionamento do seu software e como o seu banco de dados atenderá as necessidades dele. Passo 7 – Teste seu software e banco de dados, realizando prints das telas de funcionamento. Passo 8 – Preencha o modelo de relatório com todos os dados e imagens que você criou e finalize com uma breve conclusão. Passo 9 – Converta para PDF e entregue o seu trabalho. Desejo a todos um ótimo aprendizado e nos vemos na tutoria. Atenciosamente. Professor Guilherme D Patriota. 28