GustavoGomesDias / YourDelivery

Repositório do Trabalho de Banco de Dados 1

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TRABALHO 01: YourDelivery

Trabalho desenvolvido durante a disciplina de BD1

Sumário

1. COMPONENTES

Integrantes do grupo
Gustavo Gomes Dias:01gustavodias@gmail.com
Ricardo Rocha Ribeiro:r3ifes@gmail.com
...

2.INTRODUÇÃO E MOTIVAÇÃO

Este documento contém a especificação do projeto do banco de dados YourDelivery
e motivação da escolha realizada.

A empresa YourDelivery, que trabalha com entrega de encomendas, tem como meta neste projeto conseguir analizar a atual situação dela no mercado, pois com a chegada do novo Corona vírus e o lockdown imposto para suprimir seus avanços, a empresa teve um "boom" de contratações que superou e muito analizes anteriomente feitas. Por isso, o sistema desenvolvido neste projeto chegou com a missão de garantir uma analize das entregas feitas por todo o país e para que isso seja possível, a empresa necessitará das informações relativas as entregas em si, tanto dos clientes que enviam, como dos clientes que recebem e, por fim, necessitará também das informações referentes aos entregadores que trabalham para ela.

3.MINI-MUNDO

Descrever o mini-mundo! (Não deve ser maior do que 30 linhas, se necessário resumir para justar)
Entrevista com o usuário e identificação dos requisitos.(quando for o caso de sistemas com cliente real)
Descrição textual das regras de negócio definidas como um subconjunto do mundo real cujos elementos são propriedades que desejamos incluir, processar, armazenar, gerenciar, atualizar, e que descrevem a proposta/solução a ser desenvolvida.

Detalhando as informações necessárias para o que se desenvolva o projeto, a empresa YourDelivery necessita que sejam coletados o peso, quantidade, altura, largura, profundidade, o tipo da entrega (que no nosso caso srão datados como eletrônicos, cargas secas, cargas a granel - líquido ou sólido - e cargas frigoríficas - perecíveis ou congelados), data em que a entrega foi enviada e data em que a entrega foi recebida pelo destinatário. Dos clientes, serão armazenados CPF ou CNPJ (pois a empresa tabalha tanto com pessoas físicas, quanto com pessoas jurídicas), nome, telefone e endereço completo (estado pela sua UF, cidade, bairro, rua e número de residência). Para os entregadores serão armazenados as mesmas informações que para clientes, mas não será armazenado o CPF e sim a sua CNH. Sobre suas relações, temos que cada entrega sempre terá um e cliente remetente e um cliente destinatário, sendo que qualquer um dos dois pode ser um pessoa física ou juridica, além de ter um único entregador responsável pela carga. Agora, cada cliente pode enviar ou receber várias entregas e, por isso, pode ter várias entregas ligadas a ele mesmo. O mesmo acontece com os entregadores, que podem ser responsáveis por várias entregas.

4.PROTOTIPAÇÃO, PERGUNTAS A SEREM RESPONDIDAS E TABELA DE DADOS

4.1 RASCUNHOS BÁSICOS DA INTERFACE (MOCKUPS)

Arquivo PDF do Protótipo Balsamiq feito para Empresa YourDelivery

4.2 QUAIS PERGUNTAS PODEM SER RESPONDIDAS COM O SISTEMA PROPOSTO?

