Você está na página 1de 15

UNOPAR - UNIVERSIDADE DO NORTE DO PARANÁ

THIAGO MOREIRA BIANECK


RA: 3218661802

RELATÓRIO DE AULA PRÁTICA

Relatório técnico apresentado como requisito


para avaliação parcial na disciplina de
Programação e Desenvolvimento de Banco
de Dados.
Orientador: Profª. Jéssica Lopes.

PATO BRANCO -PR


2023
1 INTRODUÇÃO

A aula prática teve como foco a criação de um banco de dados utilizando a


linguagem SQL, com a posterior realização de operações de manipulação e acesso
aos dados. Para alcançar esse objetivo, foram utilizados o MySQL Community Server
e o MySQL Workbench como infraestrutura de suporte.

2 OBJETIVOS

Os objetivos principais desta aula prática foram:

• Criar um banco de dados denominado "Loja" usando o MySQL Server


e MySQL Workbench.
• Desenvolver a estrutura do banco de dados, incluindo tabelas,
seguindo o modelo definido em um Diagrama Entidade-
Relacionamento (DER) pré-definido.
• Realizar a inserção de dados nas tabelas do banco.
• Consultar dados armazenados, criando uma visão (View).
• Documentar todo o processo em um relatório.

3 MATERIAIS E MÉTODOS
Infraestrutura:

• MySQL Community Server.


• MySQL Workbench.

Procedimentos Práticos:

• Etapa 1: Criação da base de dados "Loja" com estruturas de dados


definidas no DER.
• Etapa 2: Criação do script "inserir.sql" para inserção de dados nas
tabelas.
• Etapa 3: Elaboração do script "consulta.sql" para criar uma visão de
contas não pagas.

4 RESULTADOS E DISCUSSÃO

Etapa 1: Criação da base de dados "Loja"

Utilizando o MySQL Workbench, foi criada a base de dados "Loja" com tabelas
representadas no DER. Foram respeitadas as regras, como autoincremento para
chaves primárias e enumeração para o campo "Situação" da tabela "ContaReceber".

O Script gerado foi o seguinte:


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

-- Table Estado
CREATE TABLE IF NOT EXISTS `loja`.`Estado` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Nome` VARCHAR(50) NOT NULL,
`UF` CHAR(2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

-- Table Municipio
CREATE TABLE IF NOT EXISTS `loja`.`Municipio` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Estado_ID` INT NOT NULL,
`Nome` VARCHAR(80) NOT NULL,
`CodIBGE` INT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

-- Add foreign key to Municipio referencing Estado


ALTER TABLE `loja`.`Municipio`
ADD INDEX `fk_Municipio_Estado1_idx_idx` (`Estado_ID` ASC)
VISIBLE,
ADD CONSTRAINT `fk_Municipio_Estado1_idx`
FOREIGN KEY (`Estado_ID`)
REFERENCES `loja`.`Estado` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

-- Table Cliente
CREATE TABLE IF NOT EXISTS `loja`.`Cliente` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Nome` VARCHAR(80) NOT NULL,
`CPF` CHAR(11) NOT NULL,
`Celular` CHAR(11) NULL,
`EndLogradouro` VARCHAR(100) NOT NULL,
`EndNumero` VARCHAR(10) NOT NULL,
`EndMunicipio` INT NOT NULL,
`EndCEP` CHAR(8) NULL,
`Municipio_ID` INT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

-- Add foreign key to Cliente referencing Municipio


ALTER TABLE `loja`.`Cliente`
ADD INDEX `fk_Cliente_Municipio1_idx_idx` (`Municipio_ID` ASC)
VISIBLE,
ADD CONSTRAINT `fk_Cliente_Municipio1_idx`
FOREIGN KEY (`Municipio_ID`)
REFERENCES `loja`.`Municipio` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

-- Table ContaReceber
CREATE TABLE IF NOT EXISTS `loja`.`ContaReceber` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Cliente_ID` INT NOT NULL,
`FaturaVendaID` INT NULL,
`DataConta` DATE NOT NULL,
`DataVencimento` DATE NOT NULL,
`Valor` DECIMAL(18,2) NOT NULL,
`Situacao` ENUM('1', '2', '3') NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

-- Add foreign key to ContaReceber referencing Cliente


ALTER TABLE `loja`.`ContaReceber`
ADD INDEX `fk_ContaReceber_Cliente_idx_idx` (`Cliente_ID` ASC)
VISIBLE,
ADD CONSTRAINT `fk_ContaReceber_Cliente_idx`
FOREIGN KEY (`Cliente_ID`)
REFERENCES `loja`.`Cliente` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Os passos da criação do script são os seguintes:

1. Criação do Schema:

CREATE SCHEMA IF NOT EXISTS `loja` DEFAULT CHARACTER SET utf8;

• Define o esquema "loja" se não existir, usando o conjunto de


caracteres utf8.

2. Seleção do Schema:
USE `loja`;

• Seleciona o esquema "loja" para a execução dos comandos


subsequentes.

3. Criação da Tabela Estado:

CREATE TABLE IF NOT EXISTS `loja`.`Estado` (


`ID` INT NOT NULL AUTO_INCREMENT,
`Nome` VARCHAR(50) NOT NULL,
`UF` CHAR(2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

• Cria a tabela "Estado" com colunas ID, Nome e UF.


• Define a coluna ID como chave primária com autoincremento.

4. Criação da Tabela Municipio:


CREATE TABLE IF NOT EXISTS `loja`.`Municipio` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Estado_ID` INT NOT NULL,
`Nome` VARCHAR(80) NOT NULL,
`CodIBGE` INT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

• Cria a tabela "Municipio" com colunas ID, Estado_ID, Nome e CodIBGE.


• Define a coluna ID como chave primária com autoincremento.

5. Adição de Foreign Key à Tabela Municipio:

ALTER TABLE `loja`.`Municipio`


ADD INDEX `fk_Municipio_Estado1_idx_idx` (`Estado_ID` ASC)
VISIBLE,
ADD CONSTRAINT `fk_Municipio_Estado1_idx`
FOREIGN KEY (`Estado_ID`)
REFERENCES `loja`.`Estado` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

• Adiciona uma chave estrangeira (foreign key) à coluna Estado_ID na


tabela Municipio, referenciando a coluna ID na tabela Estado.

6. Criação da Tabela Cliente:

CREATE TABLE IF NOT EXISTS `loja`.`Cliente` (


`ID` INT NOT NULL AUTO_INCREMENT,
`Nome` VARCHAR(80) NOT NULL,
`CPF` CHAR(11) NOT NULL,
`Celular` CHAR(11) NULL,
`EndLogradouro` VARCHAR(100) NOT NULL,
`EndNumero` VARCHAR(10) NOT NULL,
`EndMunicipio` INT NOT NULL,
`EndCEP` CHAR(8) NULL,
`Municipio_ID` INT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

• Cria a tabela "Cliente" com colunas ID, Nome, CPF, Celular,


EndLogradouro, EndNumero, EndMunicipio, EndCEP e Municipio_ID.
• Define a coluna ID como chave primária com autoincremento.

7. Adição de Foreign Key à Tabela Cliente:

ALTER TABLE `loja`.`Cliente`


ADD INDEX `fk_Cliente_Municipio1_idx_idx` (`Municipio_ID` ASC)
VISIBLE,
ADD CONSTRAINT `fk_Cliente_Municipio1_idx`
FOREIGN KEY (`Municipio_ID`)
REFERENCES `loja`.`Municipio` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

• Adiciona uma chave estrangeira à coluna Municipio_ID na tabela


Cliente, referenciando a coluna ID na tabela Municipio.

8. Criação da Tabela ContaReceber:

CREATE TABLE IF NOT EXISTS `loja`.`ContaReceber` (


`ID` INT NOT NULL AUTO_INCREMENT,
`Cliente_ID` INT NOT NULL,
`FaturaVendaID` INT NULL,
`DataConta` DATE NOT NULL,
`DataVencimento` DATE NOT NULL,
`Valor` DECIMAL(18,2) NOT NULL,
`Situacao` ENUM('1', '2', '3') NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;

• Cria a tabela "ContaReceber" com colunas ID, Cliente_ID,


FaturaVendaID, DataConta, DataVencimento, Valor e Situacao.
• Define a coluna ID como chave primária com autoincremento.

9. Adição de Foreign Key à Tabela ContaReceber:

ALTER TABLE `loja`.`ContaReceber`


ADD INDEX `fk_ContaReceber_Cliente_idx_idx` (`Cliente_ID` ASC)
VISIBLE,
ADD CONSTRAINT `fk_ContaReceber_Cliente_idx`
FOREIGN KEY (`Cliente_ID`)
REFERENCES `loja`.`Cliente` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

• Adiciona uma chave estrangeira à coluna Cliente_ID na tabela


ContaReceber, referenciando a coluna ID na tabela Cliente.

Este script segue a ordem recomendada de criação de tabelas para evitar


problemas com chaves estrangeiras.

Etapa 2: Script "inserir.sql"

• Um script contendo comandos DML foi desenvolvido para inserir dados


nas tabelas do banco "Loja". Pelo menos três registros foram
adicionados por tabela, garantindo a variedade e representatividade dos
dados.

O Script criado foi o seguinte:

-- Inserir dados na tabela Estado


INSERT INTO `loja`.`Estado` (`Nome`, `UF`) VALUES
('São Paulo', 'SP'),
('Rio de Janeiro', 'RJ'),
('Minas Gerais', 'MG');

-- Inserir dados na tabela Municipio


INSERT INTO `loja`.`Municipio` (`Estado_ID`, `Nome`, `CodIBGE`)
VALUES
(1, 'São Paulo', 3550308),
(2, 'Rio de Janeiro', 3304557),
(3, 'Belo Horizonte', 3106200);

-- Inserir dados na tabela Cliente


INSERT INTO `loja`.`Cliente` (`Nome`, `CPF`, `Celular`,
`EndLogradouro`, `EndNumero`, `EndMunicipio`, `EndCEP`,
`Municipio_ID`) VALUES
('João Silva', '12345678901', '987654321', 'Rua A', '123', 1,
'01234567', 1),
('Maria Oliveira', '98765432101', '999888777', 'Rua B', '456',
2, '76543210', 2),
('Carlos Santos', '55544433322', '111222333', 'Rua C', '789',
3, '54321098', 3);

-- Inserir dados na tabela ContaReceber


INSERT INTO `loja`.`ContaReceber` (`Cliente_ID`, `FaturaVendaID`,
`DataConta`, `DataVencimento`, `Valor`, `Situacao`) VALUES
(1, 101, '2023-01-01', '2023-02-01', 1000.00, '1'),
(2, 102, '2023-02-01', '2023-03-01', 1500.50, '1'),
(3, 103, '2023-03-01', '2023-04-01', 2000.75, '1');

Explicação Passo a Passo do Script "inserir.sql":

1. Inserir dados na tabela Estado:

INSERT INTO `loja`.`Estado` (`Nome`, `UF`) VALUES


('São Paulo', 'SP'),
('Rio de Janeiro', 'RJ'),
('Minas Gerais', 'MG');

• Insere três registros na tabela `Estado`, cada um representando um


estado brasileiro com seu nome e UF.

2. Inserir dados na tabela Municipio:

INSERT INTO `loja`.`Municipio` (`Estado_ID`, `Nome`,


`CodIBGE`) VALUES
(1, 'São Paulo', 3550308),
(2, 'Rio de Janeiro', 3304557),
(3, 'Belo Horizonte', 3106200);

• Insere três registros na tabela `Municipio`, cada um representando uma


cidade, associada a um estado através da chave estrangeira
`Estado_ID`.

3. Inserir dados na tabela Cliente:

INSERT INTO `loja`.`Cliente` (`Nome`, `CPF`, `Celular`,


`EndLogradouro`, `EndNumero`, `EndMunicipio`, `EndCEP`,
`Municipio_ID`) VALUES
('João Silva', '12345678901', '987654321', 'Rua A', '123',
1, '01234567', 1),
('Maria Oliveira', '98765432101', '999888777', 'Rua B',
'456', 2, '76543210', 2),
('Carlos Santos', '55544433322', '111222333', 'Rua C', '789',
3, '54321098', 3);

• Insere três registros na tabela `Cliente`, cada um representando uma


pessoa com informações como nome, CPF, celular, endereço, e
associada a uma cidade através da chave estrangeira `Municipio_ID`.

4. Inserir dados na tabela ContaReceber:

INSERT INTO `loja`.`ContaReceber` (`Cliente_ID`,


`FaturaVendaID`, `DataConta`, `DataVencimento`, `Valor`,
`Situacao`) VALUES
(1, 101, '2023-01-01', '2023-02-01', 1000.00, '1'),
(2, 102, '2023-02-01', '2023-03-01', 1500.50, '1'),
(3, 103, '2023-03-01', '2023-04-01', 2000.75, '1');

• Insere três registros na tabela `ContaReceber`, cada um representando


uma conta a receber associada a um cliente, com informações como
data da conta, data de vencimento, valor e situação.

Este script popula as tabelas do banco de dados "loja" com dados de


exemplo para posterior utilização e teste. Certifique-se de adaptar os
valores conforme necessário para refletir os dados específicos que você
deseja inserir.

Etapa 3: Script "consulta.sql"

• Foi elaborado um script que cria uma visão (VIEW) chamada


"ContasNaoPagas" utilizando comandos DQL. Essa visão retorna
informações relevantes sobre as contas que ainda não foram pagas,
conforme especificado no checklist.

O Script criado foi o seguinte:

-- Criação da View para Contas Não Pagas


CREATE VIEW ContasNaoPagas AS
SELECT
CR.ID AS 'ID da conta a receber',
C.Nome AS 'Nome do Cliente',
C.CPF AS 'CPF do Cliente',
CR.DataVencimento AS 'Data de Vencimento',
CR.Valor AS 'Valor da Conta'
FROM
loja.ContaReceber CR
JOIN
loja.Cliente C ON CR.Cliente_ID = C.ID
WHERE
CR.Situacao = '1';

Explicação Passo a Passo do Script "consulta.sql":

1. Criação da View para Contas Não Pagas:

• Cria uma view chamada `ContasNaoPagas` que combina dados das


tabelas `ContaReceber` e `Cliente`.
• Seleciona as colunas desejadas: ID da conta a receber, Nome e CPF do
Cliente, Data de Vencimento e Valor da Conta.
• Utiliza a cláusula `JOIN` para relacionar as tabelas `ContaReceber` e
`Cliente` com base na chave estrangeira `Cliente_ID`.
• Utiliza a cláusula `WHERE` para filtrar apenas as contas com situação
igual a '1' (Conta registrada).
Esta view pode ser consultada posteriormente para obter informações sobre
todas as contas que ainda não foram pagas.

5 CONCLUSÕES

A aula prática proporcionou uma compreensão prática do processo de criação


e manipulação de bancos de dados usando SQL. O uso do MySQL Community Server
e MySQL Workbench facilitou a execução das tarefas propostas. A criação do banco
de dados, a inserção de dados e a consulta por meio de visões foram realizadas com
sucesso.
6 REFERÊNCIAS

[1] Documentação MySQL. Disponível em: https://dev.mysql.com/doc/

Você também pode gostar