DBML Diagram 1.0.1: схемы БД в продуктах от JetBrains, интеграция с dbdiagram.io и ваши идеи - QubStore

DBML Diagram 1.0.1: схемы БД в продуктах от JetBrains, интеграция с dbdiagram.io и ваши идеи

Содержание статьи

Привет, Хабр! На связи Boost for Java.

В первой статье о DBML Diagram мы рассказали, зачем сделали open source плагин для работы с DBML прямо в IntelliJ IDEA. Тогда основой были редактор и диаграмма рядом с кодом, а интеграция с dbdiagram.io оставалась в планах.

Сейчас в JetBrains Marketplace доступна версия 1.0.1. С момента первой публикации появились обмен схемами с dbdiagram.io, экспорт DDL для трёх СУБД, ручная настройка расположения таблиц и связей, а также проверка отношений между таблицами.

В этой статье покажем, как теперь выглядит рабочий процесс и где у плагина остаются ограничения. А в конце попросим помочь с приоритетами: хочется развивать его на основе реальных схем и задач пользователей.

Установить DBML Diagram · Исходный код

Что изменилось после первой статьи

Если вы уже читали первую публикацию, вот основные изменения:

Возможность

Теперь в версии 1.0.1

Работа с dbdiagram.io

Подключение аккаунта или workspace, список диаграмм, загрузка в файл, привязка локального DBML, явные Pull и Push

Подготовка SQL

Экспорт DDL для PostgreSQL, MySQL и Oracle

Раскладка схемы

Перемещение таблиц, настройка маршрутов связей и сторон их подключения

Проверка отношений

Диагностика в редакторе и на диаграмме, блокировка SVG, PNG и DDL при ошибках

Обмен изображениями

Полный экспорт схемы в SVG и PNG с локальной раскладкой

Совместимость

IntelliJ Platform 241–262, то есть линейка 2024.1–2026.2

Это изменения за время развития плагина после первой публикации. Сама интеграция с dbdiagram.io появилась в 1.0.0, а обновление 1.0.1 расширило совместимость и улучшило работу предпросмотра и PNG-экспорта.

Зачем держать DBML рядом с кодом в IntelliJ IDEA

У нас в компании dbdiagram.io используется для совместного проектирования схем. Общая диаграмма удобна для обсуждения: можно посмотреть структуру, договориться о связях и передать ссылку коллегам.

При реализации задачи работа продолжается локально. Нужно поправить колонку, уточнить связь, сверить схему с кодом или подготовить SQL. В этот момент удобно оставаться в IntelliJ IDEA и видеть текст DBML вместе с его визуальным представлением.

Отсюда и рабочий сценарий плагина:

  1. Взять схему из dbdiagram.io или открыть существующий .dbml в проекте.

  2. Внести изменения в редакторе и сразу проверить диаграмму.

  3. При необходимости сохранить картинку или DDL.

  4. Явно отправить обновлённый DBML в общую диаграмму.

Файл схемы можно хранить в Git рядом с проектом и включать его изменения в обычный code review. Это возможности привычного процесса работы с текстовыми файлами. Специального семантического сравнения схем в плагине пока нет.

Для разработчика польза в том, что схема остаётся под рукой во время работы с backend-кодом. При этом сам DBML Diagram не привязан к языку приложения: он работает с описанием базы данных.

Интеграция с dbdiagram.io уже доступна

Главный пункт из планов первой статьи теперь реализован. В IDE появилось окно dbdiagram.io: открыть его можно через View → Tool Windows → dbdiagram.io или кнопку dbdiagram в панели предпросмотра.

В списке My Diagrams можно искать диаграммы по имени или ID, сортировать список, выбирать нужную схему и открывать её в браузере.

Два способа подключения

В Connection… доступны два варианта.

Вход через браузер и официальный CLI. Для него нужны Node.js 22.14 или новее и установленный официальный пакет dbdiagram.

