Exercício 3: Definindo as Regras do Jogo
Sua Missão: Agir como o(a) legislador(a) do seu banco de dados, aplicando as Constraints
para garantir que as regras sejam seguidas e a ordem seja mantida!
Vamos voltar ao cenário da agência de heróis/vilões do exercício anterior, ou ao modelo que você criou no Exercício 2.
O Desafio:
Para as tabelas agentes
e missoes
(ou as tabelas do seu próprio modelo), revise a estrutura e pense em quais Constraints
fariam sentido aplicar para melhorar a qualidade e a integridade dos dados.
Tarefas de Legislador(a):
Revisão da Tabela
agentes
:Quais colunas não podem ser nulas (
NOT NULL
) de jeito nenhum? (Pense: Todo agente precisa de um nome_codigo? De um nível?)A coluna
nome_codigo
já eraUNIQUE
. Existe alguma outra coluna que também deveria ser única? (Talvez umnumero_registro_agente
se existisse?)Faz sentido ter um valor
DEFAULT
para alguma coluna? (Talvez onivel_habilidade
padrão seja 1? Ouativo
padrãotrue
já está bom?)A
PRIMARY KEY
(id
) já está definida. Está ok?
Revisão da Tabela
missoes
:Quais colunas são obrigatórias (
NOT NULL
)? (Toda missão precisa de um nome? De um status? De um agente associado?)Existe alguma coluna que deveria ser
UNIQUE
? (Talvez onome_missao
dentro de um certo período? Ou é ok repetir?)Faz sentido ter um
DEFAULT
? (Talvez ostatus
padrão seja 'Planejamento'? Ou adata_inicio
padrão seja a data atual?)A
PRIMARY KEY
(id
) está ok?A
FOREIGN KEY
(agente_id
referenciandoagentes.id
) é crucial. Quais regrasON DELETE
eON UPDATE
você aplicaria? Pense nas opções:RESTRICT
/NO ACTION
: Impedir que um agente seja apagado se tiver missões associadas.CASCADE
: Apagar o agente E todas as suas missões (perigoso!).SET NULL
: Apagar o agente e deixar as missões sem agente (agente_id = NULL
). A colunaagente_id
precisaria permitir nulos.SET DEFAULT
: Apagar o agente e atribuir as missões a um agente "padrão" (precisaria de um agente padrão e a colunaagente_id
ter umDEFAULT
).Qual faz mais sentido para a Agência? Justifique sua escolha!
(Se aplicável ao seu modelo do Exercício 2): Faça a mesma análise para as tabelas que você desenhou. Quais
NOT NULL
,UNIQUE
,DEFAULT
,PRIMARY KEY
eFOREIGN KEY
(com açõesON DELETE
/UPDATE
) você aplicaria?
Como Entregar:
Liste as constraints que você adicionaria ou modificaria para cada tabela.
Para as
FOREIGN KEY
s, explique qual ação (ON DELETE
/ON UPDATE
) você escolheu e por quê.Você pode escrever isso como texto, ou se estiver usando o Supabase/SQLiteOnline, pode tentar usar comandos
ALTER TABLE
para adicionar algumas dessas constraints (pesquise a sintaxe se precisar! Ex:ALTER TABLE agentes ADD CONSTRAINT nome_unico UNIQUE (nome_codigo);
ouALTER TABLE agentes ALTER COLUMN nivel_habilidade SET NOT NULL;
). Cuidado ao alterar tabelas existentes!.
Exemplo de Resposta (Parcial para agentes
):
Tabela
agentes
:nome_codigo
: ManterUNIQUE
, adicionarNOT NULL
(Todo agente precisa de um codinome).nivel_habilidade
: AdicionarNOT NULL
(Todo agente tem um nível).cidade_base
: Pode serNULL
? Talvez um agente nômade? Decidi deixar como opcional (semNOT NULL
).ativo
: ManterDEFAULT true
, adicionarNOT NULL
(Sempre tem que ser true ou false, não nulo).
Tabela
missoes
:nome_missao
: AdicionarNOT NULL
.status
: AdicionarNOT NULL
. Talvez umDEFAULT 'Planejamento'
.agente_id
: AdicionarNOT NULL
(Toda missão precisa de um agente?).FOREIGN KEY (agente_id)
: EscolhoON DELETE RESTRICT
. Não quero apagar um agente se ele ainda tiver missões ativas ou no histórico. Prefiro reatribuir as missões manualmente ou arquivar o agente (marcar comoativo = false
) em vez de perder o histórico da missão ou apagar a missão junto.
Objetivo: Entender a importância das constraints para garantir a qualidade dos dados e aprender a pensar sobre as regras que governam suas tabelas e relacionamentos.
Last updated