Ни для кого не секрет, что проектирование структуры БД является одной из основных и порой очень трудозатратных задач при разработке любого ПО, работающего с данными. Все мы так или иначе проектируем БД, пытаясь представить себе схему взаимосвязей таблиц, а зачастую рисуем, визуализируем структуру БД, прежде чем перенести ее в СУБД. Для моделирования баз данных MySQL есть MySQL Workbench, поставляемый разработчиком, для MS SQL есть Database Diagrams; я до недавнего времени пользовался Dia, а кто-то, может быть, использует для этих целей MS Visio. Но для PostgreSQL я не встречал ни одного адекватного решения, которое позволяло бы максимально просто и точно перенести наброски структуры БД в код ее создания в самой СУБД.
Не знаю, как могло так случиться, но нет ни одной хабрастатьи о том продукте, о котором я хочу вам рассказать.
Итак… (текст, много картинок)
Хочу представить вам opensource продукт, распространяемый по лицензии GNU General Public License 3, под названием pgModeler.
Автор официально заявляет, что его продукт (приближенный перевод):
- Прост в использовании
Легко создавать и редактировать модели БД с помощью простого и интуитивно понятного интерфейса; - Поддерживает различные версии PostgreSQL
Смоделируйте БД один раз, а затем просто экспортируйте в свою версию СУБД. В состав pgModeler входят методы генерации кода, которые дают возможность Вашим моделям быть выгруженными для различных версий PostgreSQL;
- Кроссплатформенный
Написанный с помощью Qt, pgModeler может быть скомпилирован для Windows, Linux и MacOSX. Скрипты сборки легко конфигурабельны, что помогает разрешить специфические зависимости в каждой системе;
- Может быть функционально расширен с помощью плагинов
Если Вам понадобится какой-то дополнительный функционал, то Вы легко сможете реализовать его в виде плагина к pgModeler. Шаблон плагина и документация любезно включена в сборку; - Является открытым ПО
Ссылка на исходный код, расположенный на гитхабе, видна на официальном сайте невооруженным глазом.
Вы все (кроме самых любопытных, которые уже сходили по ссылке на официальную страницу), наверное, спросите, чем же уникален этот продукт?
Давайте посмотрим (картинки кликабельны).
Что ж, на вид все очень даже вкусно, но так ли это на самом деле? Предлагаю создать тестовую базу.
Для начала необходимо зарегистрировать новое подключение к СУБД в настройках (Меню->Edit->Configurations->Connections):
Добавим новую роль для нашей тестовой БД. Для этого в древовидном представлении справа необходимо вызвать контекстное меню от самой БД:
Базу автоматически создавать не будем:
да, ID для роли придется добавить вручную.
Далее добавляем новую схему:
Давайте обусловимся, что в БД у нас будут храниться информация о товарах на складах. Без движений, без остатков, просто реализуем принадлежность товара к определенному складу.
Создаем новую таблицу. Это можно сделать, например, из контекстного меню, вызванного от рабочей области (клетчатое поле):
В конструкторе создания таблицы можно сразу указать все необходимые колонки, ограничения, триггеры, правила и индексы:
После принятия всех параметров таблицы она отобразится в рабочей области:
Создаем таблицу товаров:
Не стоит создавать колонку для связи двух таблиц. Конструктор это сделает за нас.
Для связи двух таблиц предусмотрено несколько типов отношений:
Создаем отношение 1-ко-Многим:
На схеме оно будет выглядеть вот так:
Теперь мы можем выгрузить нашу схему в файл-скрипт создания, в файл-картинку или напрямую в СУБД:
а также посмотреть (без возможности изменить) скрипт создания БД для любой из поддерживаемых версий СУБД в нативном формате и в формате XML (в контекстном меню от базы данных в древовидной структуре справа):
Честно говоря, исходный код можно увидеть для каждой сущности базы данных, будь то роль, схема, база данных или просто таблица.
В качестве заключения
Что ж, заявленные автором возможности данного ПО вполне себя оправдывают. Все очень интуитивно и просто.
Данный проект сейчас находится в версии v0.4.0-rc1 и активно развивается. Функционал достаточно богат, но возможны некоторые баги и недоработки, кои, впрочем, я пока не встретил.
Думаю, pgModeler придется по вкусу всем тем, кто выбирает для своих проектов PostgreSQL в качестве основной СУБД, и он поможет вам в моделировании и визуализации ваших баз данных.
PS: я не являюсь автором pgModeler.
PPS: c автором вы можете связаться сами.
Автор: bvn13