npm.cmd install -g dbdiagram@0.6.3

После Login / Connect авторизация проходит в браузере. Для личного workspace поле Workspace ID можно оставить пустым, для командного — указать его ID.

Workspace API token. Этот вариант работает без Node.js и CLI. Токен создаёт владелец workspace в dbdiagram.io, а плагин хранит его в IntelliJ PasswordSafe. У этого способа есть условие со стороны сервиса: публичный API находится в beta и требует платного плана, что указано в официальной документации dbdiagram.io.

Подключение к облаку необязательно. Локальный редактор, предпросмотр, проверки и экспорт работают без аккаунта dbdiagram.io и без сети.

Как устроены Pull и Push

Есть два способа начать:

  • выбрать диаграмму и нажать Pull to file… — скачать DBML и автоматически связать файл с ней;

  • открыть свой файл и выполнить Link to current DBML либо указать ID или ссылку через Link ID.

Привязка существующего файла не заменяет его содержимое.

Далее Pull загружает удалённый DBML в редактор после подтверждения. Он заменяет и несохранённые локальные правки, поэтому подтверждение здесь существенно. Операцию можно отменить средствами редактора; если документ успел измениться во время загрузки или подтверждения, плагин остановит замену.

Push отправляет текущий текст редактора, включая несохранённые изменения, тоже после подтверждения. Перед отправкой плагин получает удалённую схему и сравнивает её с состоянием, зафиксированным при предыдущем Link, Pull или Push.

Если коллега уже изменил схему, загрузка останавливается. В этом случае можно скачать удалённую версию в отдельный файл, объединить изменения вручную и заново привязать файл перед повторной отправкой.

Эта проверка уменьшает риск случайно перезаписать чужие правки. Однако она не блокирует диаграмму на сервере: между проверкой и отправкой другой участник всё ещё может внести изменения. Автоматического слияния конфликтов пока нет.

Есть ещё несколько границ текущей интеграции:

  • Push обновляет уже существующую привязанную диаграмму. Создание, удаление и переименование диаграмм из плагина пока не поддерживаются.

  • Обмен запускается пользователем, фоновой автоматической синхронизации нет.

  • Передаётся текст DBML. Локальные позиции таблиц и маршруты связей не отправляются; настройки визуализации на сайте сохраняются.

  • Локальный парсер поддерживает часть DBML. Поэтому при его ошибках Push возможен с дополнительным подтверждением, а окончательное решение о приёме схемы остаётся за dbdiagram.io.

Именно такой цикл нам нужен для совместной работы: общая схема в сервисе, локальные изменения в IDE и осознанная публикация результата.

Экспорт DDL для PostgreSQL, MySQL и Oracle

Теперь из DBML можно получить .sql через Export DDL. Рядом выбирается диалект: PostgreSQL, MySQL или Oracle. Начальный выбор учитывает Project.database_type, если там указана поддерживаемая СУБД.

Экспорт учитывает первичные, уникальные и внешние ключи, индексы, значения по умолчанию и комментарии. Типы, enum, identity или auto-increment и действия внешних ключей преобразуются с учётом выбранного диалекта и его возможностей.

Например, можно начать с небольшой схемы:

Project orders_service { database_type: ‘PostgreSQL’ } Table users { id bigint [pk, increment] email varchar(255) [not null, unique] } Table orders { id bigint [pk, increment] user_id bigint [not null] total decimal(12,2) [not null] } Ref: orders.user_id > users.id

Такой файл удобно держать рядом с проектом: открыть диаграмму, проверить связь и сохранить DDL для дальнейшей работы.

Экспорт создаёт SQL-файл. Применение к базе и подготовка миграции из разницы двух состояний остаются отдельными шагами. Для связи многие-ко-многим нужна явно описанная промежуточная таблица: плагин не создаёт её автоматически по одному обозначению <>.

Таблицы и связи можно расположить вручную