a) O sistema proposto poderá fornecer quais tipos de relatórios e informaçes? 
b) Crie uma lista com os 5 principais relatórios que poderão ser obtidos por meio do sistema proposto!
  • Relatórios dos tipos de entregas que empresa mais trabalhou. O relatório deve conter principalmente os tipos de cada carga, o perído em que o relatório foi gerado (obtido a partir da data de envio da entrega) e também a quantidade de cada entrega.
  • Relatório das regiões em que a empresa esteve mais prensente, como também os estados em que a empresa mais trabalho. Para isso o relatório deve conter o estado onde a entrega foi enviada e o estado onde a entrega foi programada para ser recebida.
  • Relatório dos empregados que mais concluiram entregas e o tempo de relativo de cada entrega realizada por eles. Aqui, será necessário guardar a CNH e o nome de cada empregado, número de entregas realizadas pelos mesmos e o tempo médio gasto para que cada um concluisse as entregas (pode ser obtido pelo cálculo enovolvebdo tanto a data de envio da entrega como a data em que ela foi recebida pelo remetente, o calculo seria a data em que a entrega foi recebida menos a data em que a entrega foi enviada).
  • Relatório dos tipos de clientes que mais utilizaram os serviços da empresa. Esse cálculo pode ser obtido pela contagem do número de CPF e CNPJ registrado nas entregas, sendo que para complementar os dados serão necessários os nomes, CPF/CNPJ e endereço dos clientes remetentes e destinatários.
  • Relatório das região com maior e menor facilidade de entrega. Para isso devemos levar em conta a média de tempo de entrega de cada região (no caso, o tempo de entrega é dado ao subtrari a data em que a entrega foi recebida pela data em que a entrega foi enviada), sendo que devemos contar as regiões usando os estados do cliente que enviou e do cliente que recebeu. Ou seja, esse tempo médio seria o tempo de navegar de uma região até outra (ex.: tempo médio de entrega ao sair do sudeste e ir até o nordeste).

4.3 TABELA DE DADOS DO SISTEMA:

5.MODELO CONCEITUAL

Modelo Conceitual

  • Principais entidades
    • Entrega;
    • Pessoa;
    • Entregador;

5.1 Validação do Modelo Conceitual

[Grupo01]: [Nomes dos que participaram na avaliação]
[Grupo02]: [Nomes dos que participaram na avaliação]

5.2 Descrição dos dados

PESSOA: Tabela que armazena as informações das pessoas envolvidas com a entrega.
CODIGO: Campo que refere-se a identificação de cada cliente na tabela CLIENTE.
TELEFONE: Campo que guarda o número de telefone de cada um dos clientes da empresa.
NOME: Campo que guarda o nome completo dos clientes.
ENDERECO: Campo que guarda o endereço de cada um dos clientes.


PESSOA_FISICA: Tabela que armazena informações específicas de clientes que são pessoas físicas.
CPF: Campo que armazena o Cadastro de Pessoa Física de cada pessoa física que é cliente da empresa.


PESSOA_JURIDICA: Tabela que armazena informações específicas de clientes que são pessoas jurídicas.
CNPJ: Campo que armazena o Cadastro Nacional de Pessoa Jurídica de cada pessoa jurídica que é cliente da empresa.


ENTREGADOR: Tabela que guarda as informações de todos os entregadores que trabalham na empresa.
CNH: Campo que armazena a Carteira Nacional de Habilitação.


ENTREGA: Tabela que guarda informações referentes as entregas feitas pela empresa.
CODIGO: Campo que refere-se a identificação da entrega dentro da tabela ENTREGA.
TiPO_ENTREGA: Campo que guarda de que tipo é a encomenda (exp.: Eletrônico, Granel Líquido).
PESO_ENTREGA: Campo que guarda o peso (em quilograma - km) da entrega.
QTD_ENTREGA: Campo que guarda a quantidade de itens pertecente a entrega.
ALT_ENTREGA: Campo que guarda a altura da entrega (contando a embalagem e medido em centímetros - cm).
LARG_ENTREGA: Campo que guarda a largura da entrega (contando a embalagem e medido em centímetros - cm).
PROFUN_ENTREGA: Campo que guarda a profundidade da entrega (contando a embalagem e medido em centímetros - cm).
DATA_ENVIO: Campo que guarda a data em que o remetente enviou ou programou para que a entrega fosse enviada até seu destino.
DATA_RECEBIMENTO: Campo que guarda a data em que a entrega chegou no seu destinatário.

6 MODELO LÓGICO

Modelo Lógico

7 MODELO FÍSICO

