Você está na página 1de 14

Ciência Da Computação

Banco de Dados
Trabalho 1

Adiel Ferreira Santana


Artur Roza Campos

Barra do Garças – MT
2021
TRABALHO 1
Banco de Dados
2021

1 – Escrita de programas para povoar as tabelas do BD com os registros


disponibilizados pelo professor.

Tabela PAIS:
Código:

Execução:

Resolução:
A tabela PAIS foi criada com todos os atributos com a definição NOT NULL para impor
que as informações a serem preenchidas nos campos não sejam nulas, ou seja, não
podemos ter informação vazia nos campos das colunas. A chave primaria dessa tabela é a
coluna Nome_pais, porque cada um dos 32 paises tem um nome único que o difere dos
demais.

Tabela RESULTADOS_JOGOS:
Código:

E
xecução:
Resolução:
A tabela RESULTADO_JOGOS foi criada com todos os atributos definidos como NOT
NULL, para que os valores a serem inseridos não pudessem ser vazios, a chave primaria
criada foi a ID_partida, que lhe foi atribuído o comando AUTO_INCREMENT, que
incrementa automaticamente o valor inteiro do atributo identificador, à medida que novas
tuplas forem inseridas na tabela.
As constantes fk_Time1 e fk_Time2 fazem a ligação entre os respectivos atributos
Time1_partida e Time2_partida a algum atributo Nome_pais que seja referenciado na tabela
PAIS, ou seja, para que a inserção na tupla seja aceita, necessita-se da inserção de alguma
chave primaria da tabela PAIS que já esteja inserida na tabela, evitando assim que exista
partidas entre países que não participem dessa edição da copa do mundo.

Tabela JOGADOR:
Código:

Execução:

Resolução:

A tabela JOGADOR foi criada com todos os atributos definidos como NOT NULL, para
evitar valores vazios em alguma tupla. A chave primaria selecionada foi o ID_jogador, que
também conta com o atributo AUTO_INCREMENT para incrementar o valor inteiro à
medida que novas tuplas sejam inseridas na tabela, dessa forma cada jogador é único e com
todas as informações necessárias inseridas.
Tabela GOLS_ASSISTS_JOGADOR:
Código:

Execução:

Resolução:
A tabela GOLS_ASSISTS_JOGADORES foi criada com todos os atributos definidos como
NOT NULL, para assegurar que não haja inserções de valores nulos em alguma tupla. Essa
tabela conta com o ID_jogador como chave primaria, de modo que a constante
fk_IDjogador_gols referencia o ID_jogador da tabela GOLS_ASSISTS_JOGADORES com o
atributo ID_jogador da tabela JOGADOR, garantindo que para inserir uma tupla nessa tabela,
o jogador precisa estar devidamente cadastrado na tabela JOGADOR.

Tabela CARTOES_JOGADORES:
Código:

Execução:

Resolução:
A tabela CARTOES_JOGADORES foi criada com todos os atributos definidos como NOT
NULL, garantindo que valores vazios não possam ser inseridos na tabela.
O atributo ID_jogador foi selecionado como chave primaria, de forma que a constante
fk_IDjogador faz o referenciamento do atributo ID_jogador da tabela
CARTOES_JOGADORES com o atributo de mesmo nome da tabela JOGADOR, garantindo
assim que as informações de cartões amarelos e vermelhos sejam devidamente atribuída
apenas a jogadores que estejam previamente cadastrados na tabela JOGADOR.
2 – Escrita de programas para povoar as tabelas do BD com os registros
disponibilizados pelo professor.
Código:

Explicação:

Para a criação do programa que irá ler os dados do arquivo .csv e povoar a sua
respectiva tabela no BD foi utilizado a linguagem Python e sua biblioteca csv (Para devida
manipulação dos arquivos), juntamente com o conector do MySQL disponibilizado no site
da Oracle.
A inserção dos registros foi feita seguindo a mesma lógica, mudando apenas o arquivo
.csv que é aberto pelo arquivo python, sendo conectado a sua respectiva tabela no Banco
de Dados BANCO_COPA_14, devidamente autenticado pelo usuário e senha.
Primeiro nós abrimos o arquivo .csv e copiamos os dados de cada linha para uma lista
vazia chamada ‘dados’, separando as informações utilizando a vírgula como um
delimitador, ou seja, o trecho de código da linha 8 até a linha 12 corresponde a leitura das
informações de cada linha, separando os dados por vírgula e armazenando tudo na lista
chamada ‘dados’, gerando assim uma lista (dados) de listas (line).
O próximo passo para a formatação dos dados é a separação de cada dado presente em
cada linha da lista ‘dados’ em sua respectiva variável, para assim poder ser inserido no
BD através do conector; Dessa forma, sabendo a sequencia correta dos dados da tabela
csv, armazenamos cada informação presente na lista, agora chamada de ‘formatado’, em
uma variável que dá sentido a sua informação, nesse caso o Nome do pais, sua população,
numero de vitorias em copas do mundo e o nome do técnico atuante na copa do mundo de
2014.
Após as informações estarem separadas e armazenadas em variáveis, conectamos ao
servidor MySQL utilizando user e senha do database, após estarmos devidamente
conectados, utilizamos um objeto cursor para podermos criar um processo que opere o
registro na tabela do BD, esse cursor seleciona o conjunto de dados, nesse caso as
variáveis a serem inseridas na tabela, e então com a função execute() passamos o comando
INSERT de acordo com a tabela a serem inseridos os dados, nesse exemplo a tabela PAIS,
que contém as colunas Nome_pais, Populacao_pais, N_vitorias_copas_pais e
Tecnico_pais; Concluindo a execução do comando, o cursor é fechado com a função
close() para evitar que a conexão ao BD continue aberta e gere algum possível erro.
Todo código está envolvo de uma função try-except que trata e retorna ao console caso
algum erro seja encontrado na tentativa de inserção, imprimindo na tela a o texto
retornado explicando qual foi o erro.
Finalizando assim a função que recupera os dados da tabela csv e armazena na sua
tabela correspondente no banco de dados.

3 - Execução das 12 consultas solicitadas:

3.1 - Recupere o nome, a posição e o clube dos jogadores do país ‘USA’


Código:

Resultado:
3.2 - Recupere os nomes dos países participantes da copa do mundo de 2014 que
ganharam a copa do mundo pelo menos uma vez.
Código:

Resultado

3.3 - Recupere os nomes dos países participantes da copa do mundo de 2014 que
nunca ganharam uma copa do mundo.
Código:

Resultado:
3.4 - Recupere o nome e o país do jogador com o maior número de cartões amarelos
na copa do mundo de 2014.
Código:

Resultado:

3.5 - Para cada cidade sede, recupere a Cidade_sede e o número total de partidas que
nela foram disputadas.
Código:

Resultado:

3.6 - Para cada país, recupere o nome do país e o número de jogos que ele disputou
como Time1 na tabela RESULTADOS_JOGOS, bem como o total de gols
marcados (Soma de Gols_time1) e gols tomados (SUM de Gols_time2).
Código:
Resultado:

3.7 - Para cada país, recupere o nome do país e o número de jogos que ele disputou
como Time2 na tabela RESULTADOS_JOGOS, bem como o total de gols
marcados (Soma de Gols_time2) e gols tomados (SUM de Gols_time1).

Código:

Resultado:
3.8 Escreva uma consulta para obter número total de partidas que cada país
disputou (seja como Ti me1 ou como Time2), o número total de gols
marcados e o número total de gols tomados. Crie uma view chamada
SUMÁRIO_TIMES com os seguintes atributos para manter o resultado da
consulta: NomePaís, NoDeJogos, TotalGolsMarcados, TotalGolsTomados. A
saída deve estar ordenada em ordem decrescente do número de jogos
disputados.
Código:

Resultado:

3.9 - Liste todas as partidas disputadas pelo país ‘Brazil’ como Time1 ou Time2.
Código:
Resultado:

3.10 - Recupere os nomes dos jogadores que marcaram pelo menos um gol, o país
desses jogadores, e o número de gols que cada um marcou. Ordene o
resultado pelo número de gols marcados em ordem decrescente.
Código:

Resultado:
3.11 - Repita a consulta 10, mas somente para os jogadores que tiveram mais de 2
gols.
Código:

Resultado:

3.12 - Liste os países participantes da copa de 2014 e a sua população, ordenando


em ordem decrescente de população.
Código:

Resultado:
4 - Execução de inserções que violem alguma restrição de integridade.
4.1 - Inserir ID_partida que seja repetido:

Mensagem de erro:
[ Error Code: 1062. Duplicate entry '1' for key 'resultados_partidas.PRIMARY' ]
Explicação:
Não é possível inserir uma tupla na tabela RESULTADOS_PARTIDAS pois o
ID_partida já existe em alguma tupla dessa tabela.
4.2 - Inserir Time1_partida que não esteja listado na tabela PAIS:

Mensagem de erro:
[ Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
(`banco_copa_14`.`resultados_partidas`, CONSTRAINT `fk_Time1` FOREIGN KEY
(`Time1_partida`) REFERENCES `pais` (`Nome_pais`)) ]
Explicação:
Não é possível inserir uma tupla na tabela RESULTADOS_PARTIDAS cujo
Time1_partida não exista no campo Nome_pais da tabela PAIS. Sendo assim, não é
possível existir uma partida entre times que não estejam devidamente classificados
para participar da copa.
4.3 - Inserir valor nulo no campo Data_partida:

Mensagem de erro:
[ Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
(`banco_copa_14`.`resultados_partidas`, CONSTRAINT `fk_Time1` FOREIGN KEY
(`Time1_partida`) REFERENCES `pais` (`Nome_pais`)) ]
Explicação:
Não é possível inserir um valor nulo na tabela RESULTADOS_PARTIDAS cujo
campo esteja marcado com a opção NOT NULL. Sendo obrigatório inserir uma
informação de acordo com o tipo especificado. Nesse caso o tipo DATE.
5 - Execução de delete que viole alguma restrição de integridade referencial.
5.1 - Deletar o jogador com ID = 2222:

Mensagem de erro:
[ Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails
(`banco_copa_14`.`cartoes_jogadores`, CONSTRAINT `fk_IDjogador` FOREIGN
KEY (`ID_jogador`) REFERENCES `jogador` (`ID_jogador`)) ]
Explicação:
Não é possível efetuar o delete da tupla pois ela referencia outras duas tuplas nas
tabelas CARTOES_JOGADORES e GOLS_ASSISTS_JOGADORES. Como a
configuração de deleção ON CASCADE não foi implementada, o MySQL informa a
não possibilidade de deletar a tupla principal, sendo necessário deletar as tuplas das
outras duas tabelas para depois deleta-la da tabela principal.
6 - Inserção de três novas tuplas sem violar qualquer restrição de integridade

6.1 - Inserir tupla na tabela JOGADOR

6.2 - Inserir tupla na tabela CARTOES_JOGADORES

6.3 - Inserir tupla na tabela GOLS_ASSISTS_JOGADORES

Resultado das execuções:

Você também pode gostar