Автоматическая генерация UML схемы бд - schemacrawler

Многие иногда сталкиваются с тем что нужно нарисовать структуру таблиц для своего веб приложения, например для технической документации вроде такой:


Это нужно делать руками если структура БД еще не создана, но что если вам нужно написать документацию для уже созданного приложения? Обычно я рисовалки схемы руками через рисовалки схем вроде draw.io, но недавно я нашел инструмент для авто генерации таких иллюстраций бесплатно, и в формате png. 

Эта утилита называется https://www.schemacrawler.com/. По началу я хотел установить ее на свою систему через apt-get, но потом понял что можно просто использовать docker. На примере sqlite базы даных мы рассмотрим как сгенерировать такую иллюстрацию в формате png. Для начала нужно cd в директорию с вашей БД sqlite, затем выполнить команду для запуска контейнера:

sudo docker run -v $(pwd):/home/ -w /home/ -it schemacrawler/schemacrawler /bin/bash

Далее будет шелл контейнера, в нем нужно запустить:

/opt/schemacrawler/bin/schemacrawler.sh --command=schema --info-level=maximum --database=teams.db --server=sqlite --output-file=test.png

Где --database это имя файла вашей sqlite БД. И сгенерируется аналогичная иллюстрация:


Так же schemacrawler поддерживает вывод многих других БД и форматов вывода иллюстраций, например text,html,gif,jpg. Формат вывода можно изменить меняя имя файла вывода, либо задавая через --output-format=. При использовании формата text можно дальше сравнивать через утилиту diff разницу в схеме нескольких БД, как например хотели сделать тут https://serverfault.com/q/12948/486890.

Схожим образом можно нарисовать схему и с СУБД postgres, или mysql:

/opt/schemacrawler/schemacrawler.sh --server=postgresql --host=127.0.0.1 --port=5432 --database=schemacrawler --schemas=public --user=postgres --password=qwerty --info-level=standard --command=schema

Полный список поддерживаемых утилитой БД: https://www.schemacrawler.com/database-support.html

Комментарии

Популярные сообщения из этого блога

DOS атака при помощи Python

Ведем телеграм канал через питон

Django migrations не видит изменения моделей