Você está na página 1de 10

Projeto Banco de Dados

Aluno: Henrique Magnesi


Cietto RA: 22.121.016-4
Aluno: Daniel

Martinez RA:

22.121.049-5

Trabalho Prático Banco de

Dados Etapa 1

1. Objetivo do Sistema

Sistema feito para facilitar o processo de aluguel de veículos, com dois


tipos diferentes de clientes: o cliente(I) que utilizará o veículo, e o cliente
parceiro(II),
proprietário do veículo. Os agentes da empresa são responsáveis por intermediar
o processo do serviço, criando os contratos, recebendo os pagamentos, entre
outras atividades, para garantir maior segurança e qualidade. Isso permite que
alugar um veículo seja menos burocrático e, consequentemente, mais simples e
rápido.

2. Principais Funcionalidades
● Cadastro de clientes, podendo ser do tipo cliente(I) ou cliente
parceiro (II)
● Cadastro dos veículos dos clientes parceiros(II), podendo ser carros
de passeio, utilitários ou super carros
● Clientes parceiros(II) podem possuir mais de um carro para alugar
● Clientes(I) podem alugar mais de um carro

● Clientes podem escolher qual carro desejam alugar, filtrando por


cor, marca, modelo, valor e diversos outros parâmetros

● Agentes e clientes(I) podem negociar preços e condições

3. Lógica de Modelagem
● Os clientes têm em comum: CPF, endereço, nome, celular

● Clientes(I) possuem ID específico

● Clientes parceiros(II) possuem, além do ID, tempo de parceria com


a empresa
● Agentes recebem os pagamentos dos clientes(I), criam e analisam as
condições do contrato e de pagamento, administram os clientes
parceiros(II) e enviam o pagamento a eles. Possuem ID, nome e
celular.
● Clientes (I) e (II) não podem negociar diretamente, sendo tal
função exclusiva do agente. Ele é responsável por precificar o
veículo e negociar o aluguel.
● Cliente parceiro (II) tem uma faixa de valor possível a receber, com
máximo e mínimo. Isso varia conforme preço negociado entre agente
e cliente(I)

● Carros possuem vários atributos em comum, mas podem ser de


diferentes tipos: Passeio, utilitário ou super carro. Cada um
com atributos específicos.
● Nos contratos existem diversas cláusulas referentes à penalidades
que podem ser aplicadas em casos de danificação do veículo durante
a utilização do cliente(I)
Etapa 2

1. Primeiramente corrigimos os erros anterior do MER: removemos os atributos chave das


subclasses e adicionamos mais atributos às subclasses com apenas 1
2. Criamos o MR, baseado no MER, utilizando as regras para que essa transição fosse feita
3. Implementamos as tabelas de fato no sistema, utilizando os seguintes comandos:

CREATE TABLE agente (


id_agente INT PRIMARY KEY,
nome VARCHAR(50),
celular VARCHAR(20)
)

CREATE TABLE cliente (


CPF VARCHAR(20) PRIMARY KEY,
endereço VARCHAR(100),
nome VARCHAR (50),
celular VARCHAR(20)
)

CREATE TABLE cliente_parceiro (


CPF VARCHAR(20) PRIMARY KEY,
tempo_parceria INT,
num_negocios INT,
id_agente INT,
FOREIGN KEY (CPF) REFERENCES cliente(CPF),
FOREIGN KEY (id_agente) REFERENCES agente(id_agente)
)

CREATE TABLE cliente_aluga (


CPF VARCHAR(20) PRIMARY KEY,
obs VARCHAR(300),
freq_negocios INT,
FOREIGN KEY (CPF) REFERENCES cliente(CPF)
)

CREATE TABLE carro (


placa VARCHAR(50) PRIMARY KEY,
CPF VARCHAR(50),
marca VARCHAR(50),
modelo VARCHAR(50),
valor_diaria DECIMAL(10,2),
cor VARCHAR(50),
ano INT,
FOREIGN KEY (CPF) REFERENCES cliente_parceiro(CPF)
)

CREATE TABLE carro_uti (


placa VARCHAR(50),
capacidade_carga INT,
peso_sup INT,
FOREIGN KEY (placa) REFERENCES carro(placa)
)
CREATE TABLE carro_pas (
placa VARCHAR(50),
capacidade_pessoas INT,
capacidade_combustivel INT,
FOREIGN KEY (placa) REFERENCES carro(placa)
)

CREATE TABLE carro_sup (


placa VARCHAR(50),
tempo_0_100 DECIMAL(10,2),
potencia INT,
FOREIGN KEY (placa) REFERENCES carro(placa)
)

CREATE TABLE aluga (


tempo INT,
placa VARCHAR(50),
CPF VARCHAR(50),
data_inicial DATE,
FOREIGN KEY (placa) REFERENCES carro(placa),
FOREIGN KEY (CPF) REFERENCES cliente_aluga(CPF)
)

CREATE TABLE contrato (


id_contrato INT PRIMARY KEY,
CPF VARCHAR(50),
id_agente INT,
duracao INT,
data_ TIMESTAMP,
condicoes VARCHAR (500),
FOREIGN KEY (id_agente) REFERENCES agente(id_agente),
FOREIGN KEY (CPF) REFERENCES cliente_aluga(CPF)

CREATE TABLE pagamento (


id_pagamento INT PRIMARY KEY,
valor_final DECIMAL(10,2),
id_agente INT,
CPF VARCHAR(50),
FOREIGN KEY (id_agente) REFERENCES agente(id_agente),
FOREIGN KEY (CPF) REFERENCES cliente_aluga(CPF)
)

4. Inserindo valores

INSERT INTO agente (id_agente, nome, celular)


VALUES
(1, 'Agente 1', '1234567890'),
(2, 'Agente 2', '9876543210'),
(3, 'Agente 3', '5555555555'),
(4, 'Agente 4', '9999999999'),
(5, 'Agente 5', '1111111111');

INSERT INTO cliente (CPF, endereço, nome, celular)


VALUES
('11111111111', 'Endereço 1', 'Cliente 1', '5555555555'),
('22222222222', 'Endereço 2', 'Cliente 2', '6666666666'),
('33333333333', 'Endereço 3', 'Cliente 3', '7777777777'),
('44444444444', 'Endereço 4', 'Cliente 4', '8888888888'),
('55555555555', 'Endereço 5', 'Cliente 5', '9999999999');

INSERT INTO cliente_parceiro (CPF, tempo_parceria, num_negocios, id_agente)


VALUES
('11111111111', 2, 5, 1),
('22222222222', 4, 3, 2);
INSERT INTO cliente_aluga (CPF, obs, freq_negocios)
VALUES
('33333333333', 'Observação 3', 3),
('44444444444', 'Observação 4', 5),
('55555555555', 'Observação 5', 4);

INSERT INTO carro (placa, CPF, marca, modelo, valor_diaria, cor, ano)
VALUES
('AAA123', '11111111111', 'Marca 1', 'Modelo 1', 100.00, 'Azul', 2020),
('BBB456', '22222222222', 'Marca 2', 'Modelo 2', 150.00, 'Preto', 2019);

INSERT INTO aluga (tempo, placa, CPF, data_inicial)


VALUES
(3, 'AAA123', '33333333333', '2022-11-01'),
(5, 'BBB456', '44444444444', '2023-01-14'),
(8, 'AAA123', '55555555555', '2023-05-01'),
(2, 'BBB456', '55555555555', '2023-07-01'),
(3, 'AAA123', '33333333333', '2024-01-01');

INSERT INTO contrato (id_contrato, CPF, id_agente, duracao, data_, condicoes)


VALUES
(3, '33333333333', 3, 7, '2022-03-01', 'Condições 3'),
(4, '44444444444', 4, 3, '2022-04-01', 'Condições 4'),
(5, '55555555555', 5, 8, '2023-05-01', 'Condições 5'),
(6, '55555555555', 5, 8, '2023-05-01', 'Condições 6'),
(7, '44444444444', 4, 8, '2023-04-01', 'Condições 7'),
(8, '33333333333', 3, 7, '2024-07-01', 'Condições 8');

5. Para a consulta solicitada, utilizamos a tabela “aluga” e “carro”. Com elas é possível identificar quais modelos
foram alugados, por quanto tempo, seus valores e a data do aluguel:

SELECT EXTRACT(MONTH FROM a.data_inicial) AS mes,


c.valor_diaria * a.tempo AS valor_total,
c.modelo
FROM aluga a
JOIN carro c ON a.placa = c.placa
WHERE EXTRACT(YEAR FROM a.data_inicial) = 2023
GROUP BY mes, valor_total, c.modelo;

O resultado mostrado foi:

6. MR:

Você também pode gostar