DDL - Linguagem de Definição de Dados
Introdução
O DDL, Linguagem de Definição de Dados, é um dos principais componentes da linguagem SQL e tem como objetivo definir e organizar a estrutura de um banco de dados. Por meio de comandos específicos, como CREATE, ALTER e DROP, é possível criar tabelas, modificar colunas, excluir objetos e estabelecer a base estrutural sobre a qual os dados serão armazenados e manipulados.
Esses comandos são fundamentais para o desenvolvimento e manutenção de bancos de dados relacionais, garantindo que os dados sejam organizados de forma lógica e eficiente. Diferente de outras linguagens SQL que lidam com o conteúdo (como a DML), a DDL atua diretamente sobre a arquitetura do banco, moldando seu funcionamento.
Metodologia
O banco de dados relacional utilizado para o desenvolvimento do jogo foi o PostgreSQL. A criação da estrutura seguiu o modelo desenvolvido no diagrama Entidade-Relacionamento e representado no modelo relacional. Foram utilizados comandos da linguagem SQL, especificamente da Linguagem de Definição de Dados (DDL), como CREATE, ALTER, e DROP, para a definição e organização das tabelas e de suas restrições.
DDL das Tabelas
Gangue
-
Create
CREATE TABLE IF NOT EXISTS Gangue ( nome_gangue VARCHAR(50) NOT NULL, descricao VARCHAR(1000) NOT NULL, qtdd_membros INT DEFAULT 0, qtdd_recurso_gangue INT DEFAULT 0, PRIMARY KEY (nome_gangue) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Gangue [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Gangue RESTRICT;
Inventario
-
Create
CREATE TABLE IF NOT EXISTS Inventario ( id_inventario SERIAL PRIMARY KEY, qtd_itens INT DEFAULT 0, is_full BOOLEAN DEFAULT FALSE );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Inventario [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Inventario RESTRICT;
Objetivo principal
-
Create
CREATE TABLE IF NOT EXISTS Objetivo_Principal ( titulo_objetivo VARCHAR(255) PRIMARY KEY, descricao VARCHAR(1000) NOT NULL );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Objetivo_Principal [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Objetivo_Principal RESTRICT;
Missao
-
Create
CREATE TABLE IF NOT EXISTS Missao ( nome_missao VARCHAR(255) PRIMARY KEY, descricao VARCHAR(1000) NOT NULL, status BOOLEAN DEFAULT FALSE );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Missao [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Missao RESTRICT;
Sala
-
Create
CREATE TABLE IF NOT EXISTS Sala ( id_sala SERIAL PRIMARY KEY, norte INT DEFAULT NULL, sul INT DEFAULT NULL, leste INT DEFAULT NULL, oeste INT DEFAULT NULL, id_inventario INT NOT NULL, nome VARCHAR(50) NOT NULL, descricao VARCHAR(1000) NOT NULL, nivel_perigo INT CHECK (nivel_perigo >= 0 AND nivel_perigo <= 10), bloqueado BOOLEAN DEFAULT FALSE, FOREIGN KEY (id_inventario) REFERENCES Inventario(id_inventario), FOREIGN KEY (norte) REFERENCES Sala(id_sala), FOREIGN KEY (sul) REFERENCES Sala(id_sala), FOREIGN KEY (leste) REFERENCES Sala(id_sala), FOREIGN KEY (oeste) REFERENCES Sala(id_sala) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Sala [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Sala RESTRICT;
Item
-
Create
CREATE TABLE IF NOT EXISTS Item ( nome_item VARCHAR(50) PRIMARY KEY, descricao VARCHAR(500) NOT NULL, durabilidade INT DEFAULT 1, pode_ser_vendido BOOLEAN DEFAULT FALSE, nome_missao VARCHAR(255) DEFAULT NULL, utilidade VARCHAR(500) DEFAULT NULL, beneficio VARCHAR(500) DEFAULT NULL, FOREIGN KEY (nome_missao) REFERENCES Missao(nome_missao) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Item [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Item RESTRICT;
Consulta personagem
-
Create
CREATE TABLE IF NOT EXISTS Consulta_Personagem ( id_personagem SERIAL PRIMARY KEY, tipo_personagem VARCHAR(2) NOT NULL );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Consulta_personagem [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Consulta_personagem RESTRICT;
Prisioneiro
-
Create
CREATE TABLE IF NOT EXISTS Prisioneiro ( id_personagem INT NOT NULL, nome VARCHAR(50) NOT NULL, velocidade INT DEFAULT 0, vida INT DEFAULT 0, crime VARCHAR(255) DEFAULT NULL, id_sala INT NOT NULL, nome_gangue VARCHAR(50) NOT NULL, FOREIGN KEY (id_personagem) REFERENCES Consulta_Personagem(id_personagem), UNIQUE (id_personagem), UNIQUE (nome), FOREIGN KEY (id_sala) REFERENCES Sala (id_sala), FOREIGN KEY (nome_gangue) REFERENCES Gangue (nome_gangue) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Prisioneiro[DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Prisioneiro RESTRICT;
Agente penitenciario
-
Create
CREATE TABLE IF NOT EXISTS Agente_Penitenciario ( id_personagem INT NOT NULL, id_sala INT NOT NULL, nome VARCHAR(50) DEFAULT 'Tira', velocidade INT DEFAULT 5, nivel_de_perigo INT DEFAULT 5, nivel_de_alerta INT DEFAULT 5, corrupto BOOLEAN DEFAULT false, preco INT DEFAULT 0, cargo VARCHAR(255) DEFAULT 'Carcereiro', FOREIGN KEY (id_personagem) REFERENCES Consulta_Personagem(id_personagem), UNIQUE (id_personagem), FOREIGN KEY (id_sala) REFERENCES Sala(id_sala) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Agente_Penitenciario [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Agente_Penitenciario RESTRICT;
Jogador
-
Create
CREATE TABLE IF NOT EXISTS Jogador ( id_personagem INT NOT NULL, id_sala INT NOT NULL, id_inventario INT NOT NULL, nome_missao VARCHAR(255) DEFAULT NULL, titulo_objetivo VARCHAR(255) DEFAULT NULL, nome_gangue VARCHAR(50) DEFAULT NULL, nome VARCHAR(50) NOT NULL, dificuldade_jogo VARCHAR(1) DEFAULT 'M', modificador_equipamento INT DEFAULT 0, vida INT DEFAULT 0, qtded_recurso INT DEFAULT 0, qtded_captura INT DEFAULT 0, UNIQUE (id_personagem), UNIQUE (nome), FOREIGN KEY (id_personagem) REFERENCES Consulta_Personagem(id_personagem), FOREIGN KEY (id_sala) REFERENCES Sala (id_sala), FOREIGN KEY (id_inventario) REFERENCES Inventario (id_inventario), FOREIGN KEY (nome_missao) REFERENCES Missao (nome_missao), FOREIGN KEY (titulo_objetivo) REFERENCES Objetivo_principal (titulo_objetivo), FOREIGN KEY (nome_gangue) REFERENCES Gangue (nome_gangue), CONSTRAINT chk_dificuldade CHECK (dificuldade_jogo IN ('F', 'M', 'D')) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Jogador [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Jogador RESTRICT;
Agente penitenciario - Jogador
-
Create
CREATE TABLE IF NOT EXISTS Agente_Penitenciario_Jogador ( id_captura SERIAL PRIMARY KEY, id_personagem_jogador INT, id_personagem_agente_penitenciario INT, FOREIGN KEY (id_personagem_jogador) REFERENCES Jogador(id_personagem), FOREIGN KEY (id_personagem_agente_penitenciario) REFERENCES Agente_Penitenciario(id_personagem) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Agente_Penitenciario_Jogador [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Agente_Penitenciario_Jogador RESTRICT;
Loja
-
Create
CREATE TABLE IF NOT EXISTS Loja ( nome_gangue VARCHAR(50) NOT NULL, preco INT NOT NULL, nome_item VARCHAR(100) NOT NULL, quantidade_disponivel INT DEFAULT 0, -- Coluna renomeada para consistência PRIMARY KEY (nome_gangue, nome_item), -- Chave primária composta FOREIGN KEY (nome_gangue) REFERENCES Gangue(nome_gangue), FOREIGN KEY (nome_item) REFERENCES Item(nome_item) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Loja [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Loja RESTRICT;
Item - Loja
-
Create
CREATE TABLE Item_Loja ( id_compra INT PRIMARY KEY, nome_gangue VARCHAR(50) NOT NULL, nome_item VARCHAR(100) NOT NULL, FOREIGN KEY (nome_gangue) REFERENCES Loja(nome_gangue), FOREIGN KEY (nome_item) REFERENCES Item(nome_item) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Item_Loja [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Item_Loja RESTRICT;
Missao - Sala
-
Create
CREATE TABLE IF NOT EXISTS Missao_Sala ( nome_missao VARCHAR(255) NOT NULL, id_sala INT NOT NULL, PRIMARY KEY (nome_missao, id_sala), FOREIGN KEY (id_sala) REFERENCES Sala(id_sala), FOREIGN KEY (nome_missao) REFERENCES Missao(nome_missao) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Missao_Sala [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Missao_Sala RESTRICT;
Instancia - Item
-
Create
CREATE TABLE IF NOT EXISTS Instancia_Item ( id_instancia INT PRIMARY KEY, nivel_de_gasto INT DEFAULT 1, id_inventario INT NOT NULL, nome_item VARCHAR(50) NOT NULL, FOREIGN KEY (id_inventario) REFERENCES Inventario(id_inventario), FOREIGN KEY (nome_item) REFERENCES Item(nome_item) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Instancia_Item [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Instancia_Item RESTRICT;
Dialogo
-
Create
CREATE TABLE IF NOT EXISTS Dialogo ( id_dialogo INT PRIMARY KEY, id_personagem INT, nome_missao VARCHAR(255), texto VARCHAR (500) NOT NULL, ordem INT NOT NULL, FOREIGN KEY (id_personagem) REFERENCES Consulta_Personagem(id_personagem), FOREIGN KEY (nome_missao) REFERENCES Missao(nome_missao) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Dialogo [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Dialogo RESTRICT;
Objetivo Principal - Missao
-
Create
CREATE TABLE IF NOT EXISTS Objetivo_principal_missao ( titulo_objetivo VARCHAR(255) NOT NULL, nome_missao VARCHAR(255) NOT NULL, ordem INT NOT NULL, FOREIGN KEY (titulo_objetivo) REFERENCES Objetivo_Principal(titulo_objetivo), FOREIGN KEY (nome_missao) REFERENCES Missao(nome_missao) );
-
Alter
-- O código abaixo é um template, iremos adaptá-lo caso seja necessário alterar uma tabela ALTER TABLE Objetivo_Principal_Missao [DROP CONSTRAINT | DROP COLUMN] [ADD CONSTRAINT | ADD COLUMN];
-
Drop
DROP TABLE Objetivo_principal_missao RESTRICT;
Modificador Dificuldade
CREATE TABLE IF NOT EXISTS Modificador_dificuldade (
tag_dificuldade VARCHAR(1) PRIMARY KEY,
modificador INT NOT NULL
);
📑 Histórico de versão
Versão | Data | Descrição | Autor |
---|---|---|---|
1.0 |
05/06/2025 | Criação da introdução e metodologia utilizada no DDL | Mayara A. Oliveira |
1.1 |
07/06/2025 | adicionando tabelas jogador, prisioneiro e gangue | Mayara A. Oliveira |
1.2 |
09/06/2025 | Adiciona dados a tabela consulta_personagem, agente_penitenciario e agente_penitenciario_jogador | Maria Alice |
1.3 |
09/06/2025 | Adiciona tabelas missao, diálogo e objetivo principal | Ana Carolina |
1.4 |
09/06/2025 | Adicionando tabelas missão, inventário, sala | Marllon Cardoso |
1.5 |
09/06/2025 | Adicionando tabelas instancia-item, item, loja, item-loja | Renann Gomes |
1.6 |
12/06/2025 | Organiza tabelas e adiciona códigos pendentes que já estão no .sql | Maria Alice |
1.7 |
07/07/2025 | Atualiza DDL | Maria Alice |