Skip to content

[Claude] Índices no diagrama de banco e Find Unindexed Foreign Keys - #16

Open
leoars wants to merge 1 commit into
mainfrom
pgms-044-diagram-indexes
Open

leoars wants to merge 1 commit into
mainfrom
pgms-044-diagram-indexes

Conversation

@leoars

@leoars leoars commented Nov 12, 2026

Copy link
Copy Markdown
Owner

What changed / O que mudou

Índices no diagrama de banco (PGMS-044, build M1061 da fonte de desenvolvimento) e, como pré-requisito, Find Unindexed Foreign Keys (PGMS-039, M1056), que o main público ainda não tinha. Sugestão de um usuário: quem expõe o banco a um agente de IA precisa que ele enxergue a modelagem, inclusive índices GIN e trigram, antes de escrever SQL.

  • Seção Indexes em cada tabela do diagrama, abaixo das colunas, recolhida por padrão (para não desarrumar diagramas já organizados): ▸ Indexes (3) · GIN, com a lista inteira na dica. Recolhida, não alarga a tabela.
  • Aberta (clique no cabeçalho, lembrado por tabela): uma linha por índice com nome, método quando não é b-tree (Hash, GIN, GiST, SP-GiST, BRIN), chaves ou expressão, classe de operadores quando não é a padrão (gin_trgm_ops, jsonb_path_ops, text_pattern_ops), INCLUDE, UNIQUE, EXCLUDE, partial e invalid. A dica traz o WHERE do parcial e o CREATE INDEX completo.
  • Glifos: chave dourada para a PK (a mesma das colunas da PK), chave prateada deitada para UNIQUE e EXCLUDE, árvore para índice comum.
  • Aviso no título quando uma chave estrangeira não tem índice, pela regra da Find Unindexed Foreign Keys; o clique abre essa janela. O menu da tabela ganha o item quando há aviso.
  • Menu do diagrama: Show Indexes (ligado por padrão, lembrado por diagrama) e Refresh (relê tabelas e índices sem marcar alteração).
  • JSON do diagrama, formato 2: cada save grava, por tabela, os índices e as FKs sem índice lidos do catálogo dentro da transação do save, depois das mudanças de esquema, mais showIndexes, indexesExpanded e catalogRead. Só fatos do catálogo vão para lá, sem os rótulos da tela. Diagramas de formato 1 abrem como estavam e passam ao 2 no próximo save.
  • Somente leitura: índices continuam sendo criados em Indexes/Keys… (duplo clique numa linha de índice abre o diálogo nesse índice).
  • Vista Keys passa a mostrar também as colunas de índices, como o SSMS 22.11 faz.
  • Find Unindexed Foreign Keys… (Object Explorer ▸ banco): lista pelo catálogo e pelas estatísticas as FKs sem índice utilizável e cria os índices a partir de um script revisado, concorrente (um por vez) ou em uma transação.
  • Guias do usuário EN/pt-BR (seção de diagramas) e notas de versão em "em desenvolvimento".

Why / Por quê

O diagrama do SSMS 22.11 não mostra índices, e isso foi conferido antes de codar: uma instância própria foi pilotada num banco descartável do LocalDB, com PK, UNIQUE, índice com INCLUDE, filtrado, clustered e columnstore. Nenhuma Table View mostra índices, e o Modify Custom… não tem campo para eles. A pilotagem também mostrou que a vista Keys inclui as colunas de índices, então o PGMS passou a seguir isso. A seção, o rótulo do método e o aviso são acréscimos do PGMS, sem alegação de paridade.

Validation actually run / Validação realmente executada

Nesta branch, no PostgreSQL 17.11, em cluster isolado em loopback:

  • Test-Integration.ps1 -DiagramsOnly: 245 integração + 413 WPF. Cobre:
    • índices de cada método: GIN com gin_trgm_ops (pg_trgm), jsonb_path_ops, GiST, SP-GiST, BRIN, Hash;
    • expressão, parcial com INCLUDE e DESC, EXCLUDE com btree_gist, índice inválido de um CREATE UNIQUE INDEX CONCURRENTLY que falhou, tabela particionada;
    • FKs sem índice iguais às da varredura;
    • JSON salvo: formato 2, mesmo JSON em dois saves, chave criada pelo save presente no JSON dele, diagrama de formato 1 atualizado;
    • interface: seção, glifos, Show Indexes, aviso e janela, Refresh, reabertura.
  • Test-Integration.ps1 -ResultsTextOnly: 222 integração + 198 WPF (inclui os testes da Find Unindexed Foreign Keys).
  • Test-PublicDocumentation.ps1: válido.

Na fonte de desenvolvimento, com o mesmo código de diagramas, a regressão completa no PG 17.11 deu 2.981 de integração + 4.524 WPF = 7.505, na primeira rodada.

Não executado:

  • regressão completa nesta branch;
  • PostgreSQL 16 e 18;
  • mouse e teclado reais (cliques por evento; dicas conferidas pelo conteúdo, sem passar o mouse).

Limites conhecidos:

  • A classe de operadores sai qualificada pelo schema conforme o search_path da conexão do diagrama.
  • Não mostra tamanho nem uso dos índices.
  • Mudanças pendentes no Indexes/Keys só aparecem na seção depois de salvar.
  • Uma seção aberta pode cobrir a tabela de baixo.
  • O JSON só é atualizado quando o diagrama é salvo; mudança feita só no banco não marca o diagrama como alterado.

Checklist

  • No credentials, personal data, dumps, saved profiles or local artifacts are included. / Sem credenciais, dados pessoais, dumps, perfis salvos ou artefatos locais.
  • Tests used only synthetic data and the isolated project cluster. / Testes usaram apenas dados sintéticos e o cluster isolado do projeto.
  • Public documentation updated in both docs/en and docs/pt-BR (and both READMEs) when relevant. / Documentação pública atualizada em docs/en e docs/pt-BR (e nos dois READMEs) quando pertinente.
  • No SSMS parity or platform certification is claimed beyond what was tested. / Nenhuma paridade com SSMS ou certificação de plataforma declarada além do testado.
  • Known limits of the change are stated above. / Limites conhecidos da mudança estão descritos acima e em docs/en/release-notes.md.

🤖 Generated with Claude Code

Cada tabela do diagrama ganha a seção Indexes, recolhida por padrão, com
método, chaves ou expressão, classe de operadores fora da padrão, INCLUDE,
UNIQUE, EXCLUDE, parcial e inválido. Aviso no título para chave estrangeira
sem índice, que abre Find Unindexed Foreign Keys (também nesta mudança, no
menu do banco no Object Explorer). Show Indexes e Refresh no menu do
diagrama. Cada gravação escreve os índices do catálogo na definição do
diagrama (formato 2). Sugestão de um usuário.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant