Генератор коду
Перейдіть на вкладку Code Generator на панелі інструментів. Вкладка показує код усього документа ліворуч, а праворуч від нього — панель параметрів із заголовком Code Generator, де ви вибираєте мову, базу даних, стилі назв і, для деяких цільових форматів, лапки.
Панель відкривається сама, якщо тільки редактор не вужчий за 640 px у момент першого відкриття вкладки. Кнопка Hide options угорі панелі згортає її, а кнопка Show options у верхньому правому куті коду повертає її. Панель лишається відкритою чи згорнутою й після перемикання вкладок, доки відкрито редактор, незалежно від панелі вкладки схеми SQL, і цей стан ніколи не зберігається у файлі.
Клацніть код правою кнопкою миші, щоб відкрити його контекстне меню: Language, Database, Table Name Case, Column Name Case, Bracket (лише для Doctrine, JPA і SeaORM), кожен зі своїм підменю, у якому позначено поточне значення, потім Options panel, який згортає або відкриває панель і має позначку, поки її показано, а також Save file.
Поки ця вкладка відкрита, швидкий пошук пропонує Database, Bracket (лише для Doctrine, JPA і SeaORM), Language, Table Name Case, Column Name Case і Code Generator: Options panel, що згортає або відкриває панель.

Те саме подання коду є також вкладкою Code Generator у вікні властивостей таблиці, де воно генерує код для цієї однієї таблиці замість усього документа. Там воно не має панелі параметрів, а його контекстне меню змінює ті самі налаштування, але не має пунктів Options panel і Save file.
Якщо код усього документа починається з імпортів або заголовка, код однієї таблиці починається з тих із них, які потрібні цій таблиці, як-от <?php для PHP, import Foundation для Swift або $schema для JSON Schema.
Код генерується під час відкриття вкладки й заново щоразу, коли змінюється мова, база даних, один зі стилів назв або тип лапок. Зміна діаграми, зроблена, поки вкладку відкрито, як-от зміна, яку вніс співавтор чи агент для програмування, з’являється, щойно ви покинете вкладку й повернетеся до неї або щойно зміниться одне з цих налаштувань.
Панель параметрів
Під підписом Saved in the document панель перелічує Language, Database, Table Name Case і Column Name Case, а за ними — Bracket, поки мовою є Doctrine, JPA або SeaORM. Кожен із них — розкривний список, і зміна одразу переписує код.
Коли вибрана мова ігнорує Database або стилі назв, вони лишаються на панелі — приглушені, з приміткою під ними, як-от Not used by DBML, — і їх усе одно можна змінити.
Кнопки Save file і Copy розташовано внизу панелі — див. збереження або копіювання результату.
Це власні налаштування діаграми, ті самі, які змінюють і контекстне меню, і швидкий пошук. Database зберігається у файлі, як і будь-яка зміна.
Language, Table Name Case, Column Name Case і Bracket зберігаються лише тоді, коли відповідне блокування на вкладці налаштувань вимкнено (для Bracket — Bracket Type), а в новій діаграмі ввімкнено всі блокування. Поки блокування ввімкнено, зміна переписує код на вашому екрані, але файл зберігає заблоковане значення, і діаграма знову відкривається з ним. Панель ніяк не показує блокування; щоб зберегти вибір у файлі, вимкніть відповідне блокування — див. блокування.
Мова
Підтримуються двадцять два цільові формати, перелічені в трьох групах — мови, ORM, потім схеми, — кожна в алфавітному порядку. Список на панелі й контекстне меню відокремлюють групи лінією, але не називають жодної з них:
| Цільовий формат | Група | Зв’язки | Індекси | ON DELETE / ON UPDATE | Зберігається як |
|---|---|---|---|---|---|
C# | Мова | — | — | — | .cs |
Go | Мова | — | — | — | .go |
Java | Мова | — | — | — | .java |
Kotlin | Мова | — | — | — | .kt |
PHP | Мова | — | — | — | .php |
Rust | Мова | — | — | — | .rs |
Scala | Мова | — | — | — | .scala |
Swift | Мова | — | — | — | .swift |
TypeScript | Мова | — | — | — | .ts |
Doctrine | ORM | ✓ | ✓ | Лише ON DELETE | .php |
Drizzle | ORM | ✓ | ✓ | ✓ | .ts |
JPA | ORM | ✓ | — | — | .java |
SeaORM | ORM | ✓ | Лише унікальні | ✓ | .rs |
Sequelize | ORM | ✓ | ✓ | ✓ | .ts |
SQLAlchemy | ORM | ✓ | ✓ | ✓ | .py |
TypeORM | ORM | ✓ | ✓ | ✓ | .ts |
AML | Схема | ✓ | ✓ | ✓ | .aml |
DBML | Схема | ✓ | ✓ | ✓ | .dbml |
GraphQL | Схема | ✓ | — | — | .graphql |
JSON Schema | Схема | — | — | — | .json |
Mermaid | Схема | ✓ | — | — | .mmd |
Zod | Схема | — | — | — | .ts |
Типове значення — GraphQL. Кожен цільовий формат виводить стовпці; позначки ✓ показують, що ще він виводить.
Таблиці виводяться в порядку їхніх назв, а не в порядку розташування на полотні. Індекси — це ті, що перелічені під Indexes у вікні властивостей таблиці, а не рядки Keys над ними. SeaORM записує лише унікальні з них, а Mermaid позначає унікальний стовпець як UK, але не записує жодного індексу.
Кожен цільовий формат, крім Java, AML, DBML і Mermaid, записує стовпець первинного ключа як NOT NULL незалежно від того, чи задано для нього Not Null. Java не позначає жодного стовпця ні як такого, що допускає NULL, ні як такого, що його не допускає, а AML, DBML і Mermaid зберігають прапорець таким, яким він є в діаграмі.
Що записують деякі цільові формати:
PHP: звичайні класи з типізованими публічними властивостями, з<?phpіdeclare(strict_types=1);на початку.Doctrine: сутності Doctrine ORM 3 з атрибутами, для DBAL 4.2 або новішої версії, кожен стовпець — зі своїм типом DBAL і параметрами для вибраної бази даних.Rust: структураpub structдля кожної таблиці, типи в якій записано повним шляхом, як-отchrono::NaiveDateTimeабоrust_decimal::Decimal, без рядкаuse.SeaORM: сутності SeaORM 2.0 у щільному форматі (dense), де кожна таблиця — модульpub mod, тож увесь текст компілюється як один файл.Swift: структураCodable,Hashable,Sendableдля кожної таблиці, що потребує Swift 6.1 або новішої версії.TypeScript: інтерфейсexport interfaceдля кожної таблиці, який описує рядок таблиці як JSON, так само як схемаZod, — дата чи час мають типstring, а стовпець, що допускає NULL, —T | null.Zod: схема рядка Zod 4 для кожної таблиці та виведений із неї тип, без схеми для вставлення й без зв’язків.JSON Schema: один документ JSON Schema draft 2020-12 зі схемою рядка для кожної таблиці в$defs.Mermaid: діаграмаerDiagramтого виду, який відображає GitHub, де кожна таблиця — сутність, що перелічує всі стовпці з їхніми типами й позначкамиPK,FKабоUK, якщо вони є, а кожен зв’язок — лінія між двома його таблицями.
AML, DBML і GraphQL — формати двостороннього обміну: кожен із них також є джерелом імпорту. Див. імпорт і експорт файлів. Інші схеми — JSON Schema, Mermaid і Zod — призначені лише для виведення.
DBML записує колір кожної таблиці як headercolor, а в коді всього документа — ще й блок TableGroup після оголошень Ref для кожної групи таблиць, що містить таблицю. AML записує колір таблиці як найближчу з назв кольорів AML.
ON DELETE і ON UPDATE
Дії ON DELETE і ON UPDATE зв’язку задаються в його контекстному меню — див. ON DELETE і ON UPDATE.
Цільові формати з ✓ у стовпці ON DELETE / ON UPDATE таблиці мов записують дії, які задає зв’язок; для дії, залишеної зі значенням Not set, нічого не записується.
Які дії зберігають цільові формати ORM, залежить від вибраної бази даних, тоді як AML і DBML зберігають усі, — див. база даних.
Doctrineзаписує лише ON DELETE, оскільки Doctrine не має ON UPDATE. Він додаєonDelete: 'CASCADE'до кожного атрибута#[ORM\JoinColumn]асоціаціїManyToOneабоOneToOneна стороні-власнику, як-от#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')], а доOneToManyабоOneToOneна зворотній стороні нічого не додає. Зв’язок, що посилається на унікальний стовпець, який не є первинним ключем, лишається звичайними стовпцями, які Doctrine зіставляє без асоціації, тож для нього дія не записується.Drizzleзаписує їх у нижньому регістрі. У виклику.references()вони є параметрами, як-от{ onDelete: "cascade", onUpdate: "set null" }; у викликуforeignKey(), який створюється для ключа з кількох стовпців, вони об’єднуються в ланцюжок, як-от.onDelete("restrict").onUpdate("no action").SeaORMзаписує їх у зв’язкуbelongs_toдочірньої таблиці, спершу ON UPDATE, під назвами SeaORMNoAction,Cascade,SetNull,SetDefaultіRestrict, як-отon_update = "Cascade", on_delete = "SetNull". Зв’язокhas_oneабоhas_manyбатьківської таблиці їх не отримує.Sequelizeзаписує елементиonDelete: "CASCADE"іonUpdateв обидва виклики асоціацій:hasManyабоhasOneтаbelongsTo. Для ключа з кількох стовпців виклики асоціацій не створюються, тожSequelizeне записує для нього жодних дій.SQLAlchemyпередає аргументиondelete="CASCADE"іonupdateуForeignKey()для ключа з одного стовпця та вForeignKeyConstraint()— для ключа з кількох стовпців.TypeORMзаписує параметриonDelete: "CASCADE"іonUpdateу декоратор@ManyToOneабо@OneToOneна стороні-власнику й ніколи — на зворотній стороні. Він завжди пропускаєSET DEFAULT, оскільки TypeORM записав би його якDEFAULT, якого не приймає жодна база даних.DBMLдодає до оголошенняRefналаштування, як-от[delete: set null, update: no action].AMLзаписує зв’язок, що має дію, окремим операторомrelіз властивостями, як-от{onDelete: cascade, onUpdate: "set null"}, а не вбудовано в його стовпець.
JPA не записує жодної дії: стандартний JPA не має для них параметра, а генератор не використовує анотацію @OnDelete з Hibernate. Mermaid теж не записує жодної, оскільки лінія в erDiagram не має для них місця.
На вкладці Code Generator у вікні властивостей таблиці, яка показує одну таблицю, DBML не записує оголошень Ref, а AML — операторів rel, тож жоден із них не показує там дій; AML залишає зв’язок з одного стовпця, що має дії, вбудованим у його стовпець, як і зв’язок без них. Mermaid там узагалі не записує ліній зв’язків. Doctrine і SeaORM записують там ту саму сутність, що й у всьому документі, разом із діями.
Стиль назв
Кожен із параметрів Table Name Case і Column Name Case підтримує Pascal, Camel, Snake і None.
Типові значення — Pascal для назв таблиць і Camel для назв стовпців. None виводить назву так, як її записано в діаграмі.
За будь-якого стилю назва, зарезервована мовою цільового формату, екранується, якщо ця мова дозволяє її екранувати, як-от @class у C# або r#type у Rust, і перейменовується, якщо не дозволяє, як-от class_ у Java.
AML, DBML і Mermaid ігнорують обидва налаштування й завжди виводять назви з діаграми.
SeaORM теж їх ігнорує: він називає поля й модулі в стилі snake case — у формі, яку SeaORM зчитує назад, — а збережені назви вказує в table_name і, де вони відрізняються, у column_name.
Для цих чотирьох цільових форматів панель приглушує обидва списки й показує під ними примітку Not used by.
База даних
Типи даних визначаються відповідно до вибраної бази даних — див. бази даних.
На цій вкладці виберіть її у списку Database на панелі, у пункті Database контекстного меню або у швидкому пошуку, і код одразу перепишеться. Це єдине налаштування бази даних діаграми, те саме, яке задають контекстне меню полотна й вкладка схеми SQL, тож зміна тут видна й там.
Drizzle бере свій діалект із того самого налаштування: pgTable для PostgreSQL, mysqlTable для MySQL і MariaDB, sqliteTable для SQLite та pgTable для будь-якої іншої бази даних.
SeaORM записує атрибут column_type там, де інакше SeaORM створив би інший тип стовпця в PostgreSQL, MySQL, MariaDB чи SQLite, і не записує жодного в MSSQL, Oracle, Snowflake чи Databricks, для яких SeaORM не має бекенду.
Вибрана база даних також визначає, які дії ON DELETE і ON UPDATE записують цільові формати ORM.
Doctrine, SeaORM, Sequelize, SQLAlchemy і TypeORM пропускають будь-яку дію, яку пропускає схема SQL цієї бази даних, як-от SET DEFAULT у MySQL і MariaDB, RESTRICT у MSSQL або всі дії, крім NO ACTION, у Snowflake і Databricks, тож застосовується типова поведінка бази даних. Повний перелік наведено в розділі ON DELETE і ON UPDATE.
Натомість Drizzle дотримується діалекту, у якому записує код: код mysqlTable пропускає SET DEFAULT, тоді як код pgTable і sqliteTable зберігає всі дії, зокрема й код pgTable, який він записує для MSSQL, Oracle, Snowflake і Databricks.
AML, DBML і Mermaid — виняток: вони виводять кожен тип даних так, як його записано в діаграмі, тож налаштування бази даних не змінює їхнього результату, а панель приглушує для них Database. AML і DBML записують усі дії, які задає зв’язок, а Mermaid не записує жодної.
Лапки
Параметр Bracket доступний на панелі, у контекстному меню й у швидкому пошуку, лише поки мовою є Doctrine, JPA або SeaORM.
Це те саме налаштування, що й лапки на вкладці схеми SQL, — див. схема SQL, — тож зміна тут змінює й те, як схема SQL бере назви в лапки. Воно пропонує SingleQuote, DoubleQuote, Backtick і None та початково має значення None.
Doctrine: за будь-якого типу лапок, крімNone, кожна назва таблиці, стовпця й стовпця з’єднання береться у зворотні апострофи — так Doctrine позначає назву, яку треба взяти в лапки, як-от#[ORM\Table(name: '`order`')]. ЗаNoneу них береться лише назва, яка цього потребує: слово, зарезервоване базою даних, назва, що не є простим ідентифікатором ASCII, або назва, введена в лапках.JPA: за будь-якого типу лапок, крімNone, назва таблиці, що є зарезервованим словом, береться в лапки всередині@Table, як-от@Table(name = "\"user\""). ЗаNoneвона лишається без лапок, як і в схемі SQL.SeaORM: заNoneназви записуються так, як їх зберігає база даних: назва таблиці з крапкою розділяється наschema_nameіtable_name, а в PostgreSQL назва без лапок зводиться до нижнього регістру. За будь-якого іншого типу лапок назва зберігається цілою, як її записано.
Збереження або копіювання результату
Save file унизу панелі параметрів або в контекстному меню зберігає показаний код у файл.
Файл отримує назву так само, як і будь-який експорт: <database name>-<timestamp> з розширенням із таблиці мов, як-от shop-2026-10-12T04_05_06.ts, і зберігається туди ж, куди й будь-який експорт у вашому хості, — див. експорт. Java і JPA поміщають усі класи в один файл .java, як їх показує вкладка.
Меню Export не має пункту для генератора коду, а вкладка Code Generator у вікні властивостей таблиці не може зберегти файл.
Щоб скопіювати код, клацніть Copy унизу панелі або наведіть вказівник на код і клацніть кнопку копіювання в його верхньому правому куті — у вікні властивостей таблиці це єдиний спосіб.
Сповіщення Copied! з галочкою підтверджує це протягом двох секунд. Якщо браузер або хост відмовляє в доступі до буфера обміну, про це натомість повідомляє сповіщення Couldn't copy to the clipboard зі знаком попередження. Повторне копіювання замінює сповіщення, а не додає ще одне.
Текст також можна виділяти, щоб узяти лише потрібну вам частину.