Introdução¶
O projeto utiliza uma estrutura de banco de dados relacional para o jogo da temática cyberpunk. Neste documento, destacamos as consultas, que permitem recuperar informações de diversas tabelas do banco. Abaixo estão detalhadas as funcionalidades implementadas por meio das consultas SQL.
Data Query Language¶
Este documento apresenta as consultas utilizadas no projeto. Cada consulta foi projetada para atender a requisitos específicos do jogo, como buscar informações de missões, jogadores, NPCs, e outros elementos essenciais.
Consultas SQL¶
Obter as Missões em uma Sala Específica¶
SELECT *
FROM Missao
WHERE fk_sala = <idSala>;
Consultar Puzzles em Missões Específicas¶
SELECT
puzzle.nomePuzzle,
puzzle.dificuldade,
CASE
WHEN matematico.expressao IS NOT NULL THEN 'Matemático'
WHEN decodificar.codigo IS NOT NULL THEN 'Decodificar'
ELSE 'Outro Tipo'
END AS tipoPuzzle,
COALESCE(matematico.expressao, decodificar.codigo) AS detalhe,
puzzle.status
FROM
Puzzle puzzle
LEFT JOIN
Matematico matematico ON matematico.fk_puzzle = puzzle.idPuzzle
LEFT JOIN
Decodificar decodificar ON decodificar.fk_puzzle = puzzle.idPuzzle
WHERE
puzzle.fk_missao = <idMissao>;
Listar Implantes Cibernéticos de um CyberLutador¶
SELECT
implante.nomeImplante,
implante.tipo,
implante.localInstalacao,
implante.upgrade,
CASE
WHEN visaoCibernetica.fk_implante IS NOT NULL THEN 'Visão Cibernética'
WHEN bracoRobotico.fk_implante IS NOT NULL THEN 'Braço Robótico'
WHEN capaceteNeural.fk_implante IS NOT NULL THEN 'Capacete Neural'
ELSE 'Outro'
END AS tipoEspecifico,
visaoCibernetica.aumentaFurtividade AS visaoAumentaFurtividade,
visaoCibernetica.aumentaPercepcao AS visaoAumentaPercepcao,
bracoRobotico.aumentaVida AS bracoAumentaVida,
bracoRobotico.aumentaResistencia AS bracoAumentaResistencia,
capaceteNeural.aumentaVelocidade AS capaceteAumentaVelocidade,
capaceteNeural.aumentaInteligencia AS capaceteAumentaInteligencia
FROM
Implante implante
LEFT JOIN
VisaoCibernetica visaoCibernetica ON visaoCibernetica.fk_implante = implante.idImplante
LEFT JOIN
BracoRobotico bracoRobotico ON bracoRobotico.fk_implante = implante.idImplante
LEFT JOIN
CapaceteNeural capaceteNeural ON capaceteNeural.fk_implante = implante.idImplante
WHERE
implante.fk_cyberlutador = <idCyberLutador>;
Buscar Itens em uma Mochila de um Jogador¶
SELECT
item.nomeItem,
item.descricao,
item.valor,
instancia.idInstanciaItem
FROM
Mochila mochila
INNER JOIN
InstanciaItem instancia ON instancia.fk_mochila = Mochila.idMochila
INNER JOIN
Item item ON instancia.fk_item = item.idItem
WHERE
mochila.fk_cyberLutador = <idCyberLutador>;
Itens Disponíveis no Mercado Clandestino¶
SELECT
item.nomeItem AS NomeDoItem,
item.descricao AS DescricaoDoItem,
item.valor AS ValorDoItem,
mercadoClandestino.nomeMercado AS NomeDoMercado
FROM
MercadoClandestino mercadoClandestino
INNER JOIN
InstanciaItem instancia ON instancia.fk_mercado_clandestino = mercadoClandestino.idMercadoClandestino
INNER JOIN
Item item ON instancia.fk_item = item.idItem
WHERE
mercadoClandestino.idMercadoClandestino = <idMercadoClandestino>;
Listar CyberLutadores¶
SELECT idCyberLutador, nome
FROM CyberLutador;
Verificar as Habilidades de um CyberLutador¶
SELECT
inteligencia,
resistencia,
furtividade,
percepcao,
vida,
velocidade
FROM CyberLutador
WHERE idCyberLutador = <idCyberLutador>;
Listar NPCs em uma Sala e o Tipo¶
SELECT
n.nomeNPC AS "Nome do NPC",
CASE
WHEN m.fk_npc IS NOT NULL THEN 'Mentor'
WHEN i.fk_npc IS NOT NULL THEN 'Inimigo'
ELSE 'Outro'
END AS "Tipo do NPC"
FROM NPC n
LEFT JOIN Mentor m ON n.idNPC = m.fk_npc
LEFT JOIN Inimigo i ON n.idNPC = i.fk_npc
WHERE n.fk_sala = 1;
Consultar a Qual Região uma Sala Pertence¶
SELECT
s.nomeSala AS "Nome da Sala",
r.nomeRegiao AS "Região"
FROM Sala s
JOIN Regiao r ON s.fk_regiao = r.idRegiao
WHERE s.nomeSala = 'Cybernetic Warehouse';
Listar os Carros em uma Região¶
SELECT
c.idCarro AS "ID do Carro",
c.combustivel AS "Combustível"
FROM Carro c
JOIN Regiao r ON c.fk_regiao = r.idRegiao
WHERE r.nomeRegiao = 'Lower City';
Consultar Facção de um CyberLutador¶
SELECT
f.nomeFaccao AS "Facção",
f.ideologia AS "Ideologia"
FROM Faccao f
WHERE f.fk_cyberlutador = 10;
Verificar os Inimigos Enfrentados por um Jogador¶
SELECT
i.qtdDano AS "Dano do Inimigo",
i.vida AS "Vida do Inimigo",
n.nomeNPC AS "Nome do NPC"
FROM InstanciaInimigo ii
JOIN Inimigo i ON ii.fk_inimigo = i.fk_npc
JOIN NPC n ON i.fk_npc = n.idNPC
JOIN Recompensa r ON ii.idInstanciaInimigo = r.fk_instancia_inimigo
WHERE r.fk_cyberlutador = 10;
Verificar o Progresso em uma Missão¶
SELECT
m.id AS id_missao,
m.nome,
COUNT(p.id) AS total_puzzles,
COUNT(CASE WHEN p.status = TRUE THEN 1 END) AS puzzles_resolvidos,
(COUNT(CASE WHEN p.status = TRUE THEN 1 END) * 1.0 / COUNT(p.id)) * 100 AS progresso
FROM
missoes m
LEFT JOIN
puzzles p ON m.id = p.id_missao
GROUP BY
m.id, m.nome;
Referência Bibliográfica¶
1. ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. Tradução: Daniel Vieira. Revisão técnica: Enzo Seraphim; Thatyana de Faria Piola Seraphim. 6. ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 2 Conceitos e arquitetura do sistema de banco de dados, tópico 2.3 Linguagens e interfaces do banco de dados, páginas 24 e 25.
2. SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Database system concepts. 6. ed. New York: McGraw-Hill, 2011. Capítulo 1 Introduction, tópico 1.4.2 Data-Definition Language, páginas 12 a 13.
Histórico de versões¶
Versão | Data | Descrição | Autor |
---|---|---|---|
1.0 | 06/01/2024 | Criação do Documento | Gabrielly Assunção |
1.1 | 13/01/2025 | Adicionando introdução e script explicado do DQL | Maria Eduarda Marques e Charles Serafim Morais |