English 🇬🇧 · Português 🇧🇷
Ferramenta local para desenhar, importar e gerar diagramas de banco de dados: tabelas, campos, tipos, descrições, chaves primárias/estrangeiras e relações — com edição visual em drag and drop.
Roda 100% na sua máquina: um servidor Python local serve a interface web e faz o acesso aos bancos. Nada é enviado para fora.
A interface está em português e inglês — o botão do globo na barra superior alterna a qualquer momento, e o idioma inicial segue o do navegador.
run.batOu, manualmente:
python server.pyO navegador abre em http://127.0.0.1:8777. Para escolher outra porta ou não
abrir o navegador:
python server.py --port 9000 --no-browserpython -m pip install -r requirements.txtImportar banco (Ctrl+I) abre o assistente de importação.
Arraste o arquivo para a área indicada — ou informe o caminho no disco, ou a senha do banco, se houver. São lidos:
- todas as tabelas e a ordem original dos campos;
- tipos, tamanhos, precisão/escala, obrigatoriedade e valor padrão;
- chave primária, campos únicos e demais índices;
- relações (chaves estrangeiras) com as regras de exclusão/atualização;
- descrição de cada campo.
O diagrama já vem organizado pelo modo automático (veja Modos de visualização, abaixo).
Por que o pywin32 é necessário: o driver ODBC do Access não implementa
SQLPrimaryKeysnemSQLForeignKeys, e a tabelaMSysRelationshipsé bloqueada por permissão. O leitor usa ODBC para colunas e tipos e ADOX (COM) para chaves, relações e descrições. Sem o pywin32 o app ainda importa, mas cai em heurísticas e pode não encontrar as relações.
Preencha servidor/banco, ou cole uma connection string no campo do topo — o app entende os formatos mais comuns e preenche o resto:
Server=tcp:meuservidor,1433;Database=Vendas;User Id=sa;Password=***;
sqlserver://usuario:senha@host:1433/MeuBanco
MEUPC\SQLEXPRESS
host,1433/MeuBanco
Autenticação Windows (integrada) ou usuário/senha do SQL Server. Os botões
Testar conexão e Listar bancos validam antes de importar. É possível
filtrar schemas (ex.: dbo, vendas).
São lidos: tabelas, colunas com tipo/tamanho/IDENTITY/computadas, valores
padrão, PKs (na ordem da chave), constraints UNIQUE, índices, CHECK por
coluna, FKs compostas com ON DELETE/ON UPDATE, e as descrições gravadas na
propriedade estendida MS_Description.
A senha é usada apenas em memória para abrir a conexão ODBC; nada é gravado em disco.
| Ação | Como |
|---|---|
| Mover tabela | arrastar pelo cabeçalho (com encaixe na grade; segure Alt para livre) |
| Mover a tela | arrastar o fundo |
| Zoom | roda do mouse (aponta para onde quer aproximar) |
| Criar relação | arrastar o ponto azul ao lado de um campo até o campo da outra tabela |
| Selecionar várias | Shift + arrastar no fundo |
| Renomear tabela | duplo clique no cabeçalho (ou F2) |
| Editar campo | clicar no campo → painel da direita |
| Reordenar campos | arrastar na lista de campos do painel direito |
| Largura da tabela | arrastar a borda direita |
| Escolher layout | botão Organizar na barra (ou Ctrl+Shift+L) |
| Trocar idioma | botão do globo na barra (PT ⇄ EN) |
| Menu de ações | botão direito em tabela, campo, relação ou no fundo |
| Excluir | Del sobre o que estiver selecionado |
O botão Organizar (ou Ctrl+Shift+L) abre a lista de layouts. Cada um
reposiciona as tabelas com um critério diferente:
| Modo | O que faz | Quando usar |
|---|---|---|
| Automático | Calcula vários e aplica o de menor pontuação | Padrão — não precisa escolher |
| Camadas | Colunas por dependência: a tabela pai à esquerda de quem a referencia | Entender o fluxo de dependências |
| Estrela | A tabela mais conectada no centro, as demais em anéis ao redor | Modelos com uma tabela central (fato/pedido) |
| Preencher a tela | Espalha as tabelas por todo o retângulo visível, mantendo vizinhos juntos | Ver o modelo inteiro no maior zoom possível |
| Orgânico | Simulação de forças: o que é relacionado se agrupa sozinho | Descobrir os "blocos" naturais do banco |
| Círculo | Todas em um anel único | Modelos pequenos, apresentações |
| Árvore | Mesma hierarquia das camadas, de cima para baixo | Telas verticais, exportar em retrato |
| Grade alfabética | Ordem alfabética em grade | Achar uma tabela específica rápido |
Todos os modos terminam com uma passada que separa caixas sobrepostas e outra que mede a qualidade do resultado: quantas linhas de relação se cruzam, quantas passam por cima de uma tabela e quantas correm coladas umas nas outras. O número aparece no aviso após aplicar.
Duas coisas usam essa medição:
- Automático roda os candidatos, pontua cada um e aplica o melhor — em vez de você adivinhar qual serve para o seu modelo.
- Comparar todos os layouts (no fim do menu) mostra a tabela completa de resultados e deixa aplicar qualquer um com um clique.
O deslizador de espaçamento afasta ou aproxima as tabelas e reaplica o
layout na hora. Ctrl+L repete o último layout usado — útil depois de criar
tabelas novas. A escolha e o espaçamento ficam gravados entre sessões.
Ao importar um banco o diagrama já vem organizado pelo modo automático; ao
abrir um projeto .dbdiag.json as posições que você salvou são preservadas.
No painel direito você edita nome, schema, descrição e cor da tabela; e por
campo: tipo, tamanho/precisão, obrigatoriedade, PK, único, auto incremento,
valor padrão, regra CHECK e descrição. Relações têm nome da constraint,
pares de colunas (inclusive chave composta), ON DELETE/ON UPDATE e
inversão de direção.
As linhas usam notação pé de galinha: “muitos” no lado da FK, “um” no lado da chave referenciada; linha tracejada quando a FK aceita nulo.
Outros atalhos: Ctrl+Z/Ctrl+Y desfazer/refazer, Ctrl+L repetir o último layout,
Ctrl+0 ajustar à tela, Ctrl+Enter nova tabela, Ctrl+S salvar,
Ctrl+G gerar SQL, Ctrl+A selecionar tudo.
O trabalho é salvo automaticamente no navegador e restaurado ao reabrir.
Salvar grava um arquivo .dbdiag.json que pode ser reaberto depois.
Também é possível exportar o diagrama em SVG ou PNG.
Gerar SQL (Ctrl+G) tem três abas, e o dialeto vem do seletor da barra superior — SQL Server, PostgreSQL, MySQL, SQLite, Oracle ou Access.
Script completo na ordem correta de dependências: schemas, tabelas, chaves
primárias, constraints UNIQUE, índices, chaves estrangeiras e as descrições
de tabelas/campos no formato nativo de cada banco (sp_addextendedproperty,
COMMENT ON, COMMENT=). Opções: incluir FKs, índices, descrições,
IF NOT EXISTS e um bloco DROP inicial.
Tipos e valores padrão são traduzidos entre dialetos — IDENTITY(1,1) vira
SERIAL/AUTO_INCREMENT/GENERATED BY DEFAULT AS IDENTITY, GETDATE() vira
CURRENT_TIMESTAMP, NEWID() vira gen_random_uuid(), e assim por diante.
Compara o estado do banco importado com o diagrama atual e gera a
migração: CREATE TABLE para tabelas novas, ADD/ALTER COLUMN para campos
novos ou alterados, troca de chave primária, remoção e criação de FKs, e
atualização das descrições (com guarda de “já existe”). Por segurança, DROP
de colunas e tabelas só é gerado se você marcar a opção.
INSERTs aleatórios para popular o banco, inferindo o conteúdo pelo tipo e
pelo nome do campo — e pelo contexto da tabela:
- CPF e CNPJ com dígito verificador válido, e-mails, telefones, CEP;
- nomes de pessoa, razões sociais, produtos, categorias, cidade/UF coerentes na mesma linha, formas de pagamento, status;
- datas com faixas plausíveis (nascimento, cadastro, atualização);
- valores monetários, quantidades e percentuais dentro dos limites do tipo;
- respeito a
NOT NULL, tamanho máximo, camposUNIQUEeIDENTITY.
As tabelas são inseridas em ordem topológica e cada chave estrangeira recebe apenas valores que existem na tabela pai. A semente torna o resultado reproduzível: mesma semente, mesmos dados.
server.py servidor HTTP local (biblioteca padrão) + rotas da API
app/
model.py modelo do schema, normalização, auto-layout
typemap.py tipos normalizados e mapeamento por dialeto
demo.py banco de exemplo
introspect/
access.py leitura de .accdb/.mdb (ODBC + ADOX)
sqlserver.py leitura de SQL Server (sys.* / extended properties)
sqltext.py textos dos comentários dos scripts gerados
generate/
ddl.py CREATE TABLE, chaves, índices, descrições
diff.py script de atualização (ALTER)
seed.py dados fictícios
web/
index.html interface
css/app.css tema claro/escuro
js/store.js estado, histórico (desfazer/refazer)
js/canvas.js render, pan/zoom, arrastar, criar relações
js/layouts.js motor de layouts e medição de cruzamentos
js/i18n.js dicionários da interface (pt-BR / en)
js/inspector.js painel de propriedades
js/outline.js árvore de tabelas e busca
js/exporter.js exportação SVG/PNG
js/api.js, js/app.js chamadas ao backend e orquestração
- Windows com Python 3.9+
pyodbc— e o driver ODBC correspondente:- SQL Server: ODBC Driver 17/18 for SQL Server
- Access: Microsoft Access Database Engine na mesma arquitetura do Python (64 bits para um Python 64 bits)
pywin32para leitura completa de arquivos Access
A barra superior mostra o que foi detectado no seu ambiente.