CLIENTE
CREATE TABLE pessoa(
	codigo integer NOT NULL,
	nome varchar(100),
	telefone varchar(16),
	estado varchar(2),
	cidade varchar(100),
	bairro varchar(100),
	rua varchar(100),
	numero_end integer,
	PRIMARY KEY (codigo)
);
PESSOA_FISICA
CREATE TABLE PESSOA_FISICA(
	codigo integer NOT NULL,
	cpf varchar(11),
	FOREIGN KEY(codigo) REFERENCES cliente(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
PESSOA_JURIDICA
CREATE TABLE PESSOA_JURIDICA(
	codigo integer NOT NULL,
	cnpj varchar(14),
	FOREIGN KEY(codigo) REFERENCES cliente(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
ENTREGADOR
CREATE TABLE ENTREGADOR(
	codigo integer NOT NULL,
	cnh varchar(14),
	FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
ENTREGA
CREATE TABLE ENTREGA(
	codigo integer NOT NULL,
	cliente_envio integer NOT NULL,
	cliente_recebe integer NOT NULL,
	entregador integer NOT NULL,
	tipo_entrega varchar(30),
	peso_entrega float,
	alt_entrega float,
	larg_entrega float,
	profun_entrega float,
	qtd_entrega integer,
	data_envio date,
	data_recebimento date,
	PRIMARY KEY (codigo),
	FOREIGN KEY (cliente_envio) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (cliente_recebe) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (entregador) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);

8 INSERT APLICADO NAS TABELAS DO BANCO DE DADOS

Drop

DROP TABLE IF EXISTS pessoa CASCADE;
DROP TABLE IF EXISTS pessoa_fisica;
DROP TABLE IF EXISTS pessoa_juridica;
DROP TABLE IF EXISTS entregador;
DROP TABLE IF EXISTS entrega;

Create

CREATE TABLE pessoa(
	codigo integer NOT NULL,
	nome varchar(100),
	telefone varchar(16),
	estado varchar(2),
	cidade varchar(100),
	bairro varchar(100),
	rua varchar(100),
	numero_end integer,
	PRIMARY KEY (codigo)
);

CREATE TABLE PESSOA_FISICA(
	codigo integer NOT NULL,
	cpf varchar(11),
	FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE PESSOA_JURIDICA(
	codigo integer NOT NULL,
	cnpj varchar(14),
	FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE ENTREGADOR(
	codigo integer NOT NULL,
	cnh varchar(14),
	FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE ENTREGA(
	codigo integer NOT NULL,
	cliente_envio integer NOT NULL,
	cliente_recebe integer NOT NULL,
	entregador integer NOT NULL,
	tipo_entrega varchar(30),
	peso_entrega float,
	alt_entrega float,
	larg_entrega float,
	profun_entrega float,
	qtd_entrega integer,
	data_envio date,
	data_recebimento date,
	PRIMARY KEY (codigo),
	FOREIGN KEY (cliente_envio) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (cliente_recebe) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (entregador) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);

Insert

INSERT INTO PESSOA
VALUES
	(1, 'João Martins', '11911111111', 'ES', 'Serra', 'Bairro das Rosas', 'Caramelo', 11),
	(2, 'Danilo Castro Ferreira', '19933355914', 'SP', 'Sumaré', 'Sensatez', 'Rua Grécia', 570),
	(3, 'Martim Castro Pinto', '21950609917', 'RJ', 'Rio de Janeiro', 'Carvalho', 'Rua do Trabalho', 1367),
	(4, 'Laura Melo Santos', '21986236017', 'RJ', 'São Gonçalo', 'Bairro da Paz', 'Rua Mário Viana', 1099),
	(5, 'Matilde Melo Santos', '11926222140', 'SP', 'São Paulo', 'Carlos Luz', 'Praça Alfredo Issa', 1231),
	(6, 'Kauê Cardoso Goncalves', '61947413132', 'DF', 'Gama', 'Cajares', 'Rua P 4', 1478),
	(7, 'Bruno Dias Pereira', '11974744573', 'SP', 'Osasco', 'Lagoas', 'Rua Domingos Bastazini', 1486),
	(8, 'Pastelaria Teixeira', '27967056547', 'ES', 'São Mateus', 'Bela Vista', 'Pará', 495),
	(9, 'Padaria União', '98937586073', 'MA', 'São Luís', 'Industrial', 'Paraná', 7663),
	(10, 'Pietra e Nina Publicidade e Propaganda ME', '11999855952', 'SP', 'Itatiba', 'Jardim América', 'Rua Augusto Eduardo Berti', 898),
	(11, 'Carolina e Sônia Lavanderia ME', '64998505506', 'GO', 'Rio Verde', 'Vila Amália', 'Rua 5', 211),
	(12, 'Ian e Ester Vidros ME', '61987759223', 'GO', 'Luziânia', 'Parque Estrela Dalva V', 'Rua 67', 816),
	(13, 'Martin e Daniel Ferragens ME', '68985116420', 'AC', 'Rio Branco', 'Bahia Velha', 'Beco Cecília Freitas', 266),
	(14, 'Apollo Artigos Gerais', '63989572172', 'TO', 'Gurupi', 'Shangri-Lá', 'Rua B 2', 989),
	(18, 'Joaquim e Stefany Comercio de Bebidas Ltda', '11994625578', 'SP', 'São Paulo', 'Jabaquara', 'Rua Monsenhor Basílio Pereira', 521),
	(19, 'Anthony e Alexandre Pães e Doces Ltda', '15994767868', 'SP', 'Sorocaba', 'Vila Zacarias', 'Rua Doutor Sydneu Antônio Urban', 286),
	(20, 'Sua Pizza Delivery ME', '18991644147', 'GO', 'Rio Verde', 'Catelandia', 'Rua Major Rocha', 1517),
	(100, 'Mateus Sousa Costa', '61998679042', 'MG', 'Betim', 'Bairro das Cruzes', 'Rua José da Conceição', 460),
	(101, 'Rafael Cardoso Correia', '11947705880', 'SP', 'São Paulo', 'Bairro da Tijuca', 'Rua Pedra Lavrada', 1065),
	(102, 'Gustavo Alves Rocha', '21942156639', 'RS', 'Porto Alegre', 'Bairro do Crescimento', 'Acesso E', 164),
	(103, 'Thaís Ribeiro Barros', '19954754928', 'PE', 'Petrolina', 'Bairro das Palmeiras', 'Rua Deputada Ana Oliveira', 1528),
	(104, 'Anna Oliveira Pinto', '19954754928', 'PR', 'Curitiba', 'Bairro da Catedral', 'Rua Astor Toniolo', 1115),
	(105, 'Livia Castro Rodrigues', '8191202990', 'MG', 'Montes Claros', 'Bairro Serra City', 'Rua C', 1703),
	(106, 'Sarah Correia Barros', '31985966293', 'SP', 'Jacareí', 'Bairro Joaninha', 'Rua Olímpio Catão', 507);
	
INSERT INTO pessoa_fisica
VALUES
	(1, '75198965014'),
	(2, '48972624020'),
	(3, '67941668289'),
	(4, '44585241787'),
	(5, '43388477000'),
	(6, '22244606007'),
	(7, '31370743041');
	
INSERT INTO pessoa_juridica
VALUES
	(8, '19215089000131'),
	(9, '86567879000173'),
	(10, '31750078000157'),
	(11, '04046901000175'),
	(12, '67332463000121'),
	(13, '92712036000116'),
	(14, '03436907000196'),
	(18, '62319531000107'),
	(19, '57740003000189'),
	(20, '32545024000112');

INSERT INTO entregador
VALUES
	(100, '03993638185'),
	(101, '37376176159'),
	(102, '56845638820'),
	(103, '64984431466'),
	(104, '82192867698'),
	(105, '07055649667'),
	(106, '17699458222');

INSERT INTO entrega
VALUES
	(1, 2, 3, 100, 'Eletrônico', 5.7,	55.9, 89.5, 8.2, 1, '2012-06-01', '2012-07-05'),
	(2, 2, 3, 100, 'Eletrônico', 0.205, 16.4, 7.58, 0.89, 1, '2013-02-01', '2013-03-06'),
	(3, 1, 5, 101, 'Granel Líquido', 10.8, 24.5, 18, 27, 2,'2018-04-01', '2018-04-12'),
	(4, 14, 6, 102, 'Carga Frágil', 2.4, 22.5, 9, 22.5, 3,'2020-03-14', '2020-03-30'),
	(5, 8, 4, 103, 'Congelados', 3, 5, 16, 5, 10,'2020-09-25', '2020-10-10'),
	(6, 8, 5, 102, 'Congelados', 3, 5, 16, 5, 30, '2020-12-01', '2020-12-14'),
	(7, 14, 6, 102, 'Carga Frágil', 1, 12.9, 13.6, 23.9, 3, '2021-04-30', '2021-05-11'),
	(8, 14, 20, 104, 'Carga Seca', 2.36, 90, 35, 44, 1, '2021-05-02', '2021-05-10'),
	(9, 18, 11, 105, 'Granel Líquido', 2, 10, 10, 10, 5, '2021-05-13', '2021-05-19'),
	(10, 19, 1, 106, 'Perecível', 0.05, 4, 9.3, 9.3, 5, '2021-06-01', '2021-07-01');

9 TABELAS E PRINCIPAIS CONSULTAS

OBS: Incluir para cada tópico as instruções SQL + imagens (print da tela) mostrando os resultados.<br>

9.1 CONSULTAS DAS TABELAS COM TODOS OS DADOS INSERIDOS (Todas)

SELECT * FROM pessoa;

Resultado do select em pessoa pt.1 Resultado do select em pessoa pt.2 Resultado do select em pessoa pt.3

SELECT * FROM pessoa_fisica;

Resultado do select em pessoa_fisica

SELECT * FROM pessoa_juridca;

Resultado do select em pessoa_juridica

SELECT * FROM entregador;

Resultado do select em entregador

SELECT * FROM entrega;

Resultado do select em entrega

Marco de Entrega 01: Do item 1 até o item 9.1

9.2 CONSULTAS DAS TABELAS COM FILTROS WHERE (Mínimo 4)

Clique para ver as imagens

9.3 CONSULTAS QUE USAM OPERADORES LÓGICOS, ARITMÉTICOS E TABELAS OU CAMPOS RENOMEADOS (Mínimo 11)

Clique para ver as imagens

Clique para ver as imagens

Clique para ver as imagens

9.4 CONSULTAS QUE USAM OPERADORES LIKE E DATAS (Mínimo 12)

Clique para ver as imagens

Clique para ver as imagens

9.5 INSTRUÇÕES APLICANDO ATUALIZAÇÃO E EXCLUSÃO DE DADOS (Mínimo 6)

Clique para ver as imagens

Clique para ver as imagens

9.6 CONSULTAS COM INNER JOIN E ORDER BY (Mínimo 6)

Clique para ver as imagens

9.7 CONSULTAS COM GROUP BY E FUNÇÕES DE AGRUPAMENTO (Mínimo 6)

Clique para ver as imagens

9.8 CONSULTAS COM LEFT, RIGHT E FULL JOIN (Mínimo 4)

Clique para ver as imagens

9.9 CONSULTAS COM SELF JOIN E VIEW (Mínimo 6)

Clique para ver as imagens

9.10 SUBCONSULTAS (Mínimo 4)

Clique para ver as imagens

Marco de Entrega 02: Do item 9.2 até o ítem 9.10

10 RELATÓRIOS E GRÁFICOS

Relatório 1

res = pd.read_sql_query("""
  SELECT tipo_entrega AS "Tipo da Entrega", extract(year from data_envio)::int AS "Ano de envio", count(*) AS "Quantidade" FROM ENTREGA
  GROUP BY extract(year from data_envio), tipo_entrega
  ORDER BY extract(year from data_envio) DESC, count(*) DESC
""", conn)
g = sns.catplot(x="Ano de envio", y="Quantidade", hue="Tipo da Entrega", data=res, kind="point")
plt.title("Quantidade de entrega separadas por tipo realizada em cada ano", fontsize=15)
plt.show()

Relatório 1

Relatório 2

def views():
  try:
    elephante_cursor.execute("""
      CREATE OR REPLACE VIEW select_so AS 
      SELECT p.estado AS "remetente", p1.estado AS "destinatario"
      FROM ENTREGA e
      INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
      INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
      WHERE p.estado = 'SP' OR p.estado = 'ES' OR p.estado = 'RJ' OR p.estado = 'MG'
      AND p1.estado = 'SP' OR p1.estado = 'ES' OR p1.estado = 'RJ' OR p1.estado = 'MG'
    """)
    elephante_cursor.execute("""
      CREATE OR REPLACE VIEW select_co AS 
      SELECT p.estado AS "remetente", p1.estado AS "destinatario"
      FROM ENTREGA e
      INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
      INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
      WHERE p.estado = 'GO' OR p.estado = 'MT' OR p.estado = 'MS' OR p.estado = 'DF'
      AND p1.estado = 'GO' OR p1.estado = 'MT' OR p1.estado = 'MS' OR p1.estado = 'DF'
    """)
    elephante_cursor.execute("""
      CREATE OR REPLACE VIEW select_no AS 
      SELECT p.estado AS "remetente", p1.estado AS "destinatario"
      FROM ENTREGA e
      INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
      INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
      WHERE p.estado = 'AL' OR p.estado = 'BA' OR p.estado = 'CE' OR p.estado = 'MA' OR p.estado = 'PB' OR p.estado = 'PE' or p.estado = 'PI' OR p.estado = 'RN' or p.estado = 'SE'
      AND p1.estado = 'AL' OR p1.estado = 'BA' OR p1.estado = 'CE' OR p1.estado = 'MA' OR p1.estado = 'PB' OR p1.estado = 'PE' or p1.estado = 'PI' OR p1.estado = 'RN' or p1.estado = 'SE'
    """)
    elephante_cursor.execute("""
      CREATE OR REPLACE VIEW select_n AS 
      SELECT p.estado AS "remetente", p1.estado AS "destinatario"
      FROM ENTREGA e
      INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
      INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
      WHERE p.estado = 'AC' OR p.estado = 'AP' OR p.estado = 'AM' OR p.estado = 'PA' OR p.estado = 'RO' OR p.estado = 'RR' or p.estado = 'TO'
      AND p1.estado = 'AC' OR p1.estado = 'AP' OR p1.estado = 'AM' OR p1.estado = 'PA' OR p1.estado = 'RO' OR p1.estado = 'RR' or p1.estado = 'TO'
    """)
    elephante_cursor.execute("""
      CREATE OR REPLACE VIEW select_s AS 
      SELECT p.estado AS "remetente", p1.estado AS "destinatario"
      FROM ENTREGA e
      INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
      INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
      WHERE p.estado = 'PR' OR p.estado = 'SC' OR p.estado = 'RS'
      AND p1.estado = 'PR' OR p1.estado = 'SC' OR p1.estado = 'RS'
    """)
  except (Exception, psycopg2.DatabaseError) as error:
    print(error)
    conn.rollback()
  else:
    conn.commit()
views()

result = pd.read_sql_query("""
  SELECT
  COUNT(*) AS "Sudeste",
  (SELECT COUNT(*) FROM select_no) AS "Nordeste",
  (SELECT COUNT(*) FROM select_co) AS "Centro-Oeste",
  (SELECT COUNT(*) FROM select_n) AS "Norte",
  (SELECT COUNT(*) FROM select_s) AS "Sul"
  FROM select_so
""", conn)

plt.ylabel("Qtd. de serviços prestados")
plt.xlabel("Regiões do Brasil")
total = sum([result.get("Sudeste")[0], result.get("Nordeste")[0], result.get("Centro-Oeste")[0], result.get("Norte")[0], result.get("Sul")[0]])
percentage = [
       ((result.get("Sudeste")[0] * 100) / total),
       ((result.get("Nordeste")[0] * 100) / total),
       ((result.get("Centro-Oeste")[0] * 100) / total),
       ((result.get("Norte")[0] * 100) / total),
       ((result.get("Sul")[0] * 100) / total)
      ]
ax = sns.barplot(data=result);

patches = ax.patches
for i in range(len(patches)):
   x = patches[i].get_x() + patches[i].get_width()/2
   y = patches[i].get_height()+.05
   ax.annotate('{:.1f}%'.format(percentage[i]), (x, y), ha='center')

plt.title("Entregas realizadas por região do Brasil", fontsize=15)
# fig = g.get_figure()
# # Salvar o gráfico como imagem
# fig.savefig("./report/report2.png")
plt.show()

Relatório 2

Relatório 3

relatorio_3 = pd.read_sql_query("""
  SELECT p.nome AS "Nome", ent.cnh AS "CNH", COUNT(*) AS "Número de entregas", AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int AS "Tempo médio de entrega (em Dias)"
  FROM entrega e
  INNER JOIN pessoa p ON (p.codigo = e.entregador)
  INNER JOIN entregador ent ON (ent.codigo = e.entregador)
  GROUP BY p.nome, ent.cnh
  ORDER BY COUNT(*) DESC, AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int
""", conn)

sns.set(rc={'figure.figsize':(30,8.27)})
f, ax1=plt.subplots()
ax2 = ax1.twinx()
sns.lineplot(data=relatorio_3.get("Tempo médio de entrega (em Dias)"), marker='o', ax=ax2)
sns.barplot(x="CNH", y="Número de entregas", data=relatorio_3, ax=ax1)
plt.title("Qtd. de entregas realizadas por cada entregador e a média do tempo de entrega de cada um", fontsize=15)

Relatório 3

Relatório 4

relatorio_4 = pd.read_sql_query("""
  SELECT COUNT(pf.*) AS "Pessoa física", COUNT(pj.*) AS "Pessoa jurídica"
  FROM entrega e
  LEFT OUTER JOIN pessoa_fisica pf ON (pf.codigo = e.cliente_envio)
  LEFT OUTER JOIN pessoa_juridica pj ON (pj.codigo = e.cliente_envio)
""", conn)

sns.set(rc={'figure.figsize':(11,8.27)})
label = relatorio_4.keys()
ax = plt.pie(x=relatorio_4, autopct="%.f%%", pctdistance=0.5, labels=label)
plt.title("Contratações por tipo de clientes", fontsize=15)
plt.show()

Relatório 4

Relatório 5

relatorio_5 = pd.read_sql_query("""
  SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int AS "Sudeste",
  (SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_no) AS "Nordeste",
  (SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_co) AS "Centro-Oeste",
  (SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_s) AS "Sul",
  (SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_n) AS "Norte"
  FROM select_so
""", conn)

sns.set(rc={'figure.figsize':(12,8.27)})
plt.ylabel("Regiões do Brasil")
plt.xlabel("Média do tempo de entrega (em dias)")
sns.barplot(data=relatorio_5, orient="h")
plt.title("Tempo médio de entrega de cada região", fontsize=15)
plt.show()

Relatório 5

11 AJUSTES DA DOCUMENTAÇÃO, CRIAÇÃO DOS SLIDES E VÍDEO PARA APRESENTAÇAO FINAL

Link paraos slides

Link para a apresentação

Marco de Entrega 03: Itens 10 e 11




12 FORMATACAO NO GIT:

https://help.github.com/articles/basic-writing-and-formatting-syntax/

About Formatting
https://help.github.com/articles/about-writing-and-formatting-on-github/
Basic Formatting in Git
https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests
Working with advanced formatting
https://help.github.com/articles/working-with-advanced-formatting/

Mastering Markdown

https://guides.github.com/features/mastering-markdown/

OBSERVAÇÕES IMPORTANTES

Todos os arquivos que fazem parte do projeto (Imagens, pdfs, arquivos fonte, etc..), devem estar presentes no GIT. Os arquivos do projeto vigente não devem ser armazenados em quaisquer outras plataformas.

  1. Caso existam arquivos com conteúdos sigilosos, comunicar o professor que definirá em conjunto com o grupo a melhor forma de armazenamento do arquivo.

Todos os grupos deverão fazer Fork deste repositório e dar permissões administrativas ao usuário do git "profmoisesomena", para acompanhamento do trabalho.

Os usuários criados no GIT devem possuir o nome de identificação do aluno (não serão aceitos nomes como Eu123, meuprojeto, pro456, etc). Em caso de dúvida comunicar o professor.

Link para BrModelo:
http://www.sis4.com/brModelo/download.html

Link para curso de GIT
https://www.youtube.com/curso_git

About

Repositório do Trabalho de Banco de Dados 1


Languages

Language:Jupyter Notebook 96.9%Language:Python 3.1%