Desenhar um esquema de base de dados normalizado
Transforme requisitos de negócio num esquema relacional normalizado, com entidades, chaves, restrições, índices, DDL e consultas de validação. Pensado para ChatGPT, Claude e Gemini. Inclui 6 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Avançado · Código · Pendente de revisão editorial
Prompt
Age como um arquiteto de dados com experiência em modelação relacional e em {{engine}}.
Contexto da aplicação: {{application}}.
Requisitos funcionais (o que o sistema deve guardar e permitir): {{requirements}}.
Volume estimado: {{volume}}.
Consultas mais frequentes: {{queries}}.
Entrega, por esta ordem:
1. As entidades e atributos que decorrem dos requisitos, assinalando qualquer ambiguidade que eu tenha de esclarecer.
2. Um diagrama entidade-relação em sintaxe Mermaid (`erDiagram`) com cardinalidades.
3. A justificação da normalização até à 3FN (e onde faz sentido uma desnormalização deliberada, com o motivo).
4. DDL completo para {{engine}}: tipos de dados adequados, chaves primárias (e a escolha entre inteiros, UUID ou ULID), chaves estrangeiras com um `ON DELETE` fundamentado, restrições `NOT NULL`, `UNIQUE`, `CHECK` e valores por omissão.
5. Índices recomendados para as consultas frequentes, explicando cada um.
6. Uma estratégia para eliminação lógica (soft delete), auditoria (`created_at`, `updated_at`) e dados pessoais sensíveis.
7. Três consultas SQL de exemplo que demonstrem que o esquema cobre os principais casos de uso.
8. Riscos de evolução do esquema e como geri-los com migrações.
Restrições:
- Não acrescentes entidades que não decorram dos requisitos sem me avisares.
- Usa nomes de tabelas e colunas em {{naming_language}}, em snake_case.
- Se faltar informação crítica, pergunta-me antes de escreveres o DDL.Como utilizar
- Escreva os requisitos como frases simples: «um cliente pode ter várias moradas».
- Acrescente as consultas que vai executar com mais frequência: são elas que determinam os índices.
- Cole o diagrama Mermaid num visualizador compatível para o rever.
- Execute o DDL numa base de dados de teste antes de escrever as migrações finais.
Exemplo de utilização
Aplicação: gestão de uma escola de idiomas · Requisitos: alunos, cursos, turmas, inscrições e pagamentos mensais · Motor: PostgreSQL 16.
Exemplo de resultado
4. DDL (excerto, PostgreSQL 16)
CREATE TABLE students (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
full_name text NOT NULL,
email text NOT NULL UNIQUE,
created_at timestamptz NOT NULL DEFAULT now(),
deleted_at timestamptz -- eliminação lógica
);
CREATE TABLE enrollments (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
student_id bigint NOT NULL REFERENCES students (id) ON DELETE RESTRICT,
class_group_id bigint NOT NULL REFERENCES class_groups (id) ON DELETE RESTRICT,
enrolled_on date NOT NULL DEFAULT current_date,
UNIQUE (student_id, class_group_id)
);
CREATE TABLE monthly_payments (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
enrollment_id bigint NOT NULL REFERENCES enrollments (id) ON DELETE RESTRICT,
period date NOT NULL CHECK (extract(day FROM period) = 1),
amount_cents integer NOT NULL CHECK (amount_cents >= 0),
paid_at timestamptz,
UNIQUE (enrollment_id, period)
);
-- Índice parcial para "alunos com pagamentos em atraso"
CREATE INDEX idx_payments_unpaid ON monthly_payments (period) WHERE paid_at IS NULL;
ON DELETE RESTRICT evita perder o histórico de pagamentos se alguém eliminar um aluno; é por isso que se usa eliminação lógica. Os montantes ficam em cêntimos para evitar erros de arredondamento.
Ambiguidades
- Um pagamento cobre uma inscrição ou todas as inscrições do aluno nesse mês? [PREENCHER]…
Dados-chave
- Categoria
- Programação e desenvolvimento · SQL
- Tipo de resultado
- Código
- Nível
- Avançado
- Pensado para
- ChatGPT, Claude e Gemini
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Motor de base de dados, Aplicação, Requisitos, Volume estimado, Consultas frequentes e Língua dos nomes
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Devo normalizar sempre até à 3FN?
É um bom ponto de partida que evita duplicações e inconsistências. Para relatórios ou tabelas com leitura muito intensiva, desnormalizar pode compensar, mas deve ser uma decisão consciente e documentada.
UUID ou identificadores inteiros?
Os inteiros são compactos e rápidos; os UUID ou ULID evitam expor o número de registos e podem ser gerados fora da base de dados. O prompt pede à IA que justifique a escolha.
Para que serve este prompt?
Transforme requisitos de negócio num esquema relacional normalizado, com entidades, chaves, restrições, índices, DDL e consultas de validação.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude e Gemini. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Motor de base de dados, Aplicação, Requisitos, Volume estimado, Consultas frequentes e Língua dos nomes). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.