Каждая диаграмма схемы начинается правдой, а заканчивает враньём. Кто-то рисует её за неделю до запуска, она занимает почётное место в вики, а потом продукт выходит. Двадцать миграций спустя на ней всё ещё таблица users без deleted_at, таблица orders, которую давно разделили на две, и связь, убранную рефакторингом в марте. Новые инженеры читают её, верят и строят на картинке базы данных, которой больше не существует. Автоматическая генерация ER-диаграммы решает эту проблему в корне.
Обычная реакция это чувство вины: надо было поддерживать её в актуальном состоянии. Но вручную обновлять диаграмму после каждой миграции это рутина, в которой никто не выигрывает, поэтому этого никогда не происходит. Надёжное решение в том, чтобы изменить источник диаграммы. Если она генерируется из схемы, а не поддерживается рядом с ней, расхождение становится невозможным, потому что картинка всегда является представлением текущей правды.
Считайте диаграмму производной, а не авторской
Ваша схема уже живёт в каноническом месте: в миграциях, которые вы запускаете, и в DDL, который можно выгрузить из любого окружения. Это источник правды, и он машиночитаем. Диаграмма, поддерживаемая вручную, это вторая копия этой правды, а две копии чего угодно расходятся. Поэтому ход в том, чтобы сделать диаграмму проекцией схемы, как отчёт является проекцией таблицы: она перегенерируется по запросу и никогда не устаревает от ручных правок.
На практике это значит: когда нужна текущая картина, вы подаёте на вход текущую схему и получаете диаграмму. Никакой ручной сверки, никакого "кто последний это трогал", никаких устаревших связей.
ER-диаграмма из DDL, который вы уже выгружаете
Специальный экспорт не нужен. Любая база данных может выдать свою схему в виде SQL, и именно этот SQL читает LetDraw. В Postgres это одна команда; у MySQL и других есть свои аналоги.
# Postgres: dump just the schema, no data pg_dump --schema-only --no-owner mydb > schema.sql # then: Generate from Code → paste schema.sql → get the ER diagram
Откройте диалог "Создать из кода", вставьте файл, и LetDraw построит диаграмму: таблицы с типизированными столбцами, отмеченные первичные и внешние ключи и линии "один ко многим", проведённые по выражениям REFERENCES, с правильными наконечниками "воронья лапка". То, на что уходил целый день перетаскивания прямоугольников, теперь одна вставка, и раз результат получен из настоящего DDL, он корректен по построению.
Диаграмма, которую вы перегенерируете за десять секунд, никогда не устаревает, потому что никому не нужно помнить о её обновлении.
Встройте в процесс, чтобы ER-диаграмма всегда была актуальной
Когда генерация диаграммы ничего не стоит, её можно поместить туда, где она останется честной. Несколько привычек, которые делают расхождение структурно невозможным:
- Перегенерируйте при релизе. Добавьте в чеклист релиза пункт "обновить ER-диаграмму из
schema.sql". Прочитать это предложение дольше, чем сделать. - Сравнивайте, а не перерисовывайте. Когда приходит миграция, сгенерируйте свежую диаграмму и сравните. Новая таблица, новый столбец, изменённый ключ: изменение видно, а ваши ручные пометки на неизменившихся частях сохраняются.
- Ограничьтесь изменением. На ревью вставляйте только обсуждаемые таблицы. Сфокусированная ER-диаграмма из шести таблиц, актуальность которой доказуема, лучше плаката на сорок таблиц, который может быть актуальным.
- Храните и как код. Превратите диаграмму обратно в Mermaid или D2 и закоммитьте рядом с миграцией, чтобы картинка шла вместе с изменением в том же pull request.
Смысл диаграммы схемы в доверии
Диаграмма схемы оправдывает своё место, только когда ей верят без проверки. Заслужить это доверие помогает не дисциплина, а удаление человеческого шага, который даёт сбой. Генерируйте картинку из DDL, который вы и так поддерживаете, обновляйте её при каждом изменении схемы, и диаграмма перестанет быть музейным экспонатом и станет тем, к чему команда действительно обращается. Корректна по построению, актуальна по умолчанию.
Выгрузите схему, вставьте её один раз и посмотрите, насколько ваша мысленная модель близка к базе данных, которая у вас реально работает.