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

Pensado para:

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

  1. Escreva os requisitos como frases simples: «um cliente pode ter várias moradas».
  2. Acrescente as consultas que vai executar com mais frequência: são elas que determinam os índices.
  3. Cole o diagrama Mermaid num visualizador compatível para o rever.
  4. 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.

Prompts relacionados