Skip to content

Latest commit

 

History

History
246 lines (188 loc) · 10.2 KB

File metadata and controls

246 lines (188 loc) · 10.2 KB

English 🇬🇧 · Português 🇧🇷

Database Diagram Studio

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.


Como usar

run.bat

Ou, manualmente:

python server.py

O 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-browser

Instalação das dependências

python -m pip install -r requirements.txt

As três funcionalidades principais

1. Construir o diagrama a partir de um banco existente

Importar banco (Ctrl+I) abre o assistente de importação.

Microsoft Access (.accdb / .mdb)

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 SQLPrimaryKeys nem SQLForeignKeys, e a tabela MSysRelationships é 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.

SQL Server

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.


2. Editor visual drag and drop

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

Modos de visualização

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.


3. Geração de código SQL

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.

CREATE TABLE

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.

Atualização (ALTER)

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.

Dados fictícios

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, campos UNIQUE e IDENTITY.

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.


Estrutura do projeto

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

Requisitos

  • 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)
  • pywin32 para leitura completa de arquivos Access

A barra superior mostra o que foi detectado no seu ambiente.