Skip to content

Data Definition Language - DDL

Introdução

DDL é um conjunto de comandos usados em sistemas de gerenciamento de banco de dados para criar, alterar e gerenciar a estrutura dos bancos de dados.

DDL

CREATE TABLE item (
    id SERIAL PRIMARY KEY,
    tipo TIPO_ITEM NOT NULL
);

CREATE TABLE armazenamento (
    id SERIAL PRIMARY KEY,
    item_id INT NOT NULL REFERENCES item(id),
    quantidade INT NOT NULL
);

CREATE TABLE regiao (
    id SERIAL PRIMARY KEY,
    nome VARCHAR(50) NOT NULL,
    descricao TEXT NOT NULL,
    elemento TIPO_ELEMENTO NOT NULL
);

CREATE TABLE sub_regiao (
    id SERIAL PRIMARY KEY,
    regiao_id INT NOT NULL REFERENCES regiao(id),
    armazenamento_id INT REFERENCES armazenamento(id),
    nome VARCHAR(50) NOT NULL,
    descricao TEXT NOT NULL
);

CREATE TABLE sub_regiao_conexao (
    sub_regiao_1 INT NOT NULL REFERENCES sub_regiao(id),
    sub_regiao_2 INT NOT NULL REFERENCES sub_regiao(id),
    direcao TIPO_DIRECAO NOT NULL,
    situacao TIPO_SITUACAO NOT NULL
);

CREATE TABLE personagem (
    id SERIAL PRIMARY KEY,
    sub_regiao_id INT NOT NULL REFERENCES sub_regiao(id),
    nome VARCHAR(50) NOT NULL,
    elemento TIPO_ELEMENTO NOT NULL,
    conhecimento_arcano INT NOT NULL CHECK (conhecimento_arcano >= 0),
    vida INT NOT NULL CHECK (vida >= 0),
    vida_maxima INT NOT NULL CHECK (vida_maxima >= 0),
    xp INT NOT NULL CHECK (xp >= 0),
    xp_total INT NOT NULL CHECK (xp_total >= 0),
    energia_arcana INT NOT NULL CHECK (energia_arcana >= 0),
    energia_arcana_maxima INT NOT NULL CHECK (energia_arcana_maxima >= 0),
    inteligencia INT NOT NULL CHECK (inteligencia >= 0),
    moedas INT NOT NULL CHECK (moedas >= 0),
    nivel INT NOT NULL CHECK (nivel >= 0)
);

CREATE TABLE inventario (
    id SERIAL PRIMARY KEY,
    personagem_id INT NOT NULL REFERENCES personagem(id),
    tipo TIPO_INVENTARIO NOT NULL
);

CREATE TABLE npc (
    id SERIAL PRIMARY KEY,
    tipo TIPO_NPC NOT NULL
);

CREATE TABLE civil (
    id INT NOT NULL PRIMARY KEY REFERENCES npc(id),
    sub_regiao_id INT NOT NULL REFERENCES sub_regiao(id),
    tipo TIPO_CIVIL NOT NULL,
    nome VARCHAR(100) NOT NULL,
    descricao TEXT NOT NULL
);

CREATE TABLE quester (
    id INT NOT NULL PRIMARY KEY REFERENCES npc(id),
    num_quests INT NOT NULL CHECK (num_quests >= 0),
    dialogo TEXT NOT NULL
);

CREATE TABLE quest (
    id SERIAL PRIMARY KEY,
    quester_id INT NOT NULL REFERENCES quester(id),
    armazenamento_id INT NOT NULL REFERENCES armazenamento(id),
    sub_regiao_id INT NOT NULL REFERENCES sub_regiao(id),
    titulo VARCHAR(200) NOT NULL,
    descricao TEXT NOT NULL,
    recompensa TEXT NOT NULL,
    dificuldade TIPO_DIFICULDADE NOT NULL
);

CREATE TABLE quest_instancia (
    id SERIAL PRIMARY KEY,
    quest_id INT NOT NULL REFERENCES quest(id),
    personagem_id INT NOT NULL REFERENCES personagem(id),
    completed BOOLEAN NOT NULL
);

