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_codigojá eraUNIQUE. Existe alguma outra coluna que também deveria ser única? (Talvez umnumero_registro_agentese existisse?)Faz sentido ter um valor
DEFAULTpara alguma coluna? (Talvez onivel_habilidadepadrão seja 1? Ouativopadrãotruejá 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_missaodentro de um certo período? Ou é ok repetir?)Faz sentido ter um
DEFAULT? (Talvez ostatuspadrão seja 'Planejamento'? Ou adata_iniciopadrão seja a data atual?)A
PRIMARY KEY(id) está ok?A
FOREIGN KEY(agente_idreferenciandoagentes.id) é crucial. Quais regrasON DELETEeON UPDATEvocê 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_idprecisaria 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_idter 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 KEYeFOREIGN KEY(com açõesON DELETE/UPDATE) você aplicaria?
Como Entregar:
Liste as constraints que você adicionaria ou modificaria para cada tabela.
Para as
FOREIGN KEYs, 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 TABLEpara 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.
Atualizado