Автоматической раскладки хватает для первого взгляда, но при обсуждении схемы часто хочется поставить связанные таблицы ближе или освободить место для длинных связей.

Теперь таблицу можно переместить за заголовок. Для связи можно изменить маршрут, выбрать другую сторону подключения к таблице и подвинуть горизонтальный или вертикальный участок с помощью маркеров.

По умолчанию связи на левой и правой сторонах таблиц привязаны к строкам соответствующих колонок. Это помогает понять, какие поля соединены. При ручном выборе верхнего или нижнего подключения точка находится на границе таблицы, а точные колонки можно посмотреть при наведении.

Раскладка сохраняется в рабочем пространстве IDE для конкретного файла и переживает обновление предпросмотра. Reset layout возвращает автоматическое расположение.

Позиции таблиц и маршруты связей учитываются при экспорте в SVG и PNG. Мжно один раз подготовить читаемую диаграмму и использовать её в документации или обсуждении задачи.

DBML и диаграмма таблиц в IntelliJ IDEA

Пример редактора и диаграммы из карточки плагина в Marketplace.

Автоматическая прокладка линий пока не идеальна для плотных циклических схем. Если карточки перекрываются, сначала стоит разнести таблицы, а затем поправить связи.

Проверка отношений до экспорта

В DBML можно написать связь, которая выглядит правдоподобно, но расходится с ограничениями колонок. Плагин теперь проверяет такие случаи и показывает объяснение в редакторе.

Для одиночных колонок проверяются, в частности:

  • наличие таблиц и полей, на которые ссылается Ref;

  • совместимость семейств типов у прямого внешнего ключа;

  • наличие PK или UNIQUE на стороне, на которую ведёт связь;

  • соответствие заявленной кратности ограничениям уникальности.

Например, для отношения один-к-одному обе стороны должны быть индивидуально уникальными. А если в отношении многие-к-одному поле на стороне «многие» само имеет PK или UNIQUE, плагин сообщает о несоответствии: такую модель следует пересмотреть.

Колонка, входящая в составной первичный ключ, не считается уникальной сама по себе. Для ссылки именно на неё может потребоваться отдельное ограничение UNIQUE.

Ошибочная связь подчёркивается в коде, а на диаграмме отображается красной пунктирной линией. Также подсвечиваются связанные с ошибкой элементы.

DBML Diagram 1.0.1: схемы БД в продуктах от JetBrains, интеграция с dbdiagram.io и ваши идеи

Подсветка ошибочного отношения между таблицами

Пример диагностики из Marketplace: связь многие-к-одному между двумя первичными ключами не соответствует заявленной кратности.

Пока в текущем документе остаются ошибки, экспорт SVG, PNG и DDL недоступен. Если во время редактирования появляется синтаксическая ошибка, на экране может оставаться последняя корректная диаграмма, но экспортировать её как результат текущего текста нельзя.

Это делает предпросмотр полезным ещё до обсуждения схемы с коллегами: часть несоответствий видна прямо при редактировании.

Что ещё умеет текущая версия

Базовые возможности из первой статьи сохранились и дополняют новые:

  • Code, Preview и Code + Preview — можно работать только с текстом, только с диаграммой или с обоими представлениями.

  • Обновление предпросмотра после правок, масштабирование, перемещение по схеме, Fit, возврат к 100% и ручной Refresh.

  • Видимые отметки PK, FK, UNIQ и NOT_NULL у колонок.

  • Цвета для светлой темы и Darcula.

  • Экспорт всей диаграммы в самостоятельный SVG или PNG, включая части за пределами видимой области.

  • Подсветка синтаксиса DBML, комментарии, отдельный тип файла и иконка.

  • Поддержка Project, таблиц и схем, псевдонимов, заметок, Enum, простых и составных индексов, основных настроек колонок и разных форм Ref.

  • Перенос кнопок панели на дополнительные строки при узком окне предпросмотра.

При этом парсер пока реализует подмножество DBML. Если файл открывается в dbdiagram.io, но не разбирается локально, это полезный пример для issue.

