Versão 1.0
Data Definition Language
Conceito:
A Data Definition Language (DDL), ou Linguagem de Definição de Dados, é um subconjunto da linguagem SQL responsável pela criação, modificação e remoção de estruturas de dados em um banco de dados. Ela lida com os aspectos estruturais do banco, como tabelas, esquemas, índices e relacionamentos. Com comandos como CREATE
, ALTER
, DROP
e TRUNCATE
, a DDL permite que desenvolvedores e administradores definam como os dados serão armazenados, organizados e acessados, estabelecendo a base sobre a qual as operações de manipulação de dados (DML) irão atuar.
Declarações de DDL no Software:
Visão Geral do Banco de Dados
Este script cria a estrutura de um banco de dados para um jogo de RPG. Ele define todas as entidades essenciais, como personagens (jogadores, NPCs, criaturas), o mundo do jogo (cenários), itens (armas, armaduras), inventários e as mecânicas de combate e habilidades.
A seguir, apresento a criação de cada tabela:
Atenção!
O conteúdo deste tópico poderá sofrer alterações ao longo da Disciplina de Sistema de Banco de Dados 1. Portanto, à medida que novas inserções forem necessárias, o arquivo atual sempre sempre se manterá atualizado com a nova versão.
1. Estruturas Fundamentais
Estas são as tabelas base que sustentam as principais entidades do jogo.
1.1. CREATE da Tabela "personagem"
A tabela personagem
é a tabela base para qualquer ser vivo no jogo, seja ele um jogador, um NPC ou uma criatura. Ela centraliza os atributos comuns a todos, como nome, vida e mana.
-- ============================================
-- Tabela: personagem
-- ============================================
CREATE TABLE IF NOT EXISTS personagem (
ID_personagem SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
vida_maxima INT NOT NULL,
mana_maxima INT NOT NULL,
habilidade VARCHAR(255),
dificuldade VARCHAR(50),
level INT DEFAULT 1,
resistencia VARCHAR(255),
dialogo TEXT
);
1.2. CREATE da Tabela "cenario"
Esta tabela define os diferentes locais ou mapas do mundo do jogo. As colunas de navegação (norte, leste, oeste, sul) são adicionadas posteriormente para criar as conexões entre os cenários, formando o mapa do mundo.
-- ============================================
-- Tabela: cenario
-- ============================================
CREATE TABLE IF NOT EXISTS cenario (
id_cenario SERIAL PRIMARY KEY,
sol VARCHAR(50),
chuva VARCHAR(50),
noite VARCHAR(50),
dia VARCHAR(50)
);
-- Adicionando colunas de navegação
ALTER TABLE cenario ADD COLUMN norte_id INT;
ALTER TABLE cenario ADD COLUMN leste_id INT;
ALTER TABLE cenario ADD COLUMN oeste_id INT;
ALTER TABLE cenario ADD COLUMN sul_id INT;
ALTER TABLE cenario ADD FOREIGN KEY (norte_id) REFERENCES cenario(id_cenario);
ALTER TABLE cenario ADD FOREIGN KEY (leste_id) REFERENCES cenario(id_cenario);
ALTER TABLE cenario ADD FOREIGN KEY (oeste_id) REFERENCES cenario(id_cenario);
ALTER TABLE cenario ADD FOREIGN KEY (sul_id) REFERENCES cenario(id_cenario);
2. Estruturas do Jogador
Tabelas diretamente relacionadas ao personagem do jogador.
2.1. CREATE da Tabela "jogador"
A tabela jogador
é uma especialização da tabela personagem
. Ela guarda informações específicas do jogador, como sua localização atual no mapa (cenario
) e o tipo de equipamento que ele pode usar.
-- ============================================
-- Tabela: jogador
-- ============================================
CREATE TABLE IF NOT EXISTS jogador (
ID_personagem INTEGER PRIMARY KEY,
cenario INTEGER NOT NULL,
tipo_equipamento VARCHAR(50) NOT NULL,
FOREIGN KEY (ID_personagem) REFERENCES personagem(ID_personagem),
FOREIGN KEY (cenario) REFERENCES cenario(id_cenario)
);
2.2. CREATE da Tabela "inventario"
Todo personagem pode ter um inventário para carregar itens. Esta tabela define o inventário, sua capacidade de carga (pods
) e a qual personagem ele pertence.
-- ============================================
-- Tabela: inventario
-- ============================================
CREATE TABLE IF NOT EXISTS inventario (
id_inventario INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
id_personagem INT NOT NULL,
pods INT NOT NULL,
FOREIGN KEY (id_personagem) REFERENCES personagem(ID_personagem) ON DELETE RESTRICT
);
3. Itens e Equipamentos
Tabelas que definem os itens que podem ser encontrados e usados no jogo.
3.1. CREATE da Tabela "item"
A tabela item
é a tabela base para todos os objetos que podem ser guardados no inventário. Ela contém informações genéricas como nome, peso e durabilidade.
-- ============================================
-- Tabela: item
-- ============================================
CREATE TABLE IF NOT EXISTS item (
id_item INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
nome VARCHAR(50) NOT NULL,
peso NUMERIC(5,2),
durabilidade INT CHECK (durabilidade >= 0),
id_inventario INT,
FOREIGN KEY (id_inventario) REFERENCES inventario(id_inventario) ON DELETE RESTRICT
);
3.2. CREATE das Tabelas "arma" e "armadura"
Estas são especializações da tabela item
. A tabela arma
adiciona atributos de combate como dano, enquanto a armadura
adiciona defesa.
-- ============================================
-- Tabelas: arma e armadura
-- ============================================
CREATE TABLE IF NOT EXISTS arma (
mãos INT CHECK (mãos > 0),
dano INT CHECK (dano >= 0),
id_item INT PRIMARY KEY,
FOREIGN KEY (id_item) REFERENCES item(id_item) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS armadura (
id_item INT PRIMARY KEY,
defesa INT CHECK (defesa >= 0),
FOREIGN KEY (id_item) REFERENCES item(id_item) ON DELETE RESTRICT
);
4. Personagens Não-Jogáveis (NPCs)
Tabelas para os diferentes tipos de NPCs que povoam o mundo.
4.1. CREATE das Tabelas "npc", "guia" e "comerciante"
A tabela npc
é a base para personagens controlados pelo sistema. As tabelas guia
e comerciante
são especializações, adicionando funcionalidades como oferecer orientação ou negociar itens.
-- ============================================
-- Tabelas especializadas de personagem
-- ============================================
CREATE TABLE IF NOT EXISTS npc (
ID_personagem INT PRIMARY KEY,
quest TEXT,
localizacao VARCHAR(255),
hora_aparicao TIME,
FOREIGN KEY(ID_personagem) REFERENCES personagem(ID_personagem) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS guia (
ID_personagem INT PRIMARY KEY,
custo_orientacao NUMERIC(10, 2),
FOREIGN KEY(ID_personagem) REFERENCES personagem(ID_personagem) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS comerciante (
ID_personagem INT PRIMARY KEY,
venda_item TEXT,
compra_item TEXT,
FOREIGN KEY(ID_personagem) REFERENCES personagem(ID_personagem) ON DELETE CASCADE
);
5. Criaturas e Inimigos
Tabelas para os inimigos que o jogador pode enfrentar.
5.1. CREATE da Tabela "criatura" e suas especializações
criatura
é a tabela base para todos os inimigos, herdando de personagem
. As tabelas ork
, goblin
e boss
representam tipos específicos de criaturas com atributos e mecânicas únicas.
-- ============================================
-- Tabela: criatura e suas especializações
-- ============================================
CREATE TABLE IF NOT EXISTS criatura (
ID_personagem SERIAL PRIMARY KEY,
XP INTEGER,
FOREIGN KEY (ID_personagem) REFERENCES personagem(ID_personagem)
);
CREATE TABLE IF NOT EXISTS ork (
ID_personagem INTEGER PRIMARY KEY,
Raiva INTEGER,
FOREIGN KEY (ID_personagem) REFERENCES criatura(ID_personagem)
);
CREATE TABLE IF NOT EXISTS goblin (
ID_personagem INTEGER PRIMARY KEY,
furtividade INTEGER,
roubo INTEGER,
FOREIGN KEY (ID_personagem) REFERENCES criatura(ID_personagem)
);
CREATE TABLE IF NOT EXISTS boss (
ID_personagem INTEGER PRIMARY KEY,
faseAtual INTEGER,
imunidades TEXT,
FOREIGN KEY (ID_personagem) REFERENCES criatura(ID_personagem)
);
6. Mecânicas de Combate e Interação
Tabelas que governam as regras de combate e outras interações.
6.1. CREATE da Tabela "confronta"
Esta tabela de associação registra cada confronto ocorrido entre um jogador e uma criatura, armazenando quem foi o vencedor.
-- ============================================
-- Tabela: confronta
-- ============================================
CREATE TABLE IF NOT EXISTS confronta (
Unique_ID SERIAL PRIMARY KEY,
vencedor BOOLEAN,
criatura_id INTEGER,
jogador_id INTEGER,
FOREIGN KEY (criatura_id) REFERENCES criatura(ID_personagem),
FOREIGN KEY (jogador_id) REFERENCES jogador(ID_personagem)
);
6.2. CREATE da Tabela "batalha"
Esta tabela parece registrar os detalhes de cada turno ou evento de uma batalha, como o dano causado e sofrido, e o ambiente onde a luta ocorreu.
-- ============================================
-- Tabela: batalha
-- ============================================
CREATE TABLE IF NOT EXISTS batalha (
ID_batalha SERIAL PRIMARY KEY,
Dano_causado INTEGER NOT NULL,
Controle_Dano INTEGER NOT NULL,
Ambiente_batalha VARCHAR(100) NOT NULL,
Dano_sofrido INTEGER NOT NULL
);
7. Habilidades e Características do Jogador
Tabelas que detalham as habilidades e atributos elementais do jogador.
7.1. CREATE das Tabelas "skill" e "caracteristicas"
A tabela skill
armazena o poder de ataque do jogador, enquanto a tabela caracteristicas
detalha suas afinidades com os elementos (fogo, água, terra, ar).
-- ============================================
-- Tabela: skill e caracteristicas
-- ============================================
CREATE TABLE IF NOT EXISTS skill (
ID_jogador INTEGER PRIMARY KEY,
atq INTEGER NOT NULL,
FOREIGN KEY (ID_jogador) REFERENCES jogador(ID_personagem)
);
CREATE TABLE IF NOT EXISTS caracteristicas (
ID_jogador INTEGER PRIMARY KEY,
fogo INTEGER NOT NULL,
agua INTEGER NOT NULL,
terra INTEGER NOT NULL,
ar INTEGER NOT NULL,
FOREIGN KEY (ID_jogador) REFERENCES jogador(ID_personagem)
);
8. Classes de Personagem
Tabelas de especialização que definem as classes do jogador, cada uma com habilidades únicas.
8.1. CREATE das Tabelas de Classes
Estas tabelas (guerreiro
, sacerdote
, mago
, arqueiro
) são vinculadas à tabela personagem
e definem os atributos específicos de cada classe de personagem disponível para o jogador.
-- ============================================
-- Classes de personagem: guerreiro, sacerdote, mago, arqueiro
-- ============================================
CREATE TABLE IF NOT EXISTS guerreiro (
id_personagem INT PRIMARY KEY,
atq_Fisico INT,
bloquear_Dano INT,
FOREIGN KEY (id_personagem) REFERENCES personagem(id_personagem)
);
CREATE TABLE IF NOT EXISTS sacerdote (
id_personagem INT PRIMARY KEY,
bencao_Cura INT,
atq_Especial INT,
FOREIGN KEY (id_personagem) REFERENCES personagem(id_personagem)
);
CREATE TABLE IF NOT EXISTS mago (
id_personagem INT PRIMARY KEY,
atq_Magico INT,
atq_MultiElemento INT,
FOREIGN KEY (id_personagem) REFERENCES personagem(id_personagem)
);
CREATE TABLE IF NOT EXISTS arqueiro (
id_personagem INT PRIMARY KEY,
atq_Preciso INT,
atq_Rapido INT,
FOREIGN KEY (id_personagem) REFERENCES personagem(id_personagem)
);
Tabela de Versionamento
Versão | Data | Descrição | Autor(es) | Revisor(es) |
---|---|---|---|---|
1.0 | 15/06/2025 | Todos os integrantes desenvolveram esse artefato | Todos os Integrantes | Todos os Integrantes |