CREATE TABLE mercador (
    id INT NOT NULL PRIMARY KEY REFERENCES npc(id),
    dialogo TEXT NOT NULL
);

CREATE TABLE armazenamento_mercador (
    mercador_id INT NOT NULL REFERENCES mercador(id),
    armazenamento_id INT NOT NULL REFERENCES armazenamento(id)
);

CREATE TABLE transacao (
    id SERIAL PRIMARY KEY,
    mercador_id INT NOT NULL REFERENCES mercador(id),
    personagem_id INT NOT NULL REFERENCES personagem(id),
    item_id INT NOT NULL REFERENCES item(id)
);

CREATE TABLE mochila (
    id INT NOT NULL PRIMARY KEY REFERENCES inventario(id),
    peso INT NOT NULL CHECK (peso <= peso_total AND peso >= 0),
    peso_total INT NOT NULL CHECK (peso_total >= 0)
);

CREATE TABLE item_instancia (
    id SERIAL PRIMARY KEY,
    item_id INT NOT NULL REFERENCES item(id),
    mochila_id INT NOT NULL REFERENCES mochila(id),
    usado BOOLEAN NOT NULL DEFAULT FALSE
);

CREATE TABLE feitico (
    id SERIAL PRIMARY KEY,
    tipo TIPO_FEITICO NOT NULL
);

CREATE TABLE feitico_requerimento (
    de_id INT NOT NULL REFERENCES feitico(id),
    para_id INT NOT NULL REFERENCES feitico(id)
);

CREATE TABLE feitico_dano (
    id INT PRIMARY KEY REFERENCES feitico(id),
    dano_total INT NOT NULL CHECK (dano_total >= 0),
    descricao TEXT NOT NULL,
    elemento TIPO_ELEMENTO NOT NULL,
    countdown INT NOT NULL CHECK (countdown >= 0),
    conhecimento_arcano_necessario INT NOT NULL CHECK (conhecimento_arcano_necessario >= 0),
    energia_arcana INT NOT NULL CHECK (energia_arcana >= 0),
    nome VARCHAR(200) NOT NULL
);

CREATE TABLE feitico_dano_area (
    id INT PRIMARY KEY REFERENCES feitico(id),
    dano INT NOT NULL CHECK (dano >= 0),
    qtd_inimigos_afetados INT NOT NULL CHECK (qtd_inimigos_afetados >= 0),
    descricao TEXT NOT NULL,
    elemento TIPO_ELEMENTO NOT NULL,
    countdown INT NOT NULL CHECK (countdown >= 0),
    conhecimento_arcano_necessario INT NOT NULL CHECK (conhecimento_arcano_necessario >= 0),
    energia_arcana INT NOT NULL CHECK (energia_arcana >= 0),
    nome VARCHAR(200) NOT NULL
);

CREATE TABLE feitico_cura (
    id INT PRIMARY KEY REFERENCES feitico(id),
    qtd_cura INT NOT NULL CHECK (qtd_cura >= 0),
    descricao TEXT NOT NULL,
    elemento TIPO_ELEMENTO NOT NULL,
    countdown INT NOT NULL CHECK (countdown >= 0),
    conhecimento_arcano_necessario INT NOT NULL CHECK (conhecimento_arcano_necessario >= 0),
    energia_arcana INT NOT NULL CHECK (energia_arcana >= 0),
    nome VARCHAR(200) NOT NULL
);

CREATE TABLE grimorio (
    id INT NOT NULL PRIMARY KEY REFERENCES inventario(id),
    num_pag INT NOT NULL CHECK (num_pag <= num_pag_maximo AND num_pag >= 0),
    num_pag_maximo INT NOT NULL CHECK (num_pag_maximo >= 0)
);

CREATE TABLE feitico_aprendido (
    grimorio_id INT NOT NULL REFERENCES grimorio(id),
    feitico_id INT NOT NULL REFERENCES feitico(id)
);

CREATE TABLE pergaminho (
    id INT PRIMARY KEY REFERENCES item(id),
    cor VARCHAR(10) NOT NULL,
    descricao TEXT NOT NULL,
    drop_inimigos_media INT NOT NULL CHECK (drop_inimigos_media >= 0),
    nome VARCHAR(200) NOT NULL,
    peso INT NOT NULL CHECK (peso >= 0),
    preco INT NOT NULL CHECK (preco >= 0)
);

CREATE TABLE feitico_escrito (
    item_id INT NOT NULL REFERENCES pergaminho(id),
    feitico_id INT NOT NULL REFERENCES feitico(id)
);

CREATE TABLE efeito (
    id SERIAL PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    descricao TEXT NOT NULL,
    inteligencia DECIMAL(4, 3) NOT NULL, CHECK (inteligencia >= 0),
    vida DECIMAL(4, 3) NOT NULL, CHECK (vida >= 0),
    energia_arcana DECIMAL(4, 3) NOT NULL, CHECK (energia_arcana >= 0)
);

CREATE TABLE acessorio (
    id INT PRIMARY KEY REFERENCES item(id),
    tipo TIPO_ACESSORIO NOT NULL,
    descricao TEXT NOT NULL,
    drop_inimigos_media INT NOT NULL CHECK (drop_inimigos_media >= 0),
    nome VARCHAR(200) NOT NULL,
    peso INT NOT NULL CHECK (peso >= 0),
    preco INT NOT NULL CHECK (preco >= 0)
);

CREATE TABLE sub_regiao_acessorio_conexao (
    sub_regiao1_id INT NOT NULL REFERENCES sub_regiao(id),
    sub_regiao2_id INT NOT NULL REFERENCES sub_regiao(id),
    acessorio_id INT NOT NULL REFERENCES acessorio(id)
);

CREATE TABLE acessorio_efeito (
    acessorio_id INT NOT NULL REFERENCES acessorio(id),
    efeito_id INT NOT NULL REFERENCES efeito(id)
);

CREATE TABLE pocao (
    id INT PRIMARY KEY REFERENCES item(id),
    descricao TEXT NOT NULL,
    drop_inimigos_media INT NOT NULL CHECK (drop_inimigos_media >= 0),
    nome VARCHAR(200) NOT NULL,
    peso INT NOT NULL CHECK (peso >= 0),
    preco INT NOT NULL CHECK (preco >= 0)
);

CREATE TABLE pocao_efeito (
    pocao_id INT NOT NULL REFERENCES pocao(id),
    efeito_id INT NOT NULL REFERENCES efeito(id)
);

CREATE TABLE inimigo (
    id INT NOT NULL PRIMARY KEY REFERENCES npc(id),
    emoji TEXT NOT NULL,
    nome VARCHAR(100) NOT NULL,
    descricao TEXT NOT NULL,
    elemento TIPO_ELEMENTO NOT NULL,
    vida_maxima INT NOT NULL CHECK (vida_maxima >= 0),
    xp_obtido INT NOT NULL CHECK (xp_obtido >= 0),
    inteligencia INT NOT NULL CHECK (inteligencia >= 0),
    moedas_obtidas INT NOT NULL CHECK (moedas_obtidas >= 0),
    conhecimento_arcano INT NOT NULL CHECK (conhecimento_arcano >= 0),
    energia_arcana_maxima INT NOT NULL CHECK (energia_arcana_maxima >= 0),
    dialogo TEXT -- To-do: change to not null
);

CREATE TABLE armazenamento_inimigo (
    inimigo_id INT NOT NULL REFERENCES inimigo(id),
    armazenamento_id INT NOT NULL REFERENCES armazenamento(id)
);

CREATE TABLE inimigo_instancia (
    id SERIAL PRIMARY KEY,
    inimigo_id INT NOT NULL REFERENCES inimigo(id),
    sub_regiao_id INT NOT NULL REFERENCES sub_regiao(id),
    vida INT NOT NULL CHECK (vida >= 0)
);

CREATE TABLE combate (
    inimigo_instancia_id INT NOT NULL REFERENCES inimigo_instancia(id),
    personagem_id INT NOT NULL REFERENCES personagem(id),
    dano_causado INT NOT NULL CHECK (dano_causado >= 0),
    dano_recebido INT NOT NULL CHECK (dano_recebido >= 0)
);

Histórico de Versão

Versão Data Descrição Autor
1.0 13/01/2024 Criação Grupo
2.0 10/02/2025 Atualização Grupo