Entrega do Trabalho 2 - SQL
DDL
A DDL (Data Definition Language) é um subconjunto do SQL que é usado para definir a estrutura de um banco de dados, ou seja, ele lida com a criação e modificação dos objetos dentro de um banco de dados, como tabelas, visões (views), índices e esquemas. A DDL define como os dados serão armazenados e organizados no banco de dados, mas não lida diretamente com a manipulação ou consulta dos dados.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE IF NOT EXISTS Inventario (
id_inventario UUID DEFAULT uuid_generate_v4(),
quantidade_itens INT NOT NULL,
capacidade_maxima INT NOT NULL,
PRIMARY KEY (id_inventario)
);
CREATE TABLE IF NOT EXISTS Classe (
id_classe UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tipo VARCHAR(20) NOT NULL CHECK (tipo IN ('daimyo', 'hacker', 'scoundrel')),
nome VARCHAR(100) NOT NULL,
descricao VARCHAR(100) NOT NULL,
hp_bonus INT NOT NULL,
dano_bonus INT NOT NULL,
energia_bonus INT NOT NULL
);
CREATE TABLE IF NOT EXISTS Faccao (
id_faccao UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tipo VARCHAR(20) NOT NULL CHECK (tipo IN ('yakuza', 'triad')),
nome VARCHAR(100) NOT NULL UNIQUE,
descricao VARCHAR(100) NOT NULL,
ideologia VARCHAR(100) NOT NULL
);
CREATE TABLE IF NOT EXISTS Distrito (
id_distrito UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
nome VARCHAR(1000) NOT NULL UNIQUE,
descricao TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS CelulaMundo (
id_celula UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
id_distrito UUID NOT NULL REFERENCES Distrito(id_distrito) ON DELETE CASCADE,
nome VARCHAR(100) NOT NULL,
descricao TEXT NOT NULL,
eixoX INT NOT NULL,
eixoY INT NOT NULL,
local_x INT NOT NULL,
local_y INT NOT NULL,
CONSTRAINT unique_position UNIQUE (id_distrito, eixoX, eixoY)
);
CREATE TABLE IF NOT EXISTS Personagem (
id_personagem UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tipo VARCHAR(10) NOT NULL CHECK (tipo IN ('pc', 'npc'))
);
CREATE TABLE IF NOT EXISTS PC (
id_personagem UUID PRIMARY KEY REFERENCES Personagem(id_personagem),
id_celula UUID REFERENCES CelulaMundo(id_celula),
id_faccao UUID REFERENCES Faccao(id_faccao),
id_classe UUID REFERENCES Classe(id_classe),
id_inventario UUID REFERENCES Inventario(id_inventario),
energia INT NOT NULL,
wonglongs INT NOT NULL,
dano INT NOT NULL,
hp INT NOT NULL,
hp_atual INT NOT NULL,
nivel INT NOT NULL,
xp INT NOT NULL,
nome VARCHAR(100) NOT NULL,
descricao VARCHAR(1000) NOT NULL
);
CREATE TABLE IF NOT EXISTS NPC (
id_personagem UUID PRIMARY KEY REFERENCES Personagem(id_personagem),
tipo VARCHAR(20) NOT NULL CHECK (tipo IN ('comerciante', 'inimigo'))
);
CREATE TABLE IF NOT EXISTS Comerciante (
id_comerciante UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
id_personagem UUID REFERENCES NPC(id_personagem),
id_celula UUID REFERENCES CelulaMundo(id_celula),
nome VARCHAR(1000) NOT NULL,
descricao VARCHAR(1000) NOT NULL,
CONSTRAINT unique_comerciante_nome UNIQUE (nome)
);
CREATE TABLE IF NOT EXISTS Inimigo (
id_inimigo UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
id_personagem UUID REFERENCES NPC(id_personagem),
dano INT NOT NULL,
xp INT NOT NULL,
hp INT NOT NULL,
nome VARCHAR(100) NOT NULL,
descricao VARCHAR(1000) NOT NULL,
CONSTRAINT unique_inimigo_nome UNIQUE (nome)
);
CREATE TABLE IF NOT EXISTS Missao (
id_missao UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
nome VARCHAR(100) NOT NULL UNIQUE,
descricao VARCHAR(100) NOT NULL,
dificuldade VARCHAR(100) NOT NULL,
objetivo VARCHAR(100) NOT NULL,
goal INT NOT NULL,
recompensa INT NOT NULL
);
CREATE TABLE IF NOT EXISTS Interacao (
id_interacao UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
personagem_origem UUID REFERENCES Personagem(id_personagem),
personagem_destino UUID REFERENCES Personagem(id_personagem)
);
CREATE TABLE IF NOT EXISTS Dialogo (
id_interacao UUID PRIMARY KEY REFERENCES Interacao(id_interacao),
mensagem_atual VARCHAR(1000) NOT NULL
);
CREATE TABLE IF NOT EXISTS Item (
id_item UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tipo VARCHAR(20) NOT NULL CHECK (tipo IN ('arma', 'armadura', 'implantecibernetico', 'objeto_mapa')),
nome VARCHAR(100) NOT NULL,
descricao VARCHAR(100) NOT NULL,
valor INT NOT NULL,
raridade VARCHAR(100) NOT NULL,
CONSTRAINT unique_item_nome UNIQUE (nome)
);
CREATE TABLE IF NOT EXISTS Armadura (
id_item UUID PRIMARY KEY REFERENCES Item(id_item),
id_celula UUID REFERENCES CelulaMundo(id_celula),
hp_bonus INT NOT NULL
);
CREATE TABLE IF NOT EXISTS Arma (
id_item UUID PRIMARY KEY REFERENCES Item(id_item),
id_celula UUID REFERENCES CelulaMundo(id_celula),
municao INT NOT NULL,
dano INT NOT NULL
);
CREATE TABLE IF NOT EXISTS ImplanteCibernetico (
id_item UUID PRIMARY KEY REFERENCES Item(id_item),
id_celula UUID REFERENCES CelulaMundo(id_celula),
custo_energia INT NOT NULL,
dano INT NOT NULL
);
CREATE TABLE IF NOT EXISTS InstanciaItem (
id_instancia_item UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
id_inventario UUID REFERENCES Inventario(id_inventario),
id_item UUID REFERENCES Item(id_item)
);
CREATE TABLE IF NOT EXISTS InstanciaInimigo (
id_instancia_inimigo UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
id_inimigo UUID REFERENCES Inimigo(id_inimigo),
id_celula UUID REFERENCES CelulaMundo(id_celula),
hp_atual INT NOT NULL,
CONSTRAINT unique_boss_per_district UNIQUE (id_inimigo, id_celula)
);
CREATE TABLE IF NOT EXISTS Loja (
id_loja UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
id_comerciante UUID REFERENCES Comerciante(id_comerciante),
id_instancia_item UUID REFERENCES InstanciaItem(id_instancia_item)
);
CREATE TABLE IF NOT EXISTS ProgressoMissao (
id_missao UUID REFERENCES Missao(id_missao) ON DELETE CASCADE,
id_personagem UUID REFERENCES PC(id_personagem) ON DELETE CASCADE,
progresso INT NOT NULL,
PRIMARY KEY (id_missao, id_personagem)
);
CREATE TABLE IF NOT EXISTS ArmaduraEquipada (
id_personagem UUID PRIMARY KEY REFERENCES PC(id_personagem) ON DELETE CASCADE,
id_armadura UUID REFERENCES Armadura(id_item) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS ImplanteEquipado (
id_personagem UUID PRIMARY KEY REFERENCES PC(id_personagem) ON DELETE CASCADE,
id_implante UUID REFERENCES ImplanteCibernetico(id_item) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS SalaRespawnInimigos (
id_instancia UUID PRIMARY KEY,
id_inimigo UUID REFERENCES Inimigo(id_inimigo) ON DELETE CASCADE,
id_celula_origem UUID REFERENCES CelulaMundo(id_celula) ON DELETE CASCADE
);
Histórico de Versão
Versão | Data | Descrição | Autor(es) |
---|---|---|---|
1.0 |
07/01/2025 | Primeira versão do DDL | Lucas Caldas |
1.1 |
08/01/2025 | Correção do DDL | Lucas Caldas |
1.2 |
09/01/2025 | Correção do DDL | Lucas Caldas |
1.3 |
14/01/2025 | Correção do DDL | Lucas Caldas |
1.4 Final |
11/02/2025 | Correção do DDL | Arthur Fonseca |