Подсветка сейчас лексическая: полноценные DBML-автодополнение, навигация и рефакторинг ещё не реализованы. Для графического предпросмотра нужен включённый JCEF в IDE.

Что добавило именно обновление 1.0.1

В релизе 1.0.1 расширена поддержка IntelliJ Platform до сборок 262, при сохранении минимальной версии 241. Это соответствует линейке IDE 2024.1–2026.2.

Также обновлены зависимости для PNG-экспорта и инструменты сборки. В предпросмотре уменьшено количество повторной обработки при изменениях раскладки, а устаревшие задачи обновления не должны подменять более свежий результат. Доработана обработка ресурсов при создании PNG.

Здесь особенно пригодится обратная связь от тех, кто открывает большие схемы или работает в разных версиях IDE: хочется понимать, где ещё остаются задержки и ошибки.

Как попробовать и какую обратную связь прислать

Установите или обновите DBML Diagram через Settings → Plugins в IntelliJ IDEA либо откройте страницу в Marketplace. Проверьте, что установлена версия 1.0.1 или выше, и откройте свой .dbml в режиме Code + Preview.

Для первого знакомства можно взять пример выше: передвинуть таблицы, поправить маршрут связи и экспортировать DDL. Если вы используете dbdiagram.io, попробуйте подключение и обмен на отдельной тестовой диаграмме.

Нам особенно интересны ответы на пять вопросов:

  1. Какой у вас сценарий? Проектирование с нуля, документация существующей базы, ревью схемы или совместная работа через dbdiagram.io?

  2. Как плагин ведёт себя на вашей схеме? Сколько в ней примерно таблиц и связей, удобно ли читать диаграмму, есть ли задержки?

  3. Удобны ли Pull и Push? Понятны ли привязка, подтверждения и сообщение об изменениях на сервере?

  4. Подходит ли DDL для вашей СУБД? Какие типы, ограничения или конструкции обрабатываются не так, как вы ожидаете?

  5. Что стоит делать следующим? Автодополнение, улучшение раскладки, сравнение схем, другой диалект SQL или что-то ещё?

Для ошибки полезен короткий отчёт:

IDE и её версия: ОС: Версия DBML Diagram: Что пытались сделать: Минимальный пример DBML и шаги: Ожидаемый результат: Фактический результат:

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

Ошибки и предложения удобнее оставлять в GitHub Issues. Обсудить сценарий или идею можно здесь, в комментариях, либо в Boost for Java | Community, в теме «💬 Общение».

Проект открыт под Apache License 2.0. Если хотите предложить исправление или новую возможность кодом, будем рады pull request. Для крупного изменения лучше сначала завести issue и обсудить подход.

Куда двигаться дальше

В дальнейших планах — полноценная поддержка языка DBML в IDE с автодополнением, навигацией и рефакторингом, улучшение автоматической раскладки, более широкое визуальное редактирование, история и семантическое сравнение схем.

Приоритеты хотим уточнить по обратной связи. Например, если основная боль — схема из сотни таблиц, стоит раньше заняться раскладкой. Если пользователи чаще правят DBML вручную — поддержкой языка. Если сложнее всего согласовывать изменения с командой — сравнением версий и процессом обмена с dbdiagram.io.

В первой статье мы начали с задачи видеть DBML рядом с кодом. Теперь плагин закрывает больше шагов: от локального редактирования и проверки до SQL и публикации изменений в общую диаграмму.

Попробуйте DBML Diagram на своей схеме и расскажите, на каком шаге вам всё ещё приходится обходить ограничения инструмента. Такие примеры помогут выбрать следующие изменения.

Попробовать плагин · Посмотреть код · Предложить изменение

За обновлениями плагина и материалами о Java и backend-разработке можно следить в Boost for Java. Для личных вопросов и сотрудничества — @v_d_roman.

Ссылка на основную